Class Leads Nations I
classleadsnationswiki
https://classleadsnations.miraheze.org/wiki/Main_Page
MediaWiki 1.40.1
first-letter
Media
Special
Talk
User
User talk
Class Leads Nations I
Class Leads Nations I talk
File
File talk
MediaWiki
MediaWiki talk
Template
Template talk
Help
Help talk
Category
Category talk
Module
Module talk
Template:Campaign/doc
10
1067
2195
2013-05-07T21:33:04Z
[[]]>BDD
0
BDD moved page [[Template:Campaign/doc]] to [[Template:Campaignbox/doc]] over redirect: RM; see talk page
wikitext
text/x-wiki
#REDIRECT [[Template:Campaignbox/doc]]
96204735bd25c964b25be72f9fe56c67b3302279
Template:Country data Holy Roman Empire
10
1054
2169
2013-10-19T14:59:12Z
[[]]>WOSlinker
0
Changed protection level of Template:Country data Holy Roman Empire: allow template editors to modify ([Edit=Protected template] (indefinite) [Move=Protected template] (indefinite))
wikitext
text/x-wiki
{{ {{{1<noinclude>|country showdata</noinclude>}}}
| alias = Holy Roman Empire
| flag alias = Banner of the Holy Roman Emperor (after 1400).svg
| flag alias-1200 = Flag of the Holy Roman Empire (1200-1350).svg
| flag alias-old = Heiliges Römisches Reich - Reichssturmfahne vor 1433.svg
| size = {{{size|}}}
| name = {{{name|}}}
| variant = {{{variant|}}}
<noinclude>
| var1 = 1200
| var2 = old
</noinclude>
}}
c24cc53598b544658ee4420e6aa0370eca6c4d78
Template:0
10
204
414
2013-11-02T02:28:36Z
[[w>Fuhghettaboutit
0
Changed protection level of Template:0: Enable access by template editors ([Edit=Allow only template editors and admins] (indefinite) [Move=Allow only template editors and admins] (indefinite))
wikitext
text/x-wiki
<includeonly><span style="visibility:hidden;color:transparent;">{{{1|0}}}</span></includeonly><noinclude>
{{documentation}}
</noinclude>
3a81b6766266cc4e7b5039558fa86857b943df9b
Template:Collapsible list
10
226
458
2013-11-02T05:07:45Z
[[w>Fuhghettaboutit
0
Changed protection level of Template:Collapsible list: Enable access by template editors ([Edit=Allow only template editors and admins] (indefinite) [Move=Allow only template editors and admins] (indefinite))
wikitext
text/x-wiki
{{<includeonly>safesubst:</includeonly>#invoke:collapsible list|main}}<noinclude>
{{documentation}}
<!-- Categories go on the /doc subpage, and interwikis go on Wikidata. -->
</noinclude>
aff61df28bcc6c3457d6aa36ada4fffe68c409a9
Template:!-
10
223
452
2013-11-17T11:54:04Z
[[w>Mr. Stradivarius
0
Changed protection level of Template:!-: [[WP:High-risk templates|Highly visible template]]: reinstate full-protection - this should never be edited ([Edit=Block all non-admin users] (indefinite) [Move=Block all non-admin users] (indefinite))
wikitext
text/x-wiki
|-<noinclude>
{{documentation}}
</noinclude>
19a1b27b5273caa6fd83a1208fb704afa9ee7c04
Template:Native phrase
10
257
520
2013-12-18T21:08:38Z
Nick
15
Protected Template:Native phrase: [[WP:High-risk templates|Highly visible template]]: #redirect ([Edit=Allow only template editors and admins] (indefinite) [Move=Allow only template editors and admins] (indefinite))
wikitext
text/x-wiki
#redirect [[Template:Native name]]
561f2c45647b28659d991f0a467779366e7ec49e
Template:Convinfobox
10
233
472
2013-12-22T16:32:09Z
[[w>Frietjes
0
sync with sandbox, will save old version in sandbox for comparison
wikitext
text/x-wiki
{{Convinfobox/{{#if:{{{1|}}}|pri}}{{#if:{{{3|}}}|sec}}{{#if:{{{6|}}}|{{#if:{{{5|}}}|ter}}3|2}}|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5|}}}|{{{6|}}}|{{{7|}}}|sp={{{sp|}}}|lk={{{lk|off}}}|abbr={{{abbr|on}}}|disp={{{disp|}}}|adj={{{adj|}}}|sigfig={{{sigfig|}}}}}<noinclude>{{documentation}}</noinclude>
dd1f683285c4b5ba7197ff1275954bd1592ad76a
Template:Dated maintenance category
10
290
586
2014-01-08T08:14:55Z
[[w>John of Reading
0
Second attempt. Those spaces upset inline templates such as {{As of}}. Instead, try an unconditional <nowiki/>
wikitext
text/x-wiki
<nowiki/><!--This nowiki helps to prevent whitespace at the top of articles-->{{#ifeq:{{FULLROOTPAGENAME}}|Wikipedia:Template messages|<!--Do not categorize-->|<!--
-->{{#ifexpr:{{#if:{{NAMESPACE}}|0|1}}+{{#ifeq:{{{onlyarticles|no}}}|yes|0|1}}
|{{#if:{{{3|}}}
|[[Category:{{{1}}} {{{2}}} {{{3}}}]]<!--
-->{{#ifexist:Category:{{{1}}} {{{2}}} {{{3}}}
|<!--
-->|[[Category:Articles with invalid date parameter in template]]<!--
-->}}
|[[Category:{{#if:{{{5|}}}
|{{{5}}}<!--
-->|{{{1}}}<!--
-->}}]]<!--
-->}}{{#if:{{{4|}}}
|[[Category:{{{4}}}]]}}<!--
-->}}<!--
-->}}<noinclude>
{{documentation}}
</noinclude>
41e7d4000124d4f718ddf222af0b72825048c4c4
Template:Infobox geopolitical organization
10
284
574
2014-02-21T17:02:10Z
[[w>Wbm1058
0
remove template in the wrong namespace, removed: {{R from other capitalisation}} using [[Project:AWB|AWB]]
wikitext
text/x-wiki
#REDIRECT [[Template:Infobox country]]{{R from alternate name}}
<!-- see Template:Infobox Geopolitical organization -->
4d4892c38a22f1866ca7a29f81ddbc7fc26967f5
Template:Hatnote
10
241
488
2014-05-23T15:55:04Z
[[w>SMcCandlish
0
tweak
wikitext
text/x-wiki
<includeonly>{{#invoke:Hatnote|hatnote}}</includeonly><noinclude>
{{documentation}}
<!-- Categories go on the /doc subpage, and interwikis go on Wikidata. -->
</noinclude>
4a1d1028d07c9056022807a96051e1c82cf2a1c7
Template:Country data Electorate of Saxony
10
1062
2185
2014-07-31T13:55:53Z
[[]]>Taravyvan Adijene
0
стыль
wikitext
text/x-wiki
{{ {{{1<noinclude>|country showdata</noinclude>}}}
| alias = Electorate of Saxony
| shortname alias = Saxony
| flag alias = Flag of Electoral Saxony.svg
| size = {{{size|}}}
| name = {{{name|}}}
<noinclude>
| related1 = Kingdom of Saxony
| related2 = Saxony
| cat = Saxony electorate
</noinclude>
}}
92d992249b05224909f6fc125f5b07f9889af451
Template:WPMILHIST Infobox style
10
1040
2141
2014-10-07T15:24:52Z
[[]]>Jackmcbarn
0
make main_box piggyback off of main_box_raw
wikitext
text/x-wiki
<includeonly>{{#switch:{{{1|}}}
|main_box=class="{{#if:{{{2|}}}|infobox {{{2}}}|infobox}}" style="{{#invoke:Data|Module:WPMILHIST Infobox style|main_box_raw}}"
|{{#invoke:Data|Module:WPMILHIST Infobox style|{{{1|}}}}}
}}</includeonly><noinclude>
{{documentation}}
</noinclude>
b117547056afc703e2f1371497b0a53fa5a22751
Module:Ns has subpages
828
294
594
2014-12-10T06:37:29Z
[[w>Mr. Stradivarius
0
Protected Module:Ns has subpages: [[WP:High-risk templates|High-risk Lua module]] ([Edit=Allow only template editors and admins] (indefinite) [Move=Allow only template editors and admins] (indefinite))
Scribunto
text/plain
-- This module implements [[Template:Ns has subpages]].
-- While the template is fairly simple, this information is made available to
-- Lua directly, so using a module means that we don't have to update the
-- template as new namespaces are added.
local p = {}
function p._main(ns, frame)
-- Get the current namespace if we were not passed one.
if not ns then
ns = mw.title.getCurrentTitle().namespace
end
-- Look up the namespace table from mw.site.namespaces. This should work
-- for a majority of cases.
local nsTable = mw.site.namespaces[ns]
-- Try using string matching to get the namespace from page names.
-- Do a quick and dirty bad title check to try and make sure we do the same
-- thing as {{NAMESPACE}} in most cases.
if not nsTable and type(ns) == 'string' and not ns:find('[<>|%[%]{}]') then
local nsStripped = ns:gsub('^[_%s]*:', '')
nsStripped = nsStripped:gsub(':.*$', '')
nsTable = mw.site.namespaces[nsStripped]
end
-- If we still have no match then try the {{NAMESPACE}} parser function,
-- which should catch the remainder of cases. Don't use a mw.title object,
-- as this would increment the expensive function count for each new page
-- tested.
if not nsTable then
frame = frame or mw.getCurrentFrame()
local nsProcessed = frame:callParserFunction('NAMESPACE', ns)
nsTable = nsProcessed and mw.site.namespaces[nsProcessed]
end
return nsTable and nsTable.hasSubpages
end
function p.main(frame)
local ns = frame:getParent().args[1]
if ns then
ns = ns:match('^%s*(.-)%s*$') -- trim whitespace
ns = tonumber(ns) or ns
end
local hasSubpages = p._main(ns, frame)
return hasSubpages and 'yes' or ''
end
return p
e133068ba73738b16e1e3eba47735516a461eb5b
Template:Flag
10
1034
2129
2014-12-18T05:55:14Z
[[]]>Plastikspork
0
Closing
wikitext
text/x-wiki
{{country data {{{1|}}}|flag/core|name={{{name|{{{1|}}}}}}|variant={{{variant|{{{2|}}}}}}|size={{{size|}}}}}<noinclude>{{documentation}}</noinclude>
d13aac8e23bee030a6fc9b49a8aa1135104ace22
Template:Country data Luxembourg
10
273
552
2014-12-23T00:16:50Z
[[w>Mjroots
0
variant
wikitext
text/x-wiki
{{ {{{1<noinclude>|country showdata</noinclude>}}}
| alias = Luxembourg
| flag alias = Flag of Luxembourg.svg
| flag alias-civil = Civil Ensign of Luxembourg.svg
| size = {{{size|}}}
| name = {{{name|}}}
| altlink = {{{altlink|}}}
| variant = {{{variant|}}}
<noinclude>
| redir1 = LUX
| var1 = civil
</noinclude>
}}
9c76f01b95d0d97baea7583cf7d8cad58336978b
Template:Icon
10
336
703
2015-01-23T10:29:55Z
[[]]>Mr. Stradivarius
0
switch this to use [[Module:Icon]]
wikitext
text/x-wiki
{{#invoke:Icon|main}}<noinclude>
{{documentation}}
<!-- Categories go on the /doc subpage, and interwikis go on Wikidata. -->
</noinclude>
bd5b855953c5eec9d9c48400aa39315cb4218558
Template:Color
10
225
456
2015-02-07T15:43:19Z
[[w>Pigsonthewing
0
allow simple form; will document
wikitext
text/x-wiki
<span style="color:{{{1|}}}">{{{2|{{{1|}}}}}}</span><noinclude>{{Documentation}}<!-- PLEASE ADD THIS TEMPLATE'S CATEGORIES AND INTERWIKIS TO THE /doc SUBPAGE, THANKS --></noinclude>
f12cd387c0d5c11494a7182b7538cc3292eb3a4a
Template:Operational plan/doc
10
1070
2201
2015-03-03T09:35:46Z
[[]]>Invadibot
0
Bot: Fixing double redirect to [[Template:Infobox military operation/doc]]
wikitext
text/x-wiki
#REDIRECT [[Template:Infobox military operation/doc]]
10b255654acded6663dadad8d9084ba41f66bd68
Template:Br separated entries
10
196
397
2015-05-26T18:06:33Z
[[w>Izkala
0
Switch to using [[Module:Separated entries]]; leading and trailing whitespace and newlines are now trimmed
wikitext
text/x-wiki
{{<includeonly>safesubst:</includeonly>#invoke:Separated entries|br}}<noinclude>
{{documentation}}
</noinclude>
2019f7fc383259e70d66e43cbd97a43d20889f1b
Template:Hlist
10
195
395
2015-07-04T15:13:14Z
[[w>Penwhale
0
Changed protection level of Template:Hlist: [[WP:High-risk templates|Highly visible template]] ([Edit=Allow only template editors and admins] (indefinite) [Move=Allow only template editors and admins] (indefinite))
wikitext
text/x-wiki
{{<includeonly>safesubst:</includeonly>#invoke:list|horizontal}}<noinclude>
{{documentation}}
<!-- Categories go on the /doc subpage, and interwikis go on Wikidata. -->
</noinclude>
9e3824c2e3c0e0dbef2f37556ac0b994987fecf9
Template:Div col end
10
55
114
2015-10-03T15:58:07Z
[[w>NeilN
0
Changed protection level of Template:Div col end: per request at [[WP:RFPP]] ([Edit=Allow only template editors and admins] (indefinite) [Move=Allow only template editors and admins] (indefinite))
wikitext
text/x-wiki
<includeonly></div></includeonly><noinclude>
{{Documentation|Template:Div col/doc}}
</noinclude>
78088d41c21d779e3722f220fcc9773dfbbc1e4f
Template:Spaces
10
200
406
2015-10-25T11:38:26Z
[[w>Edokter
0
use class
wikitext
text/x-wiki
<span class="nowrap">{{#iferror:{{#expr:{{{1|1}}}}}
|{{#switch:{{{1}}}
|fig= 
|en= 
|em= 
|thin= 
|hair= 
|
}}
|{{#invoke:String|rep|{{#switch:{{{2}}}
|fig= 
|en= 
|em= 
|thin= 
|hair= 
|
}}|{{{1|1}}}}}
}}</span><noinclude>
{{documentation}}
</noinclude>
a9ed762825e7579f15dcb9b171b0c1c3bf524b3f
Template:Nowrap
10
180
365
2015-11-28T10:13:53Z
[[w>Edokter
0
Adapt comment; edits inside noinclude blocks should not affect job queue, but won't kill parser either way.
wikitext
text/x-wiki
<span class="nowrap">{{{1}}}</span><noinclude>
{{documentation}}
<!-- Categories go on the /doc page; interwikis go to Wikidata. -->
</noinclude>
5d0dc6b6d89b37f4356242404f46138a4017f015
Template:\
10
209
424
2015-12-13T11:55:37Z
[[w>Graeme Bartlett
0
Changed protection level of Template:\: [[WP:High-risk templates|Highly visible template]] ([Edit=Allow only template editors and admins] (indefinite) [Move=Allow only administrators] (indefinite))
wikitext
text/x-wiki
/ <noinclude>
{{Documentation}}
<!-- Add categories and interwikis to the /doc subpage, not here! -->
</noinclude>
8cbfbe9d6f2aaa7726dfacfb2ee3c213dae39921
Template:PAGENAMEBASE
10
1022
2101
2016-03-06T09:37:56Z
[[]]>Cabayi
0
per edit request & discussion
wikitext
text/x-wiki
{{{{{|safesubst:}}}#Invoke:String|replace|{{{1|{{{{{|safesubst:}}}PAGENAME}}}}}|%s+%b()$||1|false}}<noinclude>
{{documentation}}
</noinclude>
f23a5d434cb5b0baac5e1f58e9ceef9118e6873f
Template:Diff
10
1014
2083
2016-04-10T08:58:51Z
[[]]>Edokter
0
Add title= to easy copy/paste of diff links
wikitext
text/x-wiki
<span class="plainlinks">[{{#if:{{{title|{{{page|{{{1|}}}}}}}}}
|{{fullurl:{{{title|{{{page|{{{1}}}}}}}}}|{{#if:{{{diff|{{{2|}}}}}}
|diff={{trim|{{{diff|{{{2}}}}}}}}&
}}oldid={{trim|{{{oldid|{{{3|}}}}}}}}}}
|{{SERVER}}{{SCRIPTPATH}}/index.php?title={{#if:{{{diff|{{{2|}}}}}}
|&diff={{trim|{{{diff|{{{2}}}}}}}}
}}&oldid={{trim|{{{oldid|{{{3|}}}}}}}}
}}{{#ifeq:{{{diffonly|}}}|yes|&diffonly=1}} {{{label|{{{4|}}}}}}]</span><noinclude>
{{documentation}}
</noinclude>
32a6320b7d9c2652396a60306875ca9c97d3273e
Template:(!
10
213
432
2016-08-09T22:00:28Z
[[w>Renamed user mou89p43twvqcvm8ut9w3
0
Changed protection level of Template:(!: [[WP:High-risk templates|Highly visible template]] ([Edit=Require template editor access] (indefinite) [Move=Require template editor access] (indefinite))
wikitext
text/x-wiki
<includeonly>{|</includeonly><noinclude><nowiki>{|</nowiki>{{Documentation}}
</noinclude>
f709d1f206330f000c28ae20e722426c750f9bd5
Template:Fakeref
10
1057
2175
2016-08-16T12:12:24Z
[[]]>AvicBot
0
Bot: Fixing double redirect to [[Template:Dummy reference]]
wikitext
text/x-wiki
#REDIRECT [[Template:Dummy reference]]
c85c391fe2de3ebfd2154c56303a2085c57e9dd2
Template:Str left
10
249
504
2016-09-30T07:01:19Z
[[w>Ymblanter
0
Changed protection level of Template:Str left: [[WP:High-risk templates|Highly visible template]]: RFPP request ([Edit=Require template editor access] (indefinite) [Move=Require template editor access] (indefinite))
wikitext
text/x-wiki
<includeonly>{{safesubst:padleft:|{{{2|1}}}|{{{1}}}}}</includeonly><noinclude>
{{documentation}}
<!-- Categories go on the /doc subpage, and interwikis go on Wikidata. -->
</noinclude>
2048b0d7b35e156528655b1d090e8b5ffab3f400
Template:Both
10
194
393
2016-12-04T04:31:50Z
[[w>JJMC89
0
make subst'able
wikitext
text/x-wiki
{{SAFESUBST:<noinclude />#if:{{{1|}}}|{{SAFESUBST:<noinclude />#if:{{{2|}}}|1}}}}<noinclude>
{{documentation}}
</noinclude>
57c3c0ffa811a7f31c675b2d79aedf4382e9b88d
Template:Convinfobox/pri2
10
234
474
2016-12-23T16:48:45Z
[[w>Frietjes
0
we need the <noinclude> tag
wikitext
text/x-wiki
<includeonly>{{convert|{{{1}}}|{{{2}}}|{{{4}}}|{{{5|}}}|sp={{{sp|}}}|lk={{{lk|off}}}|abbr={{{abbr|on}}}|disp={{{disp|}}}|adj={{{adj|}}}|sigfig={{{sigfig|}}}}}</includeonly><noinclude>
[[Category:Subtemplates of Template Convinfobox]]
</noinclude>
4f7541f33c39c2bce052ff78783cf168d9b310b2
Template:Section link
10
296
598
2017-01-17T01:29:39Z
[[w>Primefac
0
done
wikitext
text/x-wiki
{{#invoke:Section link|main}}<noinclude>
{{documentation}}
<!-- Categories go on the /doc subpage and interwikis go on Wikidata. -->
</noinclude>
8d047e5845f8a9b74a4655b5dd79ca7595a8f88b
Template:See also
10
334
701
2017-02-02T05:40:25Z
[[]]>Nihiltres
0
Updated from sandbox to use [[Module:Labelled list hatnote]]
wikitext
text/x-wiki
<includeonly>{{#invoke:Labelled list hatnote|labelledList|See also}}</includeonly><noinclude>
{{documentation}}
<!-- Categories go on the /doc subpage, and interwikis go on Wikidata. -->
</noinclude>
74d2ab6a0df5605fbe2085c405925ec659be52b7
Template:Location map
10
1051
2163
2017-03-16T00:55:26Z
[[]]>Plastikspork
0
TFD closed as no consensus (using [[User:Evad37/TFDcloser|TFDcloser]])
wikitext
text/x-wiki
<includeonly>{{#invoke:Location map|main}}</includeonly><noinclude>{{documentation}}</noinclude>
732416b8068d2dc3549db5aa5ffa786beb502886
Template:Country data EU
10
270
546
2017-04-07T20:08:10Z
[[w>Jo-Jo Eumerus
0
Changed protection level for "[[Template:Country data EU]]": Matching redirect target ([Edit=Require template editor access] (indefinite) [Move=Require template editor access] (indefinite))
wikitext
text/x-wiki
#REDIRECT [[Template:Country data European Union]]<noinclude>[[Category: Country data redirects|EU]]</noinclude>
2267fd165f54795dc23946ea44a5a5f233a3d041
Template:Side box
10
305
616
2017-04-08T19:24:23Z
[[w>Jo-Jo Eumerus
0
Changed protection level for "[[Template:Side box]]": [[WP:High-risk templates|Highly visible template]]: Allowing template editors ([Edit=Require template editor access] (indefinite) [Move=Require template editor access] (indefinite))
wikitext
text/x-wiki
{{#invoke:Side box|main}}<noinclude>
{{documentation}}
<!-- Categories go on the /doc subpage, and interwikis go on Wikidata. -->
</noinclude>
f02d48c7bd2f7bc64e2982d16b3578c99137d27e
Template:Spaced ndash
10
1046
2153
2017-04-23T13:25:27Z
[[]]>Jo-Jo Eumerus
0
Changed protection level for "[[Template:Spaced ndash]]": Matching redirect target ([Edit=Require template editor access] (indefinite) [Move=Require template editor access] (indefinite))
wikitext
text/x-wiki
#REDIRECT [[Template:Spaced en dash]]
{{R from move}}
943ce837a48a4907650d7398e8d10271b21dde62
Template:Blue
10
1055
2171
2017-10-09T16:10:03Z
[[]]>MusikAnimal
0
Protected "[[Template:Blue]]": [[WP:High-risk templates|Highly visible template]]; 11,000+ transclusions ([Edit=Require template editor access] (indefinite) [Move=Require template editor access] (indefinite))
wikitext
text/x-wiki
<span style="color:blue">{{{1}}}</span><noinclude>
<!-- Add categories and interwikis to the /doc subpage, not here! -->
{{Documentation}}</noinclude>
89f3353953a76d63c4ba5cd23af400b64ef178f4
Template:See
10
347
727
2017-12-09T06:09:36Z
[[]]>Alex 21
0
Changed redirect target from [[Template:Further information]] to [[Template:Further]]
wikitext
text/x-wiki
#REDIRECT [[Template:Further]]
5d02b5a16045ac62c67ba614e550dec3a5661db7
Module:Lang/ISO 639 synonyms
828
189
383
2017-12-13T23:10:47Z
[[w>Trappist the monk
0
Scribunto
text/plain
-- File-Date: 2013-01-11
return {
["aar"] = "aa",
["abk"] = "ab",
["afr"] = "af",
["aka"] = "ak",
["amh"] = "am",
["ara"] = "ar",
["arg"] = "an",
["asm"] = "as",
["ava"] = "av",
["ave"] = "ae",
["aym"] = "ay",
["aze"] = "az",
["bak"] = "ba",
["bam"] = "bm",
["bel"] = "be",
["ben"] = "bn",
["bih"] = "bh",
["bis"] = "bi",
["bod"] = "bo",
["bos"] = "bs",
["bre"] = "br",
["bul"] = "bg",
["cat"] = "ca",
["ces"] = "cs",
["cha"] = "ch",
["che"] = "ce",
["chu"] = "cu",
["chv"] = "cv",
["cor"] = "kw",
["cos"] = "co",
["cre"] = "cr",
["cym"] = "cy",
["dan"] = "da",
["deu"] = "de",
["div"] = "dv",
["dzo"] = "dz",
["ell"] = "el",
["eng"] = "en",
["epo"] = "eo",
["est"] = "et",
["eus"] = "eu",
["ewe"] = "ee",
["fao"] = "fo",
["fas"] = "fa",
["fij"] = "fj",
["fin"] = "fi",
["fra"] = "fr",
["fry"] = "fy",
["ful"] = "ff",
["gla"] = "gd",
["gle"] = "ga",
["glg"] = "gl",
["glv"] = "gv",
["grn"] = "gn",
["guj"] = "gu",
["hat"] = "ht",
["hau"] = "ha",
["heb"] = "he",
["her"] = "hz",
["hin"] = "hi",
["hmo"] = "ho",
["hrv"] = "hr",
["hun"] = "hu",
["hye"] = "hy",
["ibo"] = "ig",
["ido"] = "io",
["iii"] = "ii",
["iku"] = "iu",
["ile"] = "ie",
["ina"] = "ia",
["ind"] = "id",
["ipk"] = "ik",
["isl"] = "is",
["ita"] = "it",
["jav"] = "jv",
["jpn"] = "ja",
["kal"] = "kl",
["kan"] = "kn",
["kas"] = "ks",
["kat"] = "ka",
["kau"] = "kr",
["kaz"] = "kk",
["khm"] = "km",
["kik"] = "ki",
["kin"] = "rw",
["kir"] = "ky",
["kom"] = "kv",
["kon"] = "kg",
["kor"] = "ko",
["kua"] = "kj",
["kur"] = "ku",
["lao"] = "lo",
["lat"] = "la",
["lav"] = "lv",
["lim"] = "li",
["lin"] = "ln",
["lit"] = "lt",
["ltz"] = "lb",
["lub"] = "lu",
["lug"] = "lg",
["mah"] = "mh",
["mal"] = "ml",
["mar"] = "mr",
["mkd"] = "mk",
["mlg"] = "mg",
["mlt"] = "mt",
["mon"] = "mn",
["mri"] = "mi",
["msa"] = "ms",
["mya"] = "my",
["nau"] = "na",
["nav"] = "nv",
["nbl"] = "nr",
["nde"] = "nd",
["ndo"] = "ng",
["nep"] = "ne",
["nld"] = "nl",
["nno"] = "nn",
["nob"] = "nb",
["nor"] = "no",
["nya"] = "ny",
["oci"] = "oc",
["oji"] = "oj",
["ori"] = "or",
["orm"] = "om",
["oss"] = "os",
["pan"] = "pa",
["pli"] = "pi",
["pol"] = "pl",
["por"] = "pt",
["pus"] = "ps",
["que"] = "qu",
["roh"] = "rm",
["ron"] = "ro",
["run"] = "rn",
["rus"] = "ru",
["sag"] = "sg",
["san"] = "sa",
["sin"] = "si",
["slk"] = "sk",
["slv"] = "sl",
["sme"] = "se",
["smo"] = "sm",
["sna"] = "sn",
["snd"] = "sd",
["som"] = "so",
["sot"] = "st",
["spa"] = "es",
["sqi"] = "sq",
["srd"] = "sc",
["srp"] = "sr",
["ssw"] = "ss",
["sun"] = "su",
["swa"] = "sw",
["swe"] = "sv",
["tah"] = "ty",
["tam"] = "ta",
["tat"] = "tt",
["tel"] = "te",
["tgk"] = "tg",
["tgl"] = "tl",
["tha"] = "th",
["tir"] = "ti",
["ton"] = "to",
["tsn"] = "tn",
["tso"] = "ts",
["tuk"] = "tk",
["tur"] = "tr",
["twi"] = "tw",
["uig"] = "ug",
["ukr"] = "uk",
["urd"] = "ur",
["uzb"] = "uz",
["ven"] = "ve",
["vie"] = "vi",
["vol"] = "vo",
["wln"] = "wa",
["wol"] = "wo",
["xho"] = "xh",
["yid"] = "yi",
["yor"] = "yo",
["zha"] = "za",
["zho"] = "zh",
["zul"] = "zu"
}
f3fb5374c9e0fdef6ce6ea22736b79468358ca19
Template:Dummy reference
10
1056
2173
2018-01-10T19:21:30Z
[[]]>Primefac
0
Protected "[[Template:Dummy reference]]": [[WP:SEMI|semi-protecting]] highly-visible templates in response to recent template-space vandalism ([Edit=Require autoconfirmed or confirmed access] (indefinite) [Move=Require autoconfirmed or confirmed access...
wikitext
text/x-wiki
<sup class="reference nowrap ltr" style="color:#002bb8;">[{{#ifeq:{{yes/no|{{{txtital|}}}}}|yes|<span style="font-style:italic">}}{{#if:{{{txtcol|}}}|<span style="color:{{{txtcol|}}}">}}{{{1|1}}}{{#if:{{{txtcol|}}}|</span>}}{{#ifeq:{{yes/no|{{{txtital|}}}}}|yes|</span>}}]</sup><noinclude>
{{documentation}}
</noinclude>
7be6798eb28af3f887fa775b50dc87e0c575cde9
Template:Yes/no
10
1058
2177
2018-01-10T19:22:36Z
[[]]>Primefac
0
Protected "[[Template:Yes/no]]": [[WP:SEMI|semi-protecting]] highly-visible templates in response to recent template-space vandalism ([Edit=Require autoconfirmed or confirmed access] (indefinite) [Move=Require autoconfirmed or confirmed access] (indefi...
wikitext
text/x-wiki
#REDIRECT [[Template:Yesno]]
80e458cd4d851471d13896c26ecf96ce6dcdd579
Template:UF-hcal
10
1065
2191
2018-01-19T00:34:07Z
[[]]>Primefac
0
Protected "[[Template:UF-hcal]]": [[WP:SEMIPROT|semi-protection]] of high-usage templates to combat systematic vandalism ([Edit=Require autoconfirmed or confirmed access] (indefinite) [Move=Require autoconfirmed or confirmed access] (indefinite))
wikitext
text/x-wiki
{{Microformat message
| format = hCalendar
| data = event details
| subtemplates =
{{#if:{{{hide_subtemplates}}} |<noinclude>}}
Dates will only be included if you use {{tl|start date}} (for single dates) or {{tl|end date}}. Do not, however, use these templates [[Wikipedia:WikiProject Microformats/dates|if a date before 1583 CE is involved]].
To include URLs, use {{tl|URL}}.
{{#if:{{{hide_subtemplates}}} |</noinclude>}}
|attendee |contact |description |dtend |dtstart |location |organiser |summary |url |vevent
| nocollapse = on
}}<includeonly>{{#ifeq:{{SUBPAGENAME}}|doc | |{{#ifeq:{{SUBPAGENAME}}|sandbox | |[[Category:Templates generating hCalendars|{{PAGENAME}}]]}} }}</includeonly><noinclude>
{{Documentation |content={{Microformat message templates}}}}
[[Category:Microformat (uF) message templates]]
</noinclude>
f453b47f676a5c474e14155f7013b69b4716748b
Template:Remove first word
10
252
510
2018-02-13T20:10:27Z
[[w>WOSlinker
0
separate pp-template not needed
wikitext
text/x-wiki
{{<includeonly>safesubst:</includeonly>#invoke:String|replace|source={{{1}}}|pattern=^[^{{{sep|%s}}}]*{{{sep|%s}}}*|replace=|plain=false}}<noinclude>{{Documentation}}</noinclude>
df7a9e692f68be1581be06af5f51eaed5483b4c8
Template:Yesno-no
10
56
116
2018-02-13T20:27:17Z
[[w>WOSlinker
0
separate pp-template not needed
wikitext
text/x-wiki
{{safesubst:<noinclude />yesno|{{{1}}}|yes={{{yes|yes}}}|no={{{no|no}}}|blank={{{blank|no}}}|¬={{{¬|no}}}|def={{{def|no}}}}}<noinclude>
{{Documentation|Template:Yesno/doc}}
<!--Categories go in the doc page referenced above; interwikis go in Wikidata.-->
</noinclude>
1ad7b7800da1b867ead8f6ff8cef76e6201b3b56
Template:Raise
10
282
570
2018-02-23T16:30:18Z
[[w>Primefac
0
Changed protection level for "[[Template:Raise]]": [[WP:HIGHRISK|high-risk]] template with 4000+ transclusions ([Edit=Require template editor access] (indefinite) [Move=Require template editor access] (indefinite))
wikitext
text/x-wiki
<span style="position:relative; bottom:{{#if:{{{2|}}} |{{{1}}} |0.6em}};">{{{2|{{{1}}}}}}</span><noinclude>{{Documentation}}</noinclude>
da747eda753555e094baeeb84eeca1be020ee399
Template:Convinfobox/prisec2
10
235
476
2018-02-23T17:02:12Z
[[w>Primefac
0
Changed protection level for "[[Template:Convinfobox/prisec2]]": [[WP:HIGHRISK|high-risk]] template with 2000+ transclusions ([Edit=Require template editor access] (indefinite) [Move=Require template editor access] (indefinite))
wikitext
text/x-wiki
#REDIRECT [[Template:Convinfobox/pri2]]<!--{{convert/{{{2}}}|{{{1}}}|{{{3}}}|{{{4}}}|d=valunit2/{{{d}}}}}<noinclude>
[[Category:Subtemplates of Template Convinfobox]]
</noinclude>-->
b2680a6b956cc0cd7c35c6ea3085e03944317fb9
Module:Distinguish
828
37
78
2018-04-01T10:06:10Z
[[w>Galobtter
0
fixed with text and selfref
Scribunto
text/plain
local mHatnote = require('Module:Hatnote')
local mHatlist = require('Module:Hatnote list')
local mArguments --initialize lazily
local mTableTools --initialize lazily
local libraryUtil = require('libraryUtil')
local checkType = libraryUtil.checkType
local p = {}
function p.distinguish(frame)
mArguments = require('Module:Arguments')
mTableTools = require('Module:TableTools')
local args = mArguments.getArgs(frame)
local selfref = args.selfref
local text = args.text
args = mTableTools.compressSparseArray(args)
return p._distinguish(args, text, selfref)
end
function p._distinguish(args, text, selfref)
checkType("_distinguish", 1, args, 'table')
if #args == 0 and not text then return '' end
local text = string.format(
'Not to be confused with %s.',
text or mHatlist.orList(args, true)
)
hnOptions = {selfref = selfref}
return mHatnote._hatnote(text, hnOptions)
end
return p
0364d14af01fc656ad1d898c5036fbd12a7ca938
Template:Further
10
344
721
2018-07-27T17:29:22Z
[[]]>Galobtter
0
fix so that don't need [[Module:Further]] anymore
wikitext
text/x-wiki
<includeonly>{{#invoke:labelled list hatnote|labelledList|Further information{{#if:{{{topic|}}}| on {{{topic|}}}}}}}</includeonly><noinclude>
{{documentation}}
<!-- Categories go on the /doc subpage, and interwikis go on Wikidata. -->
</noinclude>
dd29c6dfb3894a2dc3f20144a654b7012c9a9214
Template:Infobox former country
10
281
568
2018-08-12T22:08:56Z
[[w>Primefac
0
merge complete
wikitext
text/x-wiki
#REDIRECT [[Template:Infobox country]]
{{r from merger}}
d1a087676a1c1fbf80c00fb58bf83cff967f7de4
Template:Infobox
10
316
675
2018-08-15T18:33:36Z
[[]]>Primefac
0
Undid revision 855063393 by [[Special:Contributions/Jdlrobson|Jdlrobson]] ([[User talk:Jdlrobson|talk]]) rather problematic change mentioned [[Template_talk:Infobox#Using_template_styles_to_reduce_technical_debt_inside_mobile_skin|on talk page]], reverting until it can be sorted
wikitext
text/x-wiki
{{#invoke:Infobox|infobox}}<includeonly>{{template other|{{#ifeq:{{PAGENAME}}|Infobox||{{#ifeq:{{str left|{{SUBPAGENAME}}|7}}|Infobox|[[Category:Infobox templates|{{remove first word|{{SUBPAGENAME}}}}]]}}}}|}}</includeonly><noinclude>
{{documentation}}
<!-- Categories go in the /doc subpage, and interwikis go in Wikidata. -->
</noinclude>
817a9f5b6524eced06a57bd1d5fd7179f9369bf2
Module:WPMILHIST Infobox style
828
1043
2147
2018-09-21T22:30:21Z
[[]]>Frietjes
0
slightly larger for [[Operation Fritham]]
Scribunto
text/plain
local retval = {
main_box_raw_auto_width = 'border-spacing:2px;',
header_raw = 'background-color:#C3D6EF;text-align:center;vertical-align:middle;font-size:110%;',
sub_header_raw = 'background-color:#DCDCDC;text-align:center;vertical-align:middle;',
header_color = 'background-color:#C3D6EF;',
nav_box = 'margin:0;float:right;clear:right;width:25.5em;margin-bottom:0.5em;margin-left:1em;',
nav_box_child = 'margin:0;float:right;clear:right;width:25em;margin-bottom:0.5em;',
nav_box_wide = '',
nav_box_header = 'background-color:#C3D6EF;',
nav_box_wide_header = 'background-color:#C3D6EF;',
nav_box_label = 'background-color:#DCDCDC;',
image_box_raw = 'text-align:center;border-bottom:1px solid #aaa;line-height:1.5em;',
image_box_plain_raw = 'text-align:center;line-height:1.5em;',
internal_border = '1px dotted #aaa;',
section_border = '1px solid #aaa;'
}
retval.main_box_raw = 'width:25.5em;' .. retval.main_box_raw_auto_width
retval.header_bar = 'style="' .. retval.header_raw .. '"'
retval.sub_header_bar = 'style="' .. retval.sub_header_raw .. '"'
retval.image_box = 'style="' .. retval.image_box_raw .. '"'
retval.image_box_plain = 'style="' .. retval.image_box_plain_raw .. '"'
return retval
0f9ea47bc17e40cdabbae6de54f63e40ae502f8e
Template:Nobold
10
23
50
2018-10-23T17:15:13Z
[[w>Frietjes
0
wikitext
text/x-wiki
<templatestyles src="Nobold/styles.css"/><span class="nobold">{{{1}}}</span><noinclude>
{{documentation}}
<!-- PLEASE ADD CATEGORIES AND INTERWIKIS TO THE /doc SUBPAGE, THANKS -->
</noinclude>
9c92b5951772bb26ca0fbe9256418b65e47700dd
Template:Country data Slovenia
10
272
550
2018-11-28T21:46:29Z
[[w>Illegitimate Barrister
0
wikitext
text/x-wiki
{{ {{{1<noinclude>|country showdata</noinclude>}}}
| alias = Slovenia
| flag alias = Flag of Slovenia.svg
| link alias-army = Slovenian Ground Force
| link alias-military=Slovenian Armed Forces
| flag alias-military=Flag of the Slovenian Armed Forces.svg
| flag alias-naval=Naval Jack of Slovenia.svg
| link alias-naval=Slovenian Navy
| link-alias-navy=Slovenian Navy
| size = {{{size|}}}
| variant = {{{variant|}}}
| name = {{{name|}}}
| altlink = {{{altlink|}}}
<noinclude>
| redir1 = SVN
| redir2 = SLO
| related1 = SR Slovenia
</noinclude>
}}
68574d7f8429700e25b2100ce323c396d0954025
Template:!)
10
212
430
2018-12-16T17:33:17Z
[[w>Amorymeltzer
0
Changed protection level for "[[Template:!)]]": [[WP:High-risk templates|Highly visible template]]: 200k+ transclusions ([Edit=Require administrator access] (indefinite) [Move=Require administrator access] (indefinite))
wikitext
text/x-wiki
|}<noinclude>
{{Documentation}}
</noinclude>
4708392952b330b1c5bf605bc6fc76222b1609d2
Template:Template other
10
33
70
2018-12-16T22:06:25Z
[[w>Amorymeltzer
0
Changed protection level for "[[Template:Template other]]": [[WP:High-risk templates|Highly visible template]]: Transclusion count has increased dramatically ([Edit=Require administrator access] (indefinite) [Move=Require administrator access] (indefinite))
wikitext
text/x-wiki
{{#switch:
<!--If no or empty "demospace" parameter then detect namespace-->
{{#if:{{{demospace|}}}
| {{lc: {{{demospace}}} }} <!--Use lower case "demospace"-->
| {{#ifeq:{{NAMESPACE}}|{{ns:Template}}
| template
| other
}}
}}
| template = {{{1|}}}
| other
| #default = {{{2|}}}
}}<!--End switch--><noinclude>
{{documentation}}
<!-- Add categories and interwikis to the /doc subpage, not here! -->
</noinclude>
06fb13d264df967b5232141067eb7d2b67372d76
Template:MONTHNUMBER
10
1032
2125
2018-12-17T15:25:23Z
[[]]>Amorymeltzer
0
Changed protection level for "[[Template:MONTHNUMBER]]": Allow template editor access, see [[Template:MONTHNAME]] ([Edit=Require template editor access] (indefinite) [Move=Require template editor access] (indefinite))
wikitext
text/x-wiki
<includeonly>{{#if:{{{1|}}}
|{{#switch:{{lc:{{{1}}}}}
|january|jan=1
|february|feb=2
|march|mar=3
|apr|april=4
|may=5
|june|jun=6
|july|jul=7
|august|aug=8
|september|sep|sept=9
|october|oct=10
|november|nov=11
|december|dec=12
|{{#ifexpr:{{{1}}}<0
|{{#ifexpr:(({{{1}}})round 0)!=({{{1}}})
|{{#expr:12-(((0.5-({{{1}}}))round 0)mod 12)}}
|{{#expr:12-(((11.5-({{{1}}}))round 0)mod 12)}}
}}
|{{#expr:(((10.5+{{{1}}})round 0)mod 12)+1}}
}}
}}
|Missing required parameter 1=''month''!
}}</includeonly><noinclude>
{{Documentation}}
<!-- Add categories and interwikis to the /doc subpage, not here! -->
</noinclude>
c2ade663b96231e493986cd17b454923da290098
Module:Separated entries
828
199
404
2018-12-17T20:54:33Z
[[w>Amorymeltzer
0
Changed protection level for "[[Module:Separated entries]]": [[WP:High-risk templates|High-risk Lua module]]: Over 2M transclusions ([Edit=Require administrator access] (indefinite) [Move=Require administrator access] (indefinite))
Scribunto
text/plain
-- This module takes positional parameters as input and concatenates them with
-- an optional separator. The final separator (the "conjunction") can be
-- specified independently, enabling natural-language lists like
-- "foo, bar, baz and qux". The starting parameter can also be specified.
local compressSparseArray = require('Module:TableTools').compressSparseArray
local p = {}
function p._main(args)
local separator = args.separator
-- Decode (convert to Unicode) HTML escape sequences, such as " " for space.
and mw.text.decode(args.separator) or ''
local conjunction = args.conjunction and mw.text.decode(args.conjunction) or separator
-- Discard values before the starting parameter.
local start = tonumber(args.start)
if start then
for i = 1, start - 1 do args[i] = nil end
end
-- Discard named parameters.
local values = compressSparseArray(args)
return mw.text.listToText(values, separator, conjunction)
end
local function makeInvokeFunction(separator, conjunction, first)
return function (frame)
local args = require('Module:Arguments').getArgs(frame)
args.separator = separator or args.separator
args.conjunction = conjunction or args.conjunction
args.first = first or args.first
return p._main(args)
end
end
p.main = makeInvokeFunction()
p.br = makeInvokeFunction('<br />')
p.comma = makeInvokeFunction(mw.message.new('comma-separator'):plain())
return p
e80231ff3de01afd7f62a94e0a34dc1e67504085
Module:Color contrast
828
345
723
2019-01-06T22:38:25Z
[[]]>Johnuniq
0
fix unintended color2lum global error which is causing errors; clean whitespace
Scribunto
text/plain
--
-- This module implements
-- {{Color contrast ratio}}
-- {{Greater color contrast ratio}}
-- {{ColorToLum}}
-- {{RGBColorToLum}}
--
local p = {}
local HTMLcolor = mw.loadData( 'Module:Color contrast/colors' )
local function sRGB (v)
if (v <= 0.03928) then
v = v / 12.92
else
v = math.pow((v+0.055)/1.055, 2.4)
end
return v
end
local function rgbdec2lum(R, G, B)
if ( 0 <= R and R < 256 and 0 <= G and G < 256 and 0 <= B and B < 256 ) then
return 0.2126 * sRGB(R/255) + 0.7152 * sRGB(G/255) + 0.0722 * sRGB(B/255)
else
return ''
end
end
local function hsl2lum(h, s, l)
if ( 0 <= h and h < 360 and 0 <= s and s <= 1 and 0 <= l and l <= 1 ) then
local c = (1 - math.abs(2*l - 1))*s
local x = c*(1 - math.abs( math.fmod(h/60, 2) - 1) )
local m = l - c/2
local r, g, b = m, m, m
if( 0 <= h and h < 60 ) then
r = r + c
g = g + x
elseif( 60 <= h and h < 120 ) then
r = r + x
g = g + c
elseif( 120 <= h and h < 180 ) then
g = g + c
b = b + x
elseif( 180 <= h and h < 240 ) then
g = g + x
b = b + c
elseif( 240 <= h and h < 300 ) then
r = r + x
b = b + c
elseif( 300 <= h and h < 360 ) then
r = r + c
b = b + x
end
return rgbdec2lum(255*r, 255*g, 255*b)
else
return ''
end
end
local function color2lum(c)
if (c == nil) then
return ''
end
-- html '#' entity
c = c:gsub("#", "#")
-- whitespace
c = c:match( '^%s*(.-)[%s;]*$' )
-- unstrip nowiki strip markers
c = mw.text.unstripNoWiki(c)
-- lowercase
c = c:lower()
-- first try to look it up
local L = HTMLcolor[c]
if (L ~= nil) then
return L
end
-- convert from hsl
if mw.ustring.match(c,'^hsl%([%s]*[0-9][0-9%.]*[%s]*,[%s]*[0-9][0-9%.]*%%[%s]*,[%s]*[0-9][0-9%.]*%%[%s]*%)$') then
local h, s, l = mw.ustring.match(c,'^hsl%([%s]*([0-9][0-9%.]*)[%s]*,[%s]*([0-9][0-9%.]*)%%[%s]*,[%s]*([0-9][0-9%.]*)%%[%s]*%)$')
return hsl2lum(tonumber(h), tonumber(s)/100, tonumber(l)/100)
end
-- convert from rgb
if mw.ustring.match(c,'^rgb%([%s]*[0-9][0-9]*[%s]*,[%s]*[0-9][0-9]*[%s]*,[%s]*[0-9][0-9]*[%s]*%)$') then
local R, G, B = mw.ustring.match(c,'^rgb%([%s]*([0-9][0-9]*)[%s]*,[%s]*([0-9][0-9]*)[%s]*,[%s]*([0-9][0-9]*)[%s]*%)$')
return rgbdec2lum(tonumber(R), tonumber(G), tonumber(B))
end
-- convert from rgb percent
if mw.ustring.match(c,'^rgb%([%s]*[0-9][0-9%.]*%%[%s]*,[%s]*[0-9][0-9%.]*%%[%s]*,[%s]*[0-9][0-9%.]*%%[%s]*%)$') then
local R, G, B = mw.ustring.match(c,'^rgb%([%s]*([0-9][0-9%.]*)%%[%s]*,[%s]*([0-9][0-9%.]*)%%[%s]*,[%s]*([0-9][0-9%.]*)%%[%s]*%)$')
return rgbdec2lum(255*tonumber(R)/100, 255*tonumber(G)/100, 255*tonumber(B)/100)
end
-- remove leading # (if there is one) and whitespace
c = mw.ustring.match(c, '^[%s#]*([a-f0-9]*)[%s]*$')
-- split into rgb
local cs = mw.text.split(c or '', '')
if( #cs == 6 ) then
local R = 16*tonumber('0x' .. cs[1]) + tonumber('0x' .. cs[2])
local G = 16*tonumber('0x' .. cs[3]) + tonumber('0x' .. cs[4])
local B = 16*tonumber('0x' .. cs[5]) + tonumber('0x' .. cs[6])
return rgbdec2lum(R, G, B)
elseif ( #cs == 3 ) then
local R = 16*tonumber('0x' .. cs[1]) + tonumber('0x' .. cs[1])
local G = 16*tonumber('0x' .. cs[2]) + tonumber('0x' .. cs[2])
local B = 16*tonumber('0x' .. cs[3]) + tonumber('0x' .. cs[3])
return rgbdec2lum(R, G, B)
end
-- failure, return blank
return ''
end
-- This exports the function for use in other modules.
-- The colour is passed as a string.
function p._lum(color)
return color2lum(color)
end
function p._greatercontrast(args)
local bias = tonumber(args['bias'] or '0') or 0
local css = (args['css'] and args['css'] ~= '') and true or false
local v1 = color2lum(args[1] or '')
local c2 = args[2] or '#FFFFFF'
local v2 = color2lum(c2)
local c3 = args[3] or '#000000'
local v3 = color2lum(c3)
local ratio1 = -1;
local ratio2 = -1;
if (type(v1) == 'number' and type(v2) == 'number') then
ratio1 = (v2 + 0.05)/(v1 + 0.05)
ratio1 = (ratio1 < 1) and 1/ratio1 or ratio1
end
if (type(v1) == 'number' and type(v3) == 'number') then
ratio2 = (v3 + 0.05)/(v1 + 0.05)
ratio2 = (ratio2 < 1) and 1/ratio2 or ratio2
end
if css then
local c1 = args[1] or ''
if mw.ustring.match(c1, '^[A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9]$') or
mw.ustring.match(c1, '^[A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9]$') then
c1 = '#' .. c1
end
if mw.ustring.match(c2, '^[A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9]$') or
mw.ustring.match(c2, '^[A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9]$') then
c2 = '#' .. c2
end
if mw.ustring.match(v3, '^[A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9]$') or
mw.ustring.match(v3, '^[A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9]$') then
c3 = '#' .. c3
end
return 'background-color:' .. c1 .. '; color:' .. ((ratio1 > 0) and (ratio2 > 0) and ((ratio1 + bias > ratio2) and c2 or c3) or '') .. ';'
end
return (ratio1 > 0) and (ratio2 > 0) and ((ratio1 + bias > ratio2) and c2 or c3) or ''
end
function p._ratio(args)
local v1 = color2lum(args[1])
local v2 = color2lum(args[2])
if (type(v1) == 'number' and type(v2) == 'number') then
-- v1 should be the brighter of the two.
if v2 > v1 then
v1, v2 = v2, v1
end
return (v1 + 0.05)/(v2 + 0.05)
else
return args['error'] or '?'
end
end
function p._styleratio(args)
local style = (args[1] or ''):lower()
local bg, fg = 'white', 'black'
local lum_bg, lum_fg = 1, 0
if args[2] then
local lum = color2lum(args[2])
if lum ~= '' then bg, lum_bg = args[2], lum end
end
if args[3] then
local lum = color2lum(args[3])
if lum ~= '' then fg, lum_fg = args[3], lum end
end
local slist = mw.text.split(mw.ustring.gsub(mw.ustring.gsub(style or '', '&#[Xx]23;', '#'), '#', '#'), ';')
for k = 1,#slist do
local s = slist[k]
local k,v = s:match( '^[%s]*([^:]-):([^:]-)[%s;]*$' )
k = k or ''
v = v or ''
if (k:match('^[%s]*(background)[%s]*$') or k:match('^[%s]*(background%-color)[%s]*$')) then
local lum = color2lum(v)
if( lum ~= '' ) then bg, lum_bg = v, lum end
elseif (k:match('^[%s]*(color)[%s]*$')) then
local lum = color2lum(v)
if( lum ~= '' ) then bg, lum_fg = v, lum end
end
end
if lum_bg > lum_fg then
return (lum_bg + 0.05)/(lum_fg + 0.05)
else
return (lum_fg + 0.05)/(lum_bg + 0.05)
end
end
--[[
Use {{#invoke:Color contrast|somecolor}} directly or
{{#invoke:Color contrast}} from a wrapper template.
Parameters:
-- |1= — required; A color to check.
--]]
function p.lum(frame)
local color = frame.args[1] or frame:getParent().args[1]
return p._lum(color)
end
function p.ratio(frame)
local args = frame.args[1] and frame.args or frame:getParent().args
return p._ratio(args)
end
function p.styleratio(frame)
local args = frame.args[1] and frame.args or frame:getParent().args
return p._styleratio(args)
end
function p.greatercontrast(frame)
local args = frame.args[1] and frame.args or frame:getParent().args
return p._greatercontrast(args)
end
return p
1e399769117591366a63f62996c9a407077cc711
Template:Country data Portugal
10
258
522
2019-01-12T11:28:17Z
[[w>Cabayi
0
Per [[Special:Permalink/878009113#Template-protected edit request on 7 January 2019|request]] by [[User:Havsjö]]
wikitext
text/x-wiki
{{ {{{1<noinclude>|country showdata</noinclude>}}}
| alias = Portugal
| flag alias = Flag of Portugal.svg
| flag alias-1248 = PortugueseFlag1248.svg
| flag alias-1385 = PortugueseFlag1385.svg
| flag alias-1495 = Flag Portugal (1495).svg
| flag alias-1578 = Flag Portugal (1578).svg
| flag alias-1640 = Flag Portugal (1640).svg
| flag alias-1707 = Flag Portugal (1707).svg
| flag alias-1750 = Flag of Portugal (1750).svg
| flag alias-1816 = Flag of the United Kingdom of Portugal, Brazil, and the Algarves.svg
| flag alias-1830 = Flag Portugal (1830).svg
| flag alias-civil = Flag Portugal sea (1830).svg
| flag alias-air force=Portugal Air force fin flash.svg
| flag alias-army = Military flag of Portugal.svg
| link alias-air force = Portuguese Air Force
| link alias-army = Portuguese Army
| link alias-naval = Portuguese Navy
| flag alias-navy=Naval Jack of Portugal.svg
| link alias-navy = Portuguese Navy
| flag alias-marines=Naval Jack of Portugal.svg
| link alias-marines=Portuguese Marine Corps
| size = {{{size|}}}
| name = {{{name|}}}
| altlink = {{{altlink|}}}
| variant = {{{variant|}}}
<noinclude>
| var1 = 1248
| var2 = 1385
| var3 = 1495
| var4 = 1578
| var5 = 1640
| var6 = 1707
| var7 = 1750
| var8 = 1816
| var9 = 1830
| var13 = civil
| redir1 = PRT
| redir2 = POR
| related1 = Portuguese Empire
</noinclude>
}}
208ba0708db45e46bb27b8b9f46d8c0b7b4bb9ed
Module:Color contrast/colors
828
346
725
2019-01-24T12:30:11Z
[[]]>Galobtter
0
Changed protection level for "[[Module:Color contrast/colors]]": [[WP:High-risk templates|High-risk Lua module]] ([Edit=Require template editor access] (indefinite) [Move=Require template editor access] (indefinite))
Scribunto
text/plain
return {
aliceblue = 0.92880068253475,
antiquewhite = 0.84646951707754,
aqua = 0.7874,
aquamarine = 0.8078549208338,
azure = 0.97265264954166,
beige = 0.8988459998705,
bisque = 0.80732327372979,
black = 0,
blanchedalmond = 0.85084439608156,
blue = 0.0722,
blueviolet = 0.12622014321946,
brown = 0.098224287876511,
burlywood = 0.51559844533893,
cadetblue = 0.29424681085422,
chartreuse = 0.76032025902623,
chocolate = 0.23898526114557,
coral = 0.37017930872924,
cornflowerblue = 0.30318641994179,
cornsilk = 0.93562110372965,
crimson = 0.16042199953026,
cyan = 0.7874,
darkblue = 0.018640801980939,
darkcyan = 0.20329317839046,
darkgoldenrod = 0.27264703559993,
darkgray = 0.39675523072563,
darkgreen = 0.091143429047575,
darkgrey = 0.39675523072563,
darkkhaki = 0.45747326349994,
darkmagenta = 0.07353047651207,
darkolivegreen = 0.12651920884889,
darkorange = 0.40016167026524,
darkorchid = 0.13413142174857,
darkred = 0.054889674531132,
darksalmon = 0.40541471563381,
darkseagreen = 0.43789249325969,
darkslateblue = 0.065792846227988,
darkslategray = 0.067608151928044,
darkslategrey = 0.067608151928044,
darkturquoise = 0.4874606277449,
darkviolet = 0.10999048339343,
deeppink = 0.23866895828276,
deepskyblue = 0.44481603395575,
dimgray = 0.14126329114027,
dimgrey = 0.14126329114027,
dodgerblue = 0.27442536991456,
firebrick = 0.10724525535015,
floralwhite = 0.95922484825004,
forestgreen = 0.18920812076002,
fuchsia = 0.2848,
gainsboro = 0.71569350050648,
ghostwhite = 0.94311261886323,
gold = 0.69860877428159,
goldenrod = 0.41919977809569,
gray = 0.2158605001139,
green = 0.15438342968146,
greenyellow = 0.80609472611453,
grey = 0.2158605001139,
honeydew = 0.96336535554782,
hotpink = 0.34658438169715,
indianred = 0.21406134963884,
indigo = 0.03107561486337,
ivory = 0.99071270600615,
khaki = 0.77012343394121,
lavender = 0.80318750514521,
lavenderblush = 0.90172748631046,
lawngreen = 0.73905893124963,
lemonchiffon = 0.94038992245622,
lightblue = 0.63709141280807,
lightcoral = 0.35522120733135,
lightcyan = 0.94587293494829,
lightgoldenrodyellow = 0.93348351018297,
lightgray = 0.65140563741982,
lightgreen = 0.69091979956865,
lightgrey = 0.65140563741982,
lightpink = 0.58566152734898,
lightsalmon = 0.4780675225206,
lightseagreen = 0.35050145117042,
lightskyblue = 0.56195637618331,
lightslategray = 0.23830165007287,
lightslategrey = 0.23830165007287,
lightsteelblue = 0.53983888284666,
lightyellow = 0.98161818392882,
lime = 0.7152,
limegreen = 0.44571042246098,
linen = 0.88357340984379,
magenta = 0.2848,
maroon = 0.045891942324215,
mediumaquamarine = 0.49389703310801,
mediumblue = 0.044077780212328,
mediumorchid = 0.21639251153773,
mediumpurple = 0.22905858091648,
mediumseagreen = 0.34393112338131,
mediumslateblue = 0.20284629471622,
mediumspringgreen = 0.70704308194184,
mediumturquoise = 0.5133827926448,
mediumvioletred = 0.14371899849357,
midnightblue = 0.02071786635086,
mintcream = 0.97834604947588,
mistyrose = 0.82183047859185,
moccasin = 0.80083000991567,
navajowhite = 0.76519682342785,
navy = 0.015585128108224,
oldlace = 0.91900633405549,
olive = 0.20027537200568,
olivedrab = 0.22593150951929,
orange = 0.4817026703631,
orangered = 0.25516243753416,
orchid = 0.31348806761439,
palegoldenrod = 0.78792647887614,
palegreen = 0.77936759006353,
paleturquoise = 0.76436077921714,
palevioletred = 0.28754994117889,
papayawhip = 0.87797100199835,
peachpuff = 0.74905589878251,
peru = 0.30113074877936,
pink = 0.63271070702466,
plum = 0.45734221587969,
powderblue = 0.68254586500605,
purple = 0.061477070432439,
rebeccapurple = 0.07492341159447,
red = 0.2126,
rosybrown = 0.32319457649407,
royalblue = 0.16663210743188,
saddlebrown = 0.097922285020521,
salmon = 0.36977241527596,
sandybrown = 0.46628543696283,
seagreen = 0.19734199706275,
seashell = 0.92737862206922,
sienna = 0.13697631337098,
silver = 0.52711512570581,
skyblue = 0.55291668518184,
slateblue = 0.14784278062136,
slategray = 0.20896704076536,
slategrey = 0.20896704076536,
snow = 0.96533341834849,
springgreen = 0.73052306068529,
steelblue = 0.20562642207625,
tan = 0.48237604163921,
teal = 0.16996855778968,
thistle = 0.56818401093733,
tomato = 0.30638612719415,
turquoise = 0.5895536427578,
violet = 0.40315452986676,
wheat = 0.74909702820482,
white = 1,
whitesmoke = 0.91309865179342,
yellow = 0.9278,
yellowgreen = 0.50762957208707,
}
6ae47fdb24de4eed5ec26d203faf5341a388987b
Template:Nobold/styles.css
10
323
671
2019-03-03T23:43:41Z
[[]]>Pppery
0
Adding protection template
sanitized-css
text/css
/* {{pp-template}} */
/* Styling for Template:Nobold */
.nobold {
font-weight: normal;
}
83e5f0adacf8c7984251f1fd9d11ed82ebaadf03
Template:Lua
10
73
150
2019-03-20T22:04:45Z
[[w>RMCD bot
0
Removing notice of move discussion
wikitext
text/x-wiki
<includeonly>{{#invoke:Lua banner|main}}</includeonly><noinclude>
{{Lua|Module:Lua banner}}
{{documentation}}
<!-- Categories go on the /doc subpage and interwikis go on Wikidata. -->
</noinclude>
dba3962144dacd289dbc34f50fbe0a7bf6d7f2f7
Template:Clc
10
86
174
2019-04-24T04:30:59Z
[[w>JJMC89
0
actual template is in the category
wikitext
text/x-wiki
#REDIRECT [[Template:Category link with count]]
02280e2ab57b544236e11f913e3759c5781ca9d5
Module:ISO 3166
828
229
464
2019-04-28T16:52:10Z
[[w>Frietjes
0
restrict tracking to articlespace per request
Scribunto
text/plain
-- to enable us to replicate the current functioning of Country extract, we need to deal with:
-- 2 {{<name>}} DONE!
-- 3 [[<name>]] DONE!
-- 4 [[<name>|<junk>]] DONE!
-- 5 [[image:flag of <country>.[svg|gif|png|jpg]|\d+px]] DONE!
local p = {}
local getArgs = require("Module:Arguments").getArgs
local data = mw.loadData("Module:ISO 3166/data/National")
--[[----------F I N D N A M E----------]]-- -- Finds the name in the database
local function findname(code,cdata,qry)
local sqry = p.strip(qry)
if cdata["name"] and sqry==p.strip(cdata["name"])
or cdata["isoname"] and sqry==p.strip(cdata["isoname"])
or not cdata["nocode"] and sqry==code
or sqry==cdata["alpha3"] or sqry==cdata["numeric"]
then
return true
end
for _,tname in pairs(cdata["isonames"] or {}) do
if sqry==p.strip(tname) then
return true
end
end
for _,tname in pairs(cdata["altnames"] or {}) do
if sqry==p.strip(tname) then
return true
end
end
return false
end
--[[----------I S O N A M E----------]]-- -- Find the ISO name of a country/region
local function isoname(data,code,lang)
if data[code]["isonames"] then
local name = data[code]["isodisplaynames"] and data[code]["isodisplaynames"][lang]
or data[code]["isonames"][lang]
or data[code]["isodisplaynames"] and data[code]["isodisplaynames"][data[code]["defaultlang"] or data["defaultlang"]]
or data[code]["isonames"][data[code]["defaultlang"] or data["defaultlang"]]
or data[code]["isodisplaynames"] and data[code]["isodisplaynames"]["en"]
or data[code]["isonames"]["en"]
if name then return name end
for _,iname in pairs(data[code]["isonames"]) do return iname end
return data[code]["isodisplayname"] or data[code]["isoname"]
else
return data[code]["isodisplayname"] or data[code]["isoname"]
end
end
--[[----------S T R I P----------]]-- -- Removes junk from the input
function p.strip(text)
local accents = {["À"]="A",["Á"]="A",["Â"]="A",["Ã"]="A", -- accent list
["Ä"]="A",["Å"]="A",["Ç"]="C",["È"]="E",["É"]="E",
["Ê"]="E",["Ë"]="E",["Ì"]="I",["Í"]="I",["Î"]="I",
["Ï"]="I",["Ñ"]="N",["Ò"]="O",["Ó"]="O",["Ô"]="O",
["Õ"]="O",["Ö"]="O",["Ø"]="O",["Ù"]="U",["Ú"]="U",
["Û"]="U",["Ü"]="U",["Ý"]="Y"
}
local remove = {"NATION OF","COUNTRY OF","TERRITORY OF", -- text to be removed list
"FLAG OF","FLAG","KINGDOM OF","STATE OF"," STATE ",
"PROVINCE OF","PROVINCE","TERRITORY"
}
local patterns = {[".+:"]="",["|.+"]="",["%(.-%)"]="", -- patterns to follow (order may matter)
["%..*"]="",["^THE "]="",["%_"]=" ",["%-"]=" ",
["%d%d?%d?PX"]="",
}
text = mw.ustring.upper(text) -- Case insensitivity
text = mw.ustring.gsub(text,"[À-Ý]",accents) -- Deaccent
for pattern,value in pairs(patterns) do -- Follow patterns
text = mw.ustring.gsub(text,pattern,value)
end
for _,words in pairs(remove) do -- Remove unneeded words
text = mw.ustring.gsub(text,words,"")
end
text = mw.ustring.gsub(text,"%W","") -- Remove non alpha-numeric
return text
end
--[[----------P . C A L L S T R I P ---------]]-- -- Calls P.strip but using Module:Arguments
function p.callstrip(frame)
local args = getArgs(frame)
return p.strip(args[1]) or ""
end
--[[----------P . L U A C O D E---------]]-- -- Makes the ISO code of a country
function p.luacode(args)
if string.find(args[1] or '',"%-") then
args[1], args[2] = string.match(args[1] or '',"^([^%-]*)%-(.*)$")
end
if args[1] then args[1] = p.strip(args[1]) end
if args[2] then args[2] = p.strip(args[2]) end
if args["codetype"]=="3" then
args["codetype"]="alpha3"
end
local eot = args.error or ""
local catnocountry = (args.nocat and args.nocat == 'true') and ''
or '[[Category:Wikipedia page with obscure country]]'
local catnosubdivision = (args.nocat and args.nocat == 'true') and ''
or '[[Category:Wikipedia page with obscure subdivision]]'
if not args[1] then
if mw.title.getCurrentTitle().namespace ~= 0 then catnocountry = '' end
return catnocountry, '<span style="font-size:100%" class="error">"No parameter for the country given"</span>'
end
if not args[2] then --3166-1 code
for alpha2,cdata in pairs(data) do
if findname(alpha2,cdata,args[1]) then
if args["codetype"]=="numeric" or args["codetype"]=="alpha3" then
return cdata[args["codetype"]]
else
return alpha2
end
end
end
if mw.title.getCurrentTitle().namespace ~= 0 then catnocountry = '' end
return catnocountry
else --3166-2 code
for alpha2,cdata in pairs(data) do
if findname(alpha2,cdata,args[1]) then
if mw.ustring.match(alpha2,"GB") then -- For England, Wales etc.
alpha2 = "GB"
end
local sdata = mw.loadData("Module:ISO 3166/data/"..alpha2)
local empty = true
for scode,scdata in pairs(sdata) do
if type(scdata)=="table" then
empty = false
if findname(scode,scdata,args[2]) then
return alpha2.."-"..scode
end
end
end
if mw.title.getCurrentTitle().namespace ~= 0 then catnosubdivision = '' end
return catnosubdivision
end
end
if mw.title.getCurrentTitle().namespace ~= 0 then catnocountry = '' end
return catnocountry
end
end
--[[----------P . C O D E---------]]-- -- Calls P.Luacode but using Module:Arguments
function p.code(frame)
return p.luacode(getArgs(frame)) or ""
end
--[[----------P . N U M E R I C---------]]-- -- Calls P.Luacode but using Module:Arguments and setting it to output a numeric value
function p.numeric(frame)
local args = getArgs(frame)
args["codetype"]="numeric"
return p.luacode(args) or ""
end
--[[----------P . L U A N A M E---------]]-- -- Makes the ISO/common name of a country
function p.luaname(args)
local code1 = p.luacode(args)
local code2 = ''
if string.find(code1,"%-") then
code1, code2 = string.match(code1,"^([^%-]*)%-(.*)$")
end
if string.find(code1,"^%u%u$") then
if code2=="" then --3166-1 alpha-2 code
if data[code1] then
return (args.isoname or args.lang) and isoname(data,code1,args.lang)
or (data[code1]["displayname"] or data[code1]["name"])
else
return '[[Category:Wikipedia page with obscure country]]'
end
else --3166-2 code
local sdata
if data[code1] then
sdata = mw.loadData("Module:ISO 3166/data/"..code1)
else
return '[[Category:Wikipedia page with obscure country]]'
end
if sdata[code2] then
return (args.isoname or args.lang) and isoname(sdata,code2,args.lang)
or (sdata[code2]["displayname"] or sdata[code2]["name"])
else
return '[[Category:Wikipedia page with obscure country]]'
end
end
end
end
--[[----------P . N A M E---------]]-- -- Calls P.Luaname but using Module:Arguments
function p.name(frame)
return p.luaname(getArgs(frame)) or ""
end
--[[----------P . G E O C O O R D I N S E R T---------]]-- -- Wrapper for Module:Coordinates.coordinsert
function p.geocoordinsert(frame)
-- {{#invoke:ISO 3166|geocoordinsert|{{coord|...}}
-- |country=..|subdivision1=...|subdivision2=...
-- |type=...|scale=...|dim=...|source=...|globe=...
-- }}
local args = frame.args
local subdivisionqueried = false
local catnocountry = (args.nocat and args.nocat == 'true') and ''
or '[[Category:Wikipedia page with obscure country]]'
local catnosubdivision = (args.nocat and args.nocat == 'true') and ''
or '[[Category:Wikipedia page with obscure subdivision]]' or ''
local tracking = ''
local targs = {}
targs[1] = args[1] or ''
for i, v in pairs(args) do
if i == 'country' and not mw.ustring.find(targs[1], 'region:') then
local country = v
local k, region = 1, ''
-- look for a valid subdivision
while region == '' and k < 3 do
local subdivision = args['subdivision' .. k] or ''
if subdivision ~= '' then
region = p.luacode({country, subdivision, nocat = 'true'})
subdivisionqueried = true
end
k = k + 1
end
-- subdivision lookup failed or never attempted, try country only
if region == '' then
region = p.luacode({country, nocat = 'true'})
if mw.title.getCurrentTitle().namespace ~= 0 then catnocountry, catnosubdivision = '', '' end
if region == '' then
tracking = tracking .. catnocountry
elseif subdivisionqueried == true then
tracking = tracking .. catnosubdivision
end
end
-- something worked, add it to the targs
if region ~= '' then
targs[#targs + 1] = 'region:' .. region
end
elseif i == 'type' or i == 'scale' or i == 'dim'
or i == 'source' or i == 'globe' then
targs[#targs + 1] = i .. ':' .. v
end
end
-- call Module:Coordinates.coordinsert if there is something to insert
if #targs > 1 then
local coordinsert = require('Module:Coordinates').coordinsert
return coordinsert({args = targs}) .. tracking
end
-- otherwise, just return the coordinates
return targs[1] .. tracking
end
return p
6bc354f2610f29e712065cbe3ea814144fa3a600
Template:Infobox country/multirow
10
326
681
2019-06-29T22:48:38Z
[[]]>Primefac
0
update /doc
wikitext
text/x-wiki
{{infobox | child = yes | decat=yes
| rowclass25 = mergedrow
| label25 = <div style="text-indent:-0.9em;margin-left:1.2em;font-weight:normal;">• {{{1|}}}</div>
| data25 = {{{2|}}}
| rowclass26 = mergedrow
| label26 = <div style="text-indent:-0.9em;margin-left:1.2em;font-weight:normal;">• {{{3|}}}</div>
| data26 = {{{4|}}}
| rowclass27 = mergedrow
| label27 = <div style="text-indent:-0.9em;margin-left:1.2em;font-weight:normal;">• {{{5|}}}</div>
| data27 = {{{6|}}}
| rowclass28 = mergedrow
| label28 = <div style="text-indent:-0.9em;margin-left:1.2em;font-weight:normal;">• {{{7|}}}</div>
| data28 = {{{8|}}}
| rowclass29 = mergedrow
| label29 = <div style="text-indent:-0.9em;margin-left:1.2em;font-weight:normal;">• {{{9|}}}</div>
| data29 = {{{10|}}}
| rowclass30 = mergedrow
| label30 = <div style="text-indent:-0.9em;margin-left:1.2em;font-weight:normal;">• {{{11|}}}</div>
| data30 = {{{12|}}}
| rowclass31 = mergedrow
| label31 = <div style="text-indent:-0.9em;margin-left:1.2em;font-weight:normal;">• {{{13|}}}</div>
| data31 = {{{14|}}}
| rowclass32 = mergedrow
| label32 = <div style="text-indent:-0.9em;margin-left:1.2em;font-weight:normal;">• {{{15|}}}</div>
| data32 = {{{16|}}}
| rowclass33 = mergedrow
| label33 = <div style="text-indent:-0.9em;margin-left:1.2em;font-weight:normal;">• {{{17|}}}</div>
| data33 = {{{18|}}}
| rowclass34 = mergedrow
| label34 = <div style="text-indent:-0.9em;margin-left:1.2em;font-weight:normal;">• {{{19|}}}</div>
| data34 = {{{20|}}}
| rowclass35 = mergedrow
| label35 = <div style="text-indent:-0.9em;margin-left:1.2em;font-weight:normal;">• {{{21|}}}</div>
| data35 = {{{22|}}}
| rowclass36 = mergedrow
| label36 = <div style="text-indent:-0.9em;margin-left:1.2em;font-weight:normal;">• {{{23|}}}</div>
| data36 = {{{24|}}}
| rowclass37 = mergedrow
| label37 = <div style="text-indent:-0.9em;margin-left:1.2em;font-weight:normal;">• {{{25|}}}</div>
| data37 = {{{26|}}}
| rowclass38 = mergedrow
| label38 = <div style="text-indent:-0.9em;margin-left:1.2em;font-weight:normal;">• {{{27|}}}</div>
| data38 = {{{28|}}}
| rowclass39 = mergedrow
| label39 = <div style="text-indent:-0.9em;margin-left:1.2em;font-weight:normal;">• {{{29|}}}</div>
| data39 = {{{30|}}}
| rowclass40 = mergedrow
| label40 = <div style="text-indent:-0.9em;margin-left:1.2em;font-weight:normal;">• {{{31|}}}</div>
| data40 = {{{32|}}}
| rowclass41 = mergedrow
| label41 = <div style="text-indent:-0.9em;margin-left:1.2em;font-weight:normal;">• {{{33|}}}</div>
| data41 = {{{34|}}}
| rowclass42 = mergedrow
| label42 = <div style="text-indent:-0.9em;margin-left:1.2em;font-weight:normal;">• {{{35|}}}</div>
| data42 = {{{36|}}}
| rowclass43 = mergedrow
| label43 = <div style="text-indent:-0.9em;margin-left:1.2em;font-weight:normal;">• {{{37|}}}</div>
| data43 = {{{38|}}}
| rowclass44 = mergedrow
| label44 = <div style="text-indent:-0.9em;margin-left:1.2em;font-weight:normal;">• {{{39|}}}</div>
| data44 = {{{40|}}}
}}<noinclude>
{{documentation|content=
This subtemplate is used to simplify the code of {{tl|infobox country}}. It should not be used directly. It can currently take up to 20 rows.
}}</noinclude>
52b488ce963e6b79723ab148c9a82507ed2b4078
Template:Infobox military conflict
10
1028
2117
2019-07-01T21:49:58Z
[[]]>Frietjes
0
moving to module
wikitext
text/x-wiki
<includeonly>{{#invoke:Infobox military conflict|main}}</includeonly><noinclude>{{documentation}}</noinclude>
d340eca466eb5d0a69c1f4ac57d0f34d306ed031
Module:Military navigation
828
1042
2145
2019-07-11T13:06:26Z
[[]]>Frietjes
0
Scribunto
text/plain
local p = { }
local Navbox = require('Module:Navbox')
local Styles = require('Module:WPMILHIST Infobox style')
local function isblank(s)
return (not s) or s == ''
end
local function isnotblank(s)
return s and s ~= ''
end
function p.main(frame)
local args = { }
local pargs = frame:getParent().args
local sargs = {}
local tcats = ''
-- process bodystyle and titlestyle
if (pargs['style'] or '') == 'wide' then
args['titlestyle'] = Styles['nav_box_wide_header']
args['bodystyle'] = Styles['nav_box_wide']
else
args['titlestyle'] = Styles['nav_box_header']
if (pargs['border'] or '') == 'child' or
(pargs['border'] or '') == 'subgroup' then
args['bodystyle'] = Styles['nav_box_child']
tcats = tcats .. '[[Category:Pages using military navigation subgroups without wide style]]'
else
args['bodystyle'] = Styles['nav_box']
end
end
sargs['titlestyle'] = 1
sargs['bodystyle'] = 1
-- process groupstyle, abovestyle, belowstyle
args['groupstyle'] = Styles['nav_box_label'] .. (pargs['groupstyle'] or '')
sargs['groupstyle'] = 1
args['abovestyle'] = Styles['nav_box_label'] .. (pargs['abovestyle'] or '')
sargs['abovestyle'] = 1
args['belowstyle'] = Styles['nav_box_label'] .. (pargs['belowstyle'] or '')
sargs['belowstyle'] = 1
-- process oddstyle, evenstyle
args['oddstyle'] = isnotblank(pargs['odd_color'])
and ('background:' .. pargs['odd_color']) or nil
sargs['oddstyle'] = 1
args['evenstyle'] = isnotblank(pargs['even_color'])
and ('background:' .. pargs['even_color']) or nil
sargs['evenstyle'] = 1
-- process name and rawname
args['name'] = (isnotblank(pargs['name']) and pargs['name']) or pargs['rawname']
if isblank(args['name']) then args['navbar'] = 'plain' end
sargs['name'] = 1
sargs['rawname'] = 1
-- copy the remaining args
for k, v in pairs(pargs) do
if v and v ~= '' and sargs[k] == nil then
args[k] = v
end
end
-- add allow wrap
if args['title'] and (pargs['style'] or '') ~= 'wide' then
if not mw.ustring.match(args['title'], '<span class="wrap">') then
-- probably a more efficient way to match 15 or more characters
local m = '[^%[%]<>|][^%[%]<>|][^%[%]<>|][^%[%]<>|][^%[%]<>|]'
m = m .. m .. m
args['title'] = mw.ustring.gsub(args['title'],
'%[%[(' .. m .. '[^%[%]<>|]*)%]%]',
'[[%1|<span class="wrap">%1</span>]]')
args['title'] = mw.ustring.gsub(args['title'],
'%[%[([^%[%]<>|]*)|(' .. m .. '[^%[%]<>|]*)%]%]',
'[[%1|<span class="wrap">%2</span>]]')
end
end
-- add navbox-vertical for non-wide format
if (pargs['style'] or '') ~= 'wide' then
args['bodyclass'] = 'navbox-vertical' .. (args['bodyclass'] and (' ' .. args['bodyclass']) or '')
end
return tcats .. Navbox._navbox(args)
end
return p
26dd1b8952c65fbc4d05e418e8d7c3daed93fa49
Template:KIA
10
1047
2155
2019-08-20T18:37:30Z
[[]]>Muboshgu
0
[[MOS:ACCESS#Text]] / [[MOS:FONTSIZE]]: "Avoid using smaller font sizes in elements that already use a smaller font size, such as infoboxes, navboxes and reference sections."
wikitext
text/x-wiki
[[<!---(link:)-->{{{1|Killed in action}}}<!--
-->|<!--(label:)-->{{#ifeq:{{{alt|}}}|yes |(KIA) |<span style="font-family:'Times New Roman','Old English Text MT',serif">{{#ifeq:{{{bold|}}}|no |† |'''†'''}}</span>}}<!--
-->]]<noinclude>
{{Documentation}}
</noinclude>
40db638380717ea2f21d23962d35f009deec5b20
Module:Location map/data/Earth
828
1059
2179
2019-11-17T21:50:23Z
[[]]>Sumanuil
0
Blast it.
Scribunto
text/plain
return {
name = 'Earth',
top = 90,
bottom = -90,
left = -180,
right = 180,
image = 'World location map (equirectangular 180).svg',
image1='World location map (equirectangular 180).svg'}
0c7a9c4349065ea43134d0a61037d31862f2a042
Template:URL
10
218
442
2019-11-18T00:50:36Z
[[w>Jonesey95
0
Adding unknown parameter tracking through [[:Category:Pages using URL template with unknown parameters]] using [[Module:check for unknown parameters]]
wikitext
text/x-wiki
<includeonly>{{#invoke:URL|url}}</includeonly>{{#invoke:Check for unknown parameters|check|unknown={{main other|[[Category:Pages using URL template with unknown parameters|_VALUE_{{PAGENAME}}]]}}|preview=Page using [[Template:URL]] with unknown parameter "_VALUE_"|ignoreblank=y | 1 | 2 }}<noinclude>{{documentation}}</noinclude>
5671474ce4656f07c5bdc47292d1dcbe9c70317e
Template:Unbulleted list
10
197
399
2019-12-09T17:31:16Z
[[w>Jonesey95
0
Undid revision 929522913 by [[Special:Contributions/MSGJ|MSGJ]] ([[User talk:MSGJ|talk]]). Reverted, as this change has been shown to have bugs. Discussion continues on talk page.
wikitext
text/x-wiki
{{<includeonly>safesubst:</includeonly>#invoke:list|unbulleted}}<noinclude>
{{documentation}}
<!-- Categories go on the /doc subpage, and interwikis go on Wikidata. -->
</noinclude>
89815a491d3e05b20af446e34cda13f13c25fb4f
Template:Ombox
10
84
170
2020-04-01T06:12:36Z
MusikAnimal
3
1 revision imported
wikitext
text/x-wiki
{{#invoke:Message box|ombox}}<noinclude>
{{documentation}}
<!-- Categories go on the /doc subpage, and interwikis go on Wikidata. -->
</noinclude>
0e54065432d540737b9e56c4e3a8e7f74d4534ea
Module:Arguments
828
16
36
2020-04-01T06:12:40Z
MusikAnimal
3
1 revision imported
Scribunto
text/plain
-- This module provides easy processing of arguments passed to Scribunto from
-- #invoke. It is intended for use by other Lua modules, and should not be
-- called from #invoke directly.
local libraryUtil = require('libraryUtil')
local checkType = libraryUtil.checkType
local arguments = {}
-- Generate four different tidyVal functions, so that we don't have to check the
-- options every time we call it.
local function tidyValDefault(key, val)
if type(val) == 'string' then
val = val:match('^%s*(.-)%s*$')
if val == '' then
return nil
else
return val
end
else
return val
end
end
local function tidyValTrimOnly(key, val)
if type(val) == 'string' then
return val:match('^%s*(.-)%s*$')
else
return val
end
end
local function tidyValRemoveBlanksOnly(key, val)
if type(val) == 'string' then
if val:find('%S') then
return val
else
return nil
end
else
return val
end
end
local function tidyValNoChange(key, val)
return val
end
local function matchesTitle(given, title)
local tp = type( given )
return (tp == 'string' or tp == 'number') and mw.title.new( given ).prefixedText == title
end
local translate_mt = { __index = function(t, k) return k end }
function arguments.getArgs(frame, options)
checkType('getArgs', 1, frame, 'table', true)
checkType('getArgs', 2, options, 'table', true)
frame = frame or {}
options = options or {}
--[[
-- Set up argument translation.
--]]
options.translate = options.translate or {}
if getmetatable(options.translate) == nil then
setmetatable(options.translate, translate_mt)
end
if options.backtranslate == nil then
options.backtranslate = {}
for k,v in pairs(options.translate) do
options.backtranslate[v] = k
end
end
if options.backtranslate and getmetatable(options.backtranslate) == nil then
setmetatable(options.backtranslate, {
__index = function(t, k)
if options.translate[k] ~= k then
return nil
else
return k
end
end
})
end
--[[
-- Get the argument tables. If we were passed a valid frame object, get the
-- frame arguments (fargs) and the parent frame arguments (pargs), depending
-- on the options set and on the parent frame's availability. If we weren't
-- passed a valid frame object, we are being called from another Lua module
-- or from the debug console, so assume that we were passed a table of args
-- directly, and assign it to a new variable (luaArgs).
--]]
local fargs, pargs, luaArgs
if type(frame.args) == 'table' and type(frame.getParent) == 'function' then
if options.wrappers then
--[[
-- The wrappers option makes Module:Arguments look up arguments in
-- either the frame argument table or the parent argument table, but
-- not both. This means that users can use either the #invoke syntax
-- or a wrapper template without the loss of performance associated
-- with looking arguments up in both the frame and the parent frame.
-- Module:Arguments will look up arguments in the parent frame
-- if it finds the parent frame's title in options.wrapper;
-- otherwise it will look up arguments in the frame object passed
-- to getArgs.
--]]
local parent = frame:getParent()
if not parent then
fargs = frame.args
else
local title = parent:getTitle():gsub('/sandbox$', '')
local found = false
if matchesTitle(options.wrappers, title) then
found = true
elseif type(options.wrappers) == 'table' then
for _,v in pairs(options.wrappers) do
if matchesTitle(v, title) then
found = true
break
end
end
end
-- We test for false specifically here so that nil (the default) acts like true.
if found or options.frameOnly == false then
pargs = parent.args
end
if not found or options.parentOnly == false then
fargs = frame.args
end
end
else
-- options.wrapper isn't set, so check the other options.
if not options.parentOnly then
fargs = frame.args
end
if not options.frameOnly then
local parent = frame:getParent()
pargs = parent and parent.args or nil
end
end
if options.parentFirst then
fargs, pargs = pargs, fargs
end
else
luaArgs = frame
end
-- Set the order of precedence of the argument tables. If the variables are
-- nil, nothing will be added to the table, which is how we avoid clashes
-- between the frame/parent args and the Lua args.
local argTables = {fargs}
argTables[#argTables + 1] = pargs
argTables[#argTables + 1] = luaArgs
--[[
-- Generate the tidyVal function. If it has been specified by the user, we
-- use that; if not, we choose one of four functions depending on the
-- options chosen. This is so that we don't have to call the options table
-- every time the function is called.
--]]
local tidyVal = options.valueFunc
if tidyVal then
if type(tidyVal) ~= 'function' then
error(
"bad value assigned to option 'valueFunc'"
.. '(function expected, got '
.. type(tidyVal)
.. ')',
2
)
end
elseif options.trim ~= false then
if options.removeBlanks ~= false then
tidyVal = tidyValDefault
else
tidyVal = tidyValTrimOnly
end
else
if options.removeBlanks ~= false then
tidyVal = tidyValRemoveBlanksOnly
else
tidyVal = tidyValNoChange
end
end
--[[
-- Set up the args, metaArgs and nilArgs tables. args will be the one
-- accessed from functions, and metaArgs will hold the actual arguments. Nil
-- arguments are memoized in nilArgs, and the metatable connects all of them
-- together.
--]]
local args, metaArgs, nilArgs, metatable = {}, {}, {}, {}
setmetatable(args, metatable)
local function mergeArgs(tables)
--[[
-- Accepts multiple tables as input and merges their keys and values
-- into one table. If a value is already present it is not overwritten;
-- tables listed earlier have precedence. We are also memoizing nil
-- values, which can be overwritten if they are 's' (soft).
--]]
for _, t in ipairs(tables) do
for key, val in pairs(t) do
if metaArgs[key] == nil and nilArgs[key] ~= 'h' then
local tidiedVal = tidyVal(key, val)
if tidiedVal == nil then
nilArgs[key] = 's'
else
metaArgs[key] = tidiedVal
end
end
end
end
end
--[[
-- Define metatable behaviour. Arguments are memoized in the metaArgs table,
-- and are only fetched from the argument tables once. Fetching arguments
-- from the argument tables is the most resource-intensive step in this
-- module, so we try and avoid it where possible. For this reason, nil
-- arguments are also memoized, in the nilArgs table. Also, we keep a record
-- in the metatable of when pairs and ipairs have been called, so we do not
-- run pairs and ipairs on the argument tables more than once. We also do
-- not run ipairs on fargs and pargs if pairs has already been run, as all
-- the arguments will already have been copied over.
--]]
metatable.__index = function (t, key)
--[[
-- Fetches an argument when the args table is indexed. First we check
-- to see if the value is memoized, and if not we try and fetch it from
-- the argument tables. When we check memoization, we need to check
-- metaArgs before nilArgs, as both can be non-nil at the same time.
-- If the argument is not present in metaArgs, we also check whether
-- pairs has been run yet. If pairs has already been run, we return nil.
-- This is because all the arguments will have already been copied into
-- metaArgs by the mergeArgs function, meaning that any other arguments
-- must be nil.
--]]
if type(key) == 'string' then
key = options.translate[key]
end
local val = metaArgs[key]
if val ~= nil then
return val
elseif metatable.donePairs or nilArgs[key] then
return nil
end
for _, argTable in ipairs(argTables) do
local argTableVal = tidyVal(key, argTable[key])
if argTableVal ~= nil then
metaArgs[key] = argTableVal
return argTableVal
end
end
nilArgs[key] = 'h'
return nil
end
metatable.__newindex = function (t, key, val)
-- This function is called when a module tries to add a new value to the
-- args table, or tries to change an existing value.
if type(key) == 'string' then
key = options.translate[key]
end
if options.readOnly then
error(
'could not write to argument table key "'
.. tostring(key)
.. '"; the table is read-only',
2
)
elseif options.noOverwrite and args[key] ~= nil then
error(
'could not write to argument table key "'
.. tostring(key)
.. '"; overwriting existing arguments is not permitted',
2
)
elseif val == nil then
--[[
-- If the argument is to be overwritten with nil, we need to erase
-- the value in metaArgs, so that __index, __pairs and __ipairs do
-- not use a previous existing value, if present; and we also need
-- to memoize the nil in nilArgs, so that the value isn't looked
-- up in the argument tables if it is accessed again.
--]]
metaArgs[key] = nil
nilArgs[key] = 'h'
else
metaArgs[key] = val
end
end
local function translatenext(invariant)
local k, v = next(invariant.t, invariant.k)
invariant.k = k
if k == nil then
return nil
elseif type(k) ~= 'string' or not options.backtranslate then
return k, v
else
local backtranslate = options.backtranslate[k]
if backtranslate == nil then
-- Skip this one. This is a tail call, so this won't cause stack overflow
return translatenext(invariant)
else
return backtranslate, v
end
end
end
metatable.__pairs = function ()
-- Called when pairs is run on the args table.
if not metatable.donePairs then
mergeArgs(argTables)
metatable.donePairs = true
end
return translatenext, { t = metaArgs }
end
local function inext(t, i)
-- This uses our __index metamethod
local v = t[i + 1]
if v ~= nil then
return i + 1, v
end
end
metatable.__ipairs = function (t)
-- Called when ipairs is run on the args table.
return inext, t, 0
end
return args
end
return arguments
3134ecce8429b810d445e29eae115e2ae4c36c53
Module:Yesno
828
15
34
2020-04-01T06:27:55Z
MusikAnimal
3
Undid revision 948472533 by [[Special:Contributions/w>Vogone|w>Vogone]] ([[User talk:w>Vogone|talk]])
Scribunto
text/plain
-- Function allowing for consistent treatment of boolean-like wikitext input.
-- It works similarly to the template {{yesno}}.
return function (val, default)
-- If your wiki uses non-ascii characters for any of "yes", "no", etc., you
-- should replace "val:lower()" with "mw.ustring.lower(val)" in the
-- following line.
val = type(val) == 'string' and val:lower() or val
if val == nil then
return nil
elseif val == true
or val == 'yes'
or val == 'y'
or val == 'true'
or val == 't'
or val == 'on'
or tonumber(val) == 1
then
return true
elseif val == false
or val == 'no'
or val == 'n'
or val == 'false'
or val == 'f'
or val == 'off'
or tonumber(val) == 0
then
return false
else
return default
end
end
f767643e7d12126d020d88d662a3dd057817b9dc
Module:File link
828
40
84
2020-04-01T06:31:54Z
MusikAnimal
3
Undid revision 948472508 by [[Special:Contributions/w>IPad365|w>IPad365]] ([[User talk:w>IPad365|talk]])
Scribunto
text/plain
-- This module provides a library for formatting file wikilinks.
local yesno = require('Module:Yesno')
local checkType = require('libraryUtil').checkType
local p = {}
function p._main(args)
checkType('_main', 1, args, 'table')
-- This is basically libraryUtil.checkTypeForNamedArg, but we are rolling our
-- own function to get the right error level.
local function checkArg(key, val, level)
if type(val) ~= 'string' then
error(string.format(
"type error in '%s' parameter of '_main' (expected string, got %s)",
key, type(val)
), level)
end
end
local ret = {}
-- Adds a positional parameter to the buffer.
local function addPositional(key)
local val = args[key]
if not val then
return nil
end
checkArg(key, val, 4)
ret[#ret + 1] = val
end
-- Adds a named parameter to the buffer. We assume that the parameter name
-- is the same as the argument key.
local function addNamed(key)
local val = args[key]
if not val then
return nil
end
checkArg(key, val, 4)
ret[#ret + 1] = key .. '=' .. val
end
-- Filename
checkArg('file', args.file, 3)
ret[#ret + 1] = 'File:' .. args.file
-- Format
if args.format then
checkArg('format', args.format)
if args.formatfile then
checkArg('formatfile', args.formatfile)
ret[#ret + 1] = args.format .. '=' .. args.formatfile
else
ret[#ret + 1] = args.format
end
end
-- Border
if yesno(args.border) then
ret[#ret + 1] = 'border'
end
addPositional('location')
addPositional('alignment')
addPositional('size')
addNamed('upright')
addNamed('link')
addNamed('alt')
addNamed('page')
addNamed('class')
addNamed('lang')
addNamed('start')
addNamed('end')
addNamed('thumbtime')
addPositional('caption')
return string.format('[[%s]]', table.concat(ret, '|'))
end
function p.main(frame)
local origArgs = require('Module:Arguments').getArgs(frame, {
wrappers = 'Template:File link'
})
if not origArgs.file then
error("'file' parameter missing from [[Template:File link]]", 0)
end
-- Copy the arguments that were passed to a new table to avoid looking up
-- every possible parameter in the frame object.
local args = {}
for k, v in pairs(origArgs) do
-- Make _BLANK a special argument to add a blank parameter. For use in
-- conditional templates etc. it is useful for blank arguments to be
-- ignored, but we still need a way to specify them so that we can do
-- things like [[File:Example.png|link=]].
if v == '_BLANK' then
v = ''
end
args[k] = v
end
return p._main(args)
end
return p
66925f088d11530f2482f04181a3baaaa0ad3d0c
Template:Sandbox other
10
62
128
2020-04-03T00:08:09Z
[[w>Evad37
0
Also match subpage names beginning with "sandbox", per [[Template_talk:Sandbox_other#Template-protected_edit_request_on_28_March_2020|edit request]]
wikitext
text/x-wiki
{{#if:{{#ifeq:{{#invoke:String|sublength|s={{SUBPAGENAME}}|i=0|len=7}}|sandbox|1}}{{#ifeq:{{SUBPAGENAME}}|doc|1}}{{#invoke:String|match|{{PAGENAME}}|/sandbox/styles.css$|plain=false|nomatch=}}|{{{1|}}}|{{{2|}}}}}<!--
--><noinclude>{{documentation}}</noinclude>
91e4ae891d6b791615152c1fbc971414961ba872
Template:Tlf
10
65
134
2020-04-13T14:42:57Z
[[w>Primefac
0
Primefac moved page [[Template:Tlf]] to [[Template:Template link with link off]]: full name to indicate what it does
wikitext
text/x-wiki
#REDIRECT [[Template:Template link with link off]]
{{Redirect category shell|
{{R from move}}
}}
52759e1d3f7c9aa4a03d0b7d4f84f4c6adf53edf
Template:Lower
10
269
544
2020-04-17T00:36:35Z
Ahecht
13
Make substable
wikitext
text/x-wiki
<span style="position: relative; top: {{safesubst<noinclude />:#if:{{{2|}}}|{{{1}}}|0.6em}};">{{{2|{{{1}}}}}}</span><noinclude>
{{documentation}}
</noinclude>
8c1373e7c520b1f0a9dd17ea8a02e8922e84bb99
Template:Infobox country/status text
10
329
687
2020-04-21T23:25:38Z
[[]]>Jonesey95
0
Fix too small font per [[MOS:FONTSIZE]].
wikitext
text/x-wiki
{{#if:{{{status_text|}}} |{{{status_text}}} |{{#switch:{{ucfirst:{{{status|}}}}}
|Empire=<!--Empire-->
|Nomadic empire|Nomadic Empire=[[Nomadic empire]]
|Ancient Chinese state |Ancient Chinese State=[[Ancient Chinese state]]
|Federation |Federal=<!--Federation-->
|Confederation=<!--Confederation-->
|State union |State Union |Union=<!--State union-->
|Special |Special territory=<!--Special territory-->
|Unrecognized state |Unrecognised state |Unrecognized State |Unrecognised State
|Unrecognized |Unrecognised=[[List of states with limited recognition|Unrecognized state]]
|City-state |City-State |City state |City State
|City={{#if:{{{empire|}}}
| {{#switch:{{{empire|}}} |Holy Roman Empire |HRE=[[Free Imperial City]] of the [[Holy Roman Empire]] {{#if:{{{year_end|}}}|{{#ifexpr:{{{year_end}}}>1806|<br/>(until 1806)}}|}} |#default=City-state {{#if:{{{empire|}}}|of [[{{{empire}}}]]|}} }}
|<!--City-state-->
}}
|Commonwealth realm |Commonwealth Realm=[[Commonwealth Realm]]
|League of Nations Mandate |League of Nations
|Mandate={{#if:{{{empire|}}}
| [[League of Nations mandate|Mandate]] of {{#switch:{{{empire}}} |United Kingdom |UK=the [[United Kingdom]] |#default={{#ifexist:{{{empire}}}|[[{{{empire}}}]]|{{{empire}}}}} }}
| [[League of Nations mandate]]
}}
|United Nations Trust Territory| UN Trust Territory
|Trust Territory=[[United Nations Trust Territories|Trust Territory]]<!--
-->{{#if:{{{empire|}}} | of {{#switch:{{{empire}}} |United Kingdom |UK=the [[United Kingdom]] |United States |US |USA=the [[United States]] |#default={{#ifexist:{{{empire}}}|[[{{{empire}}}]]|{{{empire}}}}} }} }}
|Protectorate=Protectorate of <!--
-->{{#if:{{{empire|}}}
|{{#switch:{{{empire}}}
|United Kingdom |UK=the [[United Kingdom]]
|United States |US |USA=the [[United States]] |#default={{#ifexist:{{{empire}}}|[[{{{empire}}}]]|{{{empire}}}}}
}}
|whom? {{#if:{{{_noautocat|<noinclude>yes</noinclude>}}}||[[Category:Former country articles requiring maintenance|S]]}}
}}
|Client |Client state |Client State |Puppet |Puppet-state
|Puppet state={{#if:{{{empire|}}}
| {{#switch:{{{empire}}} |First French Empire |France=[[French client republic|Client]] of the [[First French Empire]] |#default=[[Puppet state]] of {{#ifexist:{{{empire}}}|[[{{{empire}}}]]|{{{empire}}}}} }}
| Puppet state ''of whom?'' {{#if:{{{_noautocat|<noinclude>yes</noinclude>}}}||[[Category:Former country articles requiring maintenance|S]]}}
}}
|Vassal={{#switch:{{{empire|}}} |Holy Roman Empire |HRE=[[States of the Holy Roman Empire|State]] of the [[Holy Roman Empire]] {{#if:{{{year_end|}}}|{{#ifexpr:{{{year_end}}}>1806|(until 1806)}}|}} |#default=Vassal{{#if:{{{empire|}}}| of {{{empire}}}| ''of whom?'' {{#if:{{{_noautocat|<noinclude>yes</noinclude>}}}||[[Category:Former country articles requiring maintenance|S]]}}}} }}
|Fief={{#switch:{{{empire|}}} |#default=Fief{{#if:{{{empire|}}}| of {{{empire}}}| ''of whom?'' {{#if:{{{_noautocat|<noinclude>yes</noinclude>}}}||[[Category:Former country articles requiring maintenance|S]]}}}} }}
|Abbey={{#switch:{{{empire|}}} |Holy Roman Empire |HRE=[[Imperial Abbey]] of the [[Holy Roman Empire]] {{Main other|[[Category:Imperial abbeys|{{{common_name}}}]]}} |#default=Abbey{{#if:{{{empire|}}}| of {{{empire}}}| ''of whom?'' {{#if:{{{_noautocat|<noinclude>yes</noinclude>}}}||[[Category:Former country articles requiring maintenance|S]]}}}} }}
|Satellite state |Satellite State
|Satellite= Satellite state of the [[Soviet Union]]
|Colony={{#switch:{{ucfirst:{{{empire}}}}}
|United Kingdom |UK |British Empire |Britain=[[Territorial evolution of the British Empire|British colony]]
|England=[[English overseas possessions|English colony]]
|France |First French Empire| French Empire=[[French colonial empire|French colony]]
|NL |Netherlands |The Netherlands=[[Dutch Empire|Dutch colony]]
|Belgium=[[Belgian colonial empire|Belgian colony]]
|Spain |Spanish Empire=[[Spanish Empire|Spanish colony]]
|Portugal=[[Portuguese Empire|Portuguese colony]]
|Germany |German Empire=[[German colonial empire|German colony]]
|Italy=[[Italian Empire|Italian colony]]
|Sweden=[[Swedish overseas colonies|Swedish colony]]
|Denmark=[[Danish colonial empire|Danish colony]]
|Norway=[[Norwegian Empire|Norwegian colony]]
|Russia=[[Russian Empire|Russian colony]]
|Japan=[[Empire of Japan|Japanese colony]]
|#default=Colony ({{#if:{{{empire|}}} |{{{empire}}}) |''of whom?'') {{#if:{{{_noautocat|<noinclude>yes</noinclude>}}}||[[Category:Former country articles requiring maintenance|S]]}} }}
}}
|Provisional Government |Provisional government
|Provisional=[[Provisional government]]
|Exiled Government |Exiled government
|Exile={{#if:{{{year_exile_start|}}}
| [[Government in exile|In exile]] {{#if:{{{year_exile_end|}}} |({{{year_exile_start}}}{{spaced ndash}}{{{year_exile_end}}}) |since {{{year_exile_start}}} }}
| [[Government in exile]]
}}
|#default={{{status}}}
}}
}}<noinclude>
{{documentation|content=
This subtemplate is used to simplify the code of {{tl|infobox country}}. It should not be used directly.
}}</noinclude>
4f904d43bb6c4d628d19a39a391cc105027b09bf
Template:Sidebar with collapsible lists
10
1012
2077
2020-04-23T17:08:31Z
[[]]>Plastikspork
0
TFD closed as oppose ([[WP:XFDC|XFDcloser]])
wikitext
text/x-wiki
{{#invoke: Sidebar | collapsible }}<noinclude>
{{documentation}}
<!-- Add categories to the /doc subpage, interwikis to Wikidata, not here -->
</noinclude>
4bd1f39f9101790ed6e315752e377a8ac7a95869
Template:Flagicon/core
10
216
438
2020-04-30T21:02:17Z
Ahecht
13
safesubst<noinclude />:
wikitext
text/x-wiki
<span class="flagicon">[[File:{{{flag alias-{{{variant}}}|{{safesubst<noinclude />:#if:{{{flag alias|}}}|{{{flag alias}}}|Flag placeholder.svg}}}}}|{{safesubst<noinclude />:#if:{{{size|}}}|{{{size}}}|{{{size flag alias-{{{variant}}}|{{safesubst<noinclude />:#if:{{{variant|}}}|23x15px|{{{size flag alias|23x15px}}}}}}}}}}|{{{border-{{{variant}}}|{{{border|border}}}}}} |alt={{{alias}}}|link={{{alias}}}]]</span><noinclude>{{documentation}}</noinclude>
14677aa18a0f6a866112637a51ba28adf4dd4bbe
Template:Wrap
10
1044
2149
2020-05-06T01:08:38Z
[[]]>Plastikspork
0
Merged
wikitext
text/x-wiki
<includeonly><span class="wrap">{{{1| }}}</span></includeonly><noinclude>
{{documentation}}
<!-- Add categories to the /doc subpage, not here! -->
</noinclude>
aa85f77c2939e3f50fa04a160b08510cf331ee11
Template:Flagicon image
10
1036
2133
2020-05-10T01:25:28Z
[[]]>Ɱ
0
add link param per talk
wikitext
text/x-wiki
<span class="flagicon">[[File:{{#if:{{{1|}}}|{{{1}}}|Flag placeholder.svg}}|{{{size|23x15px}}}|{{{border|{{#if:{{{1|}}}|border}}}}} |alt=|link={{{link|}}}]]</span><noinclude>{{documentation}}</noinclude>
057d0b94a9367359ad010c3da1fcdcb1e880dcb5
Template:Sidebar
10
36
76
2020-06-04T02:43:13Z
[[w>Primefac
0
TFD closed as keep ([[WP:XFDC|XFDcloser]])
wikitext
text/x-wiki
{{#invoke:Sidebar|sidebar}}<noinclude>
{{documentation}}</noinclude>
ab2498000a99daf324f656b0badd187b4a3e2b42
Template:MONTHNAME
10
1033
2127
2020-06-10T21:21:03Z
[[]]>Primefac
0
Reverted edits by [[Special:Contribs/Primefac|Primefac]] ([[User talk:Primefac|talk]]) to last version by Jo-Jo Eumerus
wikitext
text/x-wiki
<includeonly>{{#if:{{{1|}}}|{{#switch:{{MONTHNUMBER|{{{1}}}}}|1=January|2=February|3=March|4=April|5=May|6=June|7=July|8=August|9=September|10=October|11=November|12=December|Incorrect required parameter 1=''month''!}}|Missing required parameter 1=''month''!}}</includeonly><noinclude>
{{Documentation}}
<!-- Add categories and interwikis to the /doc subpage, not here! -->
</noinclude>
25327282f70efd1189b70245a0e23509f3bb65e6
Module:Infobox military conflict/styles.css
828
1050
2161
2020-06-19T22:52:04Z
[[]]>Frietjes
0
per request
sanitized-css
text/css
/* {{pp-template}} */
@media all and (min-width:720px) {
.desktop-float-right {
box-sizing: border-box;
float: right;
clear: right;
}
}
.infobox.vevent .status > p:first-child {
margin: 0;
}
1acb4afebca5f88c4679a397575d07b5de04407d
Template:Flagcountry
10
267
540
2020-07-17T15:28:45Z
[[w>Jonesey95
0
Adding unknown parameter tracking through [[:Category:Pages using flagcountry template with unknown parameters]] using [[Module:check for unknown parameters]]
wikitext
text/x-wiki
{{country data {{{1}}}|flagcountry/core|variant={{{variant|{{{2|}}}}}}|size={{{size|}}}|name={{{name|}}}}}{{#invoke:Check for unknown parameters|check|unknown={{main other|[[Category:Pages using flagcountry template with unknown parameters|_VALUE_{{PAGENAME}}]]}}|preview=Page using [[Template:Flagcountry]] with unknown parameter "_VALUE_"|ignoreblank=y| 1 | 2 | name | size | variant }}<noinclude>{{documentation}}</noinclude>
8e77099d5f28ae1a07d27fb07c9fac8684bd56cf
Module:String
828
26
56
2020-08-02T15:49:42Z
[[w>RexxS
0
separate annotations for str.match from those for str._match
Scribunto
text/plain
--[[
This module is intended to provide access to basic string functions.
Most of the functions provided here can be invoked with named parameters,
unnamed parameters, or a mixture. If named parameters are used, Mediawiki will
automatically remove any leading or trailing whitespace from the parameter.
Depending on the intended use, it may be advantageous to either preserve or
remove such whitespace.
Global options
ignore_errors: If set to 'true' or 1, any error condition will result in
an empty string being returned rather than an error message.
error_category: If an error occurs, specifies the name of a category to
include with the error message. The default category is
[Category:Errors reported by Module String].
no_category: If set to 'true' or 1, no category will be added if an error
is generated.
Unit tests for this module are available at Module:String/tests.
]]
local str = {}
--[[
len
This function returns the length of the target string.
Usage:
{{#invoke:String|len|target_string|}}
OR
{{#invoke:String|len|s=target_string}}
Parameters
s: The string whose length to report
If invoked using named parameters, Mediawiki will automatically remove any leading or
trailing whitespace from the target string.
]]
function str.len( frame )
local new_args = str._getParameters( frame.args, {'s'} )
local s = new_args['s'] or ''
return mw.ustring.len( s )
end
--[[
sub
This function returns a substring of the target string at specified indices.
Usage:
{{#invoke:String|sub|target_string|start_index|end_index}}
OR
{{#invoke:String|sub|s=target_string|i=start_index|j=end_index}}
Parameters
s: The string to return a subset of
i: The fist index of the substring to return, defaults to 1.
j: The last index of the string to return, defaults to the last character.
The first character of the string is assigned an index of 1. If either i or j
is a negative value, it is interpreted the same as selecting a character by
counting from the end of the string. Hence, a value of -1 is the same as
selecting the last character of the string.
If the requested indices are out of range for the given string, an error is
reported.
]]
function str.sub( frame )
local new_args = str._getParameters( frame.args, { 's', 'i', 'j' } )
local s = new_args['s'] or ''
local i = tonumber( new_args['i'] ) or 1
local j = tonumber( new_args['j'] ) or -1
local len = mw.ustring.len( s )
-- Convert negatives for range checking
if i < 0 then
i = len + i + 1
end
if j < 0 then
j = len + j + 1
end
if i > len or j > len or i < 1 or j < 1 then
return str._error( 'String subset index out of range' )
end
if j < i then
return str._error( 'String subset indices out of order' )
end
return mw.ustring.sub( s, i, j )
end
--[[
This function implements that features of {{str sub old}} and is kept in order
to maintain these older templates.
]]
function str.sublength( frame )
local i = tonumber( frame.args.i ) or 0
local len = tonumber( frame.args.len )
return mw.ustring.sub( frame.args.s, i + 1, len and ( i + len ) )
end
--[[
_match
This function returns a substring from the source string that matches a
specified pattern. It is exported for use in other modules
Usage:
strmatch = require("Module:String")._match
sresult = strmatch( s, pattern, start, match, plain, nomatch )
Parameters
s: The string to search
pattern: The pattern or string to find within the string
start: The index within the source string to start the search. The first
character of the string has index 1. Defaults to 1.
match: In some cases it may be possible to make multiple matches on a single
string. This specifies which match to return, where the first match is
match= 1. If a negative number is specified then a match is returned
counting from the last match. Hence match = -1 is the same as requesting
the last match. Defaults to 1.
plain: A flag indicating that the pattern should be understood as plain
text. Defaults to false.
nomatch: If no match is found, output the "nomatch" value rather than an error.
For information on constructing Lua patterns, a form of [regular expression], see:
* http://www.lua.org/manual/5.1/manual.html#5.4.1
* http://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Patterns
* http://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Ustring_patterns
]]
-- This sub-routine is exported for use in other modules
function str._match( s, pattern, start, match_index, plain_flag, nomatch )
if s == '' then
return str._error( 'Target string is empty' )
end
if pattern == '' then
return str._error( 'Pattern string is empty' )
end
start = tonumber(start) or 1
if math.abs(start) < 1 or math.abs(start) > mw.ustring.len( s ) then
return str._error( 'Requested start is out of range' )
end
if match_index == 0 then
return str._error( 'Match index is out of range' )
end
if plain_flag then
pattern = str._escapePattern( pattern )
end
local result
if match_index == 1 then
-- Find first match is simple case
result = mw.ustring.match( s, pattern, start )
else
if start > 1 then
s = mw.ustring.sub( s, start )
end
local iterator = mw.ustring.gmatch(s, pattern)
if match_index > 0 then
-- Forward search
for w in iterator do
match_index = match_index - 1
if match_index == 0 then
result = w
break
end
end
else
-- Reverse search
local result_table = {}
local count = 1
for w in iterator do
result_table[count] = w
count = count + 1
end
result = result_table[ count + match_index ]
end
end
if result == nil then
if nomatch == nil then
return str._error( 'Match not found' )
else
return nomatch
end
else
return result
end
end
--[[
match
This function returns a substring from the source string that matches a
specified pattern.
Usage:
{{#invoke:String|match|source_string|pattern_string|start_index|match_number|plain_flag|nomatch_output}}
OR
{{#invoke:String|match|s=source_string|pattern=pattern_string|start=start_index
|match=match_number|plain=plain_flag|nomatch=nomatch_output}}
Parameters
s: The string to search
pattern: The pattern or string to find within the string
start: The index within the source string to start the search. The first
character of the string has index 1. Defaults to 1.
match: In some cases it may be possible to make multiple matches on a single
string. This specifies which match to return, where the first match is
match= 1. If a negative number is specified then a match is returned
counting from the last match. Hence match = -1 is the same as requesting
the last match. Defaults to 1.
plain: A flag indicating that the pattern should be understood as plain
text. Defaults to false.
nomatch: If no match is found, output the "nomatch" value rather than an error.
If invoked using named parameters, Mediawiki will automatically remove any leading or
trailing whitespace from each string. In some circumstances this is desirable, in
other cases one may want to preserve the whitespace.
If the match_number or start_index are out of range for the string being queried, then
this function generates an error. An error is also generated if no match is found.
If one adds the parameter ignore_errors=true, then the error will be suppressed and
an empty string will be returned on any failure.
For information on constructing Lua patterns, a form of [regular expression], see:
* http://www.lua.org/manual/5.1/manual.html#5.4.1
* http://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Patterns
* http://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Ustring_patterns
]]
-- This is the entry point for #invoke:String|match
function str.match( frame )
local new_args = str._getParameters( frame.args, {'s', 'pattern', 'start', 'match', 'plain', 'nomatch'} )
local s = new_args['s'] or ''
local start = tonumber( new_args['start'] ) or 1
local plain_flag = str._getBoolean( new_args['plain'] or false )
local pattern = new_args['pattern'] or ''
local match_index = math.floor( tonumber(new_args['match']) or 1 )
local nomatch = new_args['nomatch']
return str._match( s, pattern, start, match_index, plain_flag, nomatch )
end
--[[
pos
This function returns a single character from the target string at position pos.
Usage:
{{#invoke:String|pos|target_string|index_value}}
OR
{{#invoke:String|pos|target=target_string|pos=index_value}}
Parameters
target: The string to search
pos: The index for the character to return
If invoked using named parameters, Mediawiki will automatically remove any leading or
trailing whitespace from the target string. In some circumstances this is desirable, in
other cases one may want to preserve the whitespace.
The first character has an index value of 1.
If one requests a negative value, this function will select a character by counting backwards
from the end of the string. In other words pos = -1 is the same as asking for the last character.
A requested value of zero, or a value greater than the length of the string returns an error.
]]
function str.pos( frame )
local new_args = str._getParameters( frame.args, {'target', 'pos'} )
local target_str = new_args['target'] or ''
local pos = tonumber( new_args['pos'] ) or 0
if pos == 0 or math.abs(pos) > mw.ustring.len( target_str ) then
return str._error( 'String index out of range' )
end
return mw.ustring.sub( target_str, pos, pos )
end
--[[
str_find
This function duplicates the behavior of {{str_find}}, including all of its quirks.
This is provided in order to support existing templates, but is NOT RECOMMENDED for
new code and templates. New code is recommended to use the "find" function instead.
Returns the first index in "source" that is a match to "target". Indexing is 1-based,
and the function returns -1 if the "target" string is not present in "source".
Important Note: If the "target" string is empty / missing, this function returns a
value of "1", which is generally unexpected behavior, and must be accounted for
separatetly.
]]
function str.str_find( frame )
local new_args = str._getParameters( frame.args, {'source', 'target'} )
local source_str = new_args['source'] or ''
local target_str = new_args['target'] or ''
if target_str == '' then
return 1
end
local start = mw.ustring.find( source_str, target_str, 1, true )
if start == nil then
start = -1
end
return start
end
--[[
find
This function allows one to search for a target string or pattern within another
string.
Usage:
{{#invoke:String|find|source_str|target_string|start_index|plain_flag}}
OR
{{#invoke:String|find|source=source_str|target=target_str|start=start_index|plain=plain_flag}}
Parameters
source: The string to search
target: The string or pattern to find within source
start: The index within the source string to start the search, defaults to 1
plain: Boolean flag indicating that target should be understood as plain
text and not as a Lua style regular expression, defaults to true
If invoked using named parameters, Mediawiki will automatically remove any leading or
trailing whitespace from the parameter. In some circumstances this is desirable, in
other cases one may want to preserve the whitespace.
This function returns the first index >= "start" where "target" can be found
within "source". Indices are 1-based. If "target" is not found, then this
function returns 0. If either "source" or "target" are missing / empty, this
function also returns 0.
This function should be safe for UTF-8 strings.
]]
function str.find( frame )
local new_args = str._getParameters( frame.args, {'source', 'target', 'start', 'plain' } )
local source_str = new_args['source'] or ''
local pattern = new_args['target'] or ''
local start_pos = tonumber(new_args['start']) or 1
local plain = new_args['plain'] or true
if source_str == '' or pattern == '' then
return 0
end
plain = str._getBoolean( plain )
local start = mw.ustring.find( source_str, pattern, start_pos, plain )
if start == nil then
start = 0
end
return start
end
--[[
replace
This function allows one to replace a target string or pattern within another
string.
Usage:
{{#invoke:String|replace|source_str|pattern_string|replace_string|replacement_count|plain_flag}}
OR
{{#invoke:String|replace|source=source_string|pattern=pattern_string|replace=replace_string|
count=replacement_count|plain=plain_flag}}
Parameters
source: The string to search
pattern: The string or pattern to find within source
replace: The replacement text
count: The number of occurences to replace, defaults to all.
plain: Boolean flag indicating that pattern should be understood as plain
text and not as a Lua style regular expression, defaults to true
]]
function str.replace( frame )
local new_args = str._getParameters( frame.args, {'source', 'pattern', 'replace', 'count', 'plain' } )
local source_str = new_args['source'] or ''
local pattern = new_args['pattern'] or ''
local replace = new_args['replace'] or ''
local count = tonumber( new_args['count'] )
local plain = new_args['plain'] or true
if source_str == '' or pattern == '' then
return source_str
end
plain = str._getBoolean( plain )
if plain then
pattern = str._escapePattern( pattern )
replace = mw.ustring.gsub( replace, "%%", "%%%%" ) --Only need to escape replacement sequences.
end
local result
if count ~= nil then
result = mw.ustring.gsub( source_str, pattern, replace, count )
else
result = mw.ustring.gsub( source_str, pattern, replace )
end
return result
end
--[[
simple function to pipe string.rep to templates.
]]
function str.rep( frame )
local repetitions = tonumber( frame.args[2] )
if not repetitions then
return str._error( 'function rep expects a number as second parameter, received "' .. ( frame.args[2] or '' ) .. '"' )
end
return string.rep( frame.args[1] or '', repetitions )
end
--[[
escapePattern
This function escapes special characters from a Lua string pattern. See [1]
for details on how patterns work.
[1] https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Patterns
Usage:
{{#invoke:String|escapePattern|pattern_string}}
Parameters
pattern_string: The pattern string to escape.
]]
function str.escapePattern( frame )
local pattern_str = frame.args[1]
if not pattern_str then
return str._error( 'No pattern string specified' )
end
local result = str._escapePattern( pattern_str )
return result
end
--[[
count
This function counts the number of occurrences of one string in another.
]]
function str.count(frame)
local args = str._getParameters(frame.args, {'source', 'pattern', 'plain'})
local source = args.source or ''
local pattern = args.pattern or ''
local plain = str._getBoolean(args.plain or true)
if plain then
pattern = str._escapePattern(pattern)
end
local _, count = mw.ustring.gsub(source, pattern, '')
return count
end
--[[
endswith
This function determines whether a string ends with another string.
]]
function str.endswith(frame)
local args = str._getParameters(frame.args, {'source', 'pattern'})
local source = args.source or ''
local pattern = args.pattern or ''
if pattern == '' then
-- All strings end with the empty string.
return "yes"
end
if mw.ustring.sub(source, -mw.ustring.len(pattern), -1) == pattern then
return "yes"
else
return ""
end
end
--[[
join
Join all non empty arguments together; the first argument is the separator.
Usage:
{{#invoke:String|join|sep|one|two|three}}
]]
function str.join(frame)
local args = {}
local sep
for _, v in ipairs( frame.args ) do
if sep then
if v ~= '' then
table.insert(args, v)
end
else
sep = v
end
end
return table.concat( args, sep or '' )
end
--[[
Helper function that populates the argument list given that user may need to use a mix of
named and unnamed parameters. This is relevant because named parameters are not
identical to unnamed parameters due to string trimming, and when dealing with strings
we sometimes want to either preserve or remove that whitespace depending on the application.
]]
function str._getParameters( frame_args, arg_list )
local new_args = {}
local index = 1
local value
for _, arg in ipairs( arg_list ) do
value = frame_args[arg]
if value == nil then
value = frame_args[index]
index = index + 1
end
new_args[arg] = value
end
return new_args
end
--[[
Helper function to handle error messages.
]]
function str._error( error_str )
local frame = mw.getCurrentFrame()
local error_category = frame.args.error_category or 'Errors reported by Module String'
local ignore_errors = frame.args.ignore_errors or false
local no_category = frame.args.no_category or false
if str._getBoolean(ignore_errors) then
return ''
end
local error_str = '<strong class="error">String Module Error: ' .. error_str .. '</strong>'
if error_category ~= '' and not str._getBoolean( no_category ) then
error_str = '[[Category:' .. error_category .. ']]' .. error_str
end
return error_str
end
--[[
Helper Function to interpret boolean strings
]]
function str._getBoolean( boolean_str )
local boolean_value
if type( boolean_str ) == 'string' then
boolean_str = boolean_str:lower()
if boolean_str == 'false' or boolean_str == 'no' or boolean_str == '0'
or boolean_str == '' then
boolean_value = false
else
boolean_value = true
end
elseif type( boolean_str ) == 'boolean' then
boolean_value = boolean_str
else
error( 'No boolean value found' )
end
return boolean_value
end
--[[
Helper function that escapes all pattern characters so that they will be treated
as plain text.
]]
function str._escapePattern( pattern_str )
return mw.ustring.gsub( pattern_str, "([%(%)%.%%%+%-%*%?%[%^%$%]])", "%%%1" )
end
return str
6df794dd52434e0f6a372c9918f5a9dedd15f579
Template:Convert
10
203
412
2020-08-09T22:52:24Z
[[w>Bsherr
0
adding comment
wikitext
text/x-wiki
<includeonly>{{{{{♥|safesubst:}}}#invoke:convert|convert}}</includeonly><noinclude>
{{documentation}}
<!-- Add categories to the /doc subpage, interwikis to Wikidata, not here -->
</noinclude>
952ac4080dc4a427c4a65db9951c8a4f4c91c626
Template:Yesno
10
21
46
2020-08-28T03:15:17Z
Xaosflux
6
add additional paramerters, "t", "f" - requested on talk - worked in sandbox /testcases
wikitext
text/x-wiki
{{<includeonly>safesubst:</includeonly>#switch: {{<includeonly>safesubst:</includeonly>lc: {{{1|¬}}} }}
|no
|n
|f
|false
|off
|0 = {{{no|<!-- null -->}}}
| = {{{blank|{{{no|<!-- null -->}}}}}}
|¬ = {{{¬|}}}
|yes
|y
|t
|true
|on
|1 = {{{yes|yes}}}
|#default = {{{def|{{{yes|yes}}}}}}
}}<noinclude>
{{Documentation}}
</noinclude>
629c2937bc5cf7cfe13cd2a598582af832782399
Module:TNT
828
85
172
2020-08-30T07:28:25Z
[[w>Johnuniq
0
Changed protection level for "[[Module:TNT]]": [[WP:High-risk templates|High-risk Lua module]]: per request at [[WP:RFPP]] to match [[Module:Excerpt]] ([Edit=Require template editor access] (indefinite) [Move=Require template editor access] (indefinite))
Scribunto
text/plain
--
-- INTRO: (!!! DO NOT RENAME THIS PAGE !!!)
-- This module allows any template or module to be copy/pasted between
-- wikis without any translation changes. All translation text is stored
-- in the global Data:*.tab pages on Commons, and used everywhere.
--
-- SEE: https://www.mediawiki.org/wiki/Multilingual_Templates_and_Modules
--
-- ATTENTION:
-- Please do NOT rename this module - it has to be identical on all wikis.
-- This code is maintained at https://www.mediawiki.org/wiki/Module:TNT
-- Please do not modify it anywhere else, as it may get copied and override your changes.
-- Suggestions can be made at https://www.mediawiki.org/wiki/Module_talk:TNT
--
-- DESCRIPTION:
-- The "msg" function uses a Commons dataset to translate a message
-- with a given key (e.g. source-table), plus optional arguments
-- to the wiki markup in the current content language.
-- Use lang=xx to set language. Example:
--
-- {{#invoke:TNT | msg
-- | I18n/Template:Graphs.tab <!-- https://commons.wikimedia.org/wiki/Data:I18n/Template:Graphs.tab -->
-- | source-table <!-- uses a translation message with id = "source-table" -->
-- | param1 }} <!-- optional parameter -->
--
--
-- The "doc" function will generate the <templatedata> parameter documentation for templates.
-- This way all template parameters can be stored and localized in a single Commons dataset.
-- NOTE: "doc" assumes that all documentation is located in Data:Templatedata/* on Commons.
--
-- {{#invoke:TNT | doc | Graph:Lines }}
-- uses https://commons.wikimedia.org/wiki/Data:Templatedata/Graph:Lines.tab
-- if the current page is Template:Graph:Lines/doc
--
local p = {}
local i18nDataset = 'I18n/Module:TNT.tab'
-- Forward declaration of the local functions
local sanitizeDataset, loadData, link, formatMessage
function p.msg(frame)
local dataset, id
local params = {}
local lang = nil
for k, v in pairs(frame.args) do
if k == 1 then
dataset = mw.text.trim(v)
elseif k == 2 then
id = mw.text.trim(v)
elseif type(k) == 'number' then
table.insert(params, mw.text.trim(v))
elseif k == 'lang' and v ~= '_' then
lang = mw.text.trim(v)
end
end
return formatMessage(dataset, id, params, lang)
end
-- Identical to p.msg() above, but used from other lua modules
-- Parameters: name of dataset, message key, optional arguments
-- Example with 2 params: format('I18n/Module:TNT', 'error_bad_msgkey', 'my-key', 'my-dataset')
function p.format(dataset, key, ...)
local checkType = require('libraryUtil').checkType
checkType('format', 1, dataset, 'string')
checkType('format', 2, key, 'string')
return formatMessage(dataset, key, {...})
end
-- Identical to p.msg() above, but used from other lua modules with the language param
-- Parameters: language code, name of dataset, message key, optional arguments
-- Example with 2 params: formatInLanguage('es', I18n/Module:TNT', 'error_bad_msgkey', 'my-key', 'my-dataset')
function p.formatInLanguage(lang, dataset, key, ...)
local checkType = require('libraryUtil').checkType
checkType('formatInLanguage', 1, lang, 'string')
checkType('formatInLanguage', 2, dataset, 'string')
checkType('formatInLanguage', 3, key, 'string')
return formatMessage(dataset, key, {...}, lang)
end
-- Obsolete function that adds a 'c:' prefix to the first param.
-- "Sandbox/Sample.tab" -> 'c:Data:Sandbox/Sample.tab'
function p.link(frame)
return link(frame.args[1])
end
function p.doc(frame)
local dataset = 'Templatedata/' .. sanitizeDataset(frame.args[1])
return frame:extensionTag('templatedata', p.getTemplateData(dataset)) ..
formatMessage(i18nDataset, 'edit_doc', {link(dataset)})
end
function p.getTemplateData(dataset)
-- TODO: add '_' parameter once lua starts reindexing properly for "all" languages
local data = loadData(dataset)
local names = {}
for _, field in pairs(data.schema.fields) do
table.insert(names, field.name)
end
local params = {}
local paramOrder = {}
for _, row in pairs(data.data) do
local newVal = {}
local name = nil
for pos, val in pairs(row) do
local columnName = names[pos]
if columnName == 'name' then
name = val
else
newVal[columnName] = val
end
end
if name then
params[name] = newVal
table.insert(paramOrder, name)
end
end
-- Work around json encoding treating {"1":{...}} as an [{...}]
params['zzz123']=''
local json = mw.text.jsonEncode({
params=params,
paramOrder=paramOrder,
description=data.description
})
json = string.gsub(json,'"zzz123":"",?', "")
return json
end
-- Local functions
sanitizeDataset = function(dataset)
if not dataset then
return nil
end
dataset = mw.text.trim(dataset)
if dataset == '' then
return nil
elseif string.sub(dataset,-4) ~= '.tab' then
return dataset .. '.tab'
else
return dataset
end
end
loadData = function(dataset, lang)
dataset = sanitizeDataset(dataset)
if not dataset then
error(formatMessage(i18nDataset, 'error_no_dataset', {}))
end
-- Give helpful error to thirdparties who try and copy this module.
if not mw.ext or not mw.ext.data or not mw.ext.data.get then
error('Missing JsonConfig extension; Cannot load https://commons.wikimedia.org/wiki/Data:' .. dataset)
end
local data = mw.ext.data.get(dataset, lang)
if data == false then
if dataset == i18nDataset then
-- Prevent cyclical calls
error('Missing Commons dataset ' .. i18nDataset)
else
error(formatMessage(i18nDataset, 'error_bad_dataset', {link(dataset)}))
end
end
return data
end
-- Given a dataset name, convert it to a title with the 'commons:data:' prefix
link = function(dataset)
return 'c:Data:' .. mw.text.trim(dataset or '')
end
formatMessage = function(dataset, key, params, lang)
for _, row in pairs(loadData(dataset, lang).data) do
local id, msg = unpack(row)
if id == key then
local result = mw.message.newRawMessage(msg, unpack(params or {}))
return result:plain()
end
end
if dataset == i18nDataset then
-- Prevent cyclical calls
error('Invalid message key "' .. key .. '"')
else
error(formatMessage(i18nDataset, 'error_bad_msgkey', {key, link(dataset)}))
end
end
return p
9d0d10e54abd232c806dcabccaf03e52858634a1
Template:Abbr
10
1029
2119
2020-09-02T09:46:47Z
[[]]>Primefac
0
remove third parameter, as it is causing lint issues (TPER)
wikitext
text/x-wiki
<abbr {{#if:{{{class|}}}|class="{{{class}}}"}} {{#if:{{{id|}}}|id="{{{id}}}"}} {{#if:{{{style|}}}|style="{{{style}}}"}} title="{{#tag:nowiki|{{#invoke:String|replace|{{{2|}}}|"|"}}}}">{{{1|}}}</abbr><noinclude>{{Documentation}}
</noinclude>
5fd53aa19ba927ce3eea9092a4fa31f881df0a6e
Template:Increase
10
222
450
2020-09-08T22:54:27Z
[[w>Sdkb
0
adding size parameter, per talk
wikitext
text/x-wiki
[[File:Increase2.svg|{{{size|11px}}}|alt={{{1|Increase}}}|link=|{{{1|Increase}}}]]<noinclude>
{{documentation}}
</noinclude>
dac0cb099f2bf8616e0649249f7e4593a2bf54bd
Module:Effective protection level
828
39
82
2020-09-29T03:38:47Z
[[w>Jackmcbarn
0
bring in changes from sandbox
Scribunto
text/plain
local p = {}
-- Returns the permission required to perform a given action on a given title.
-- If no title is specified, the title of the page being displayed is used.
function p._main(action, pagename)
local title
if type(pagename) == 'table' and pagename.prefixedText then
title = pagename
elseif pagename then
title = mw.title.new(pagename)
else
title = mw.title.getCurrentTitle()
end
pagename = title.prefixedText
if action == 'autoreview' then
local level = mw.ext.FlaggedRevs.getStabilitySettings(title)
level = level and level.autoreview
if level == 'review' then
return 'reviewer'
elseif level ~= '' then
return level
else
return nil -- not '*'. a page not being PC-protected is distinct from it being PC-protected with anyone able to review. also not '', as that would mean PC-protected but nobody can review
end
elseif action ~= 'edit' and action ~= 'move' and action ~= 'create' and action ~= 'upload' and action ~= 'undelete' then
error( 'First parameter must be one of edit, move, create, upload, undelete, autoreview', 2 )
end
if title.namespace == 8 then -- MediaWiki namespace
if title.text:sub(-3) == '.js' or title.text:sub(-4) == '.css' or title.contentModel == 'javascript' or title.contentModel == 'css' then -- site JS or CSS page
return 'interfaceadmin'
else -- any non-JS/CSS MediaWiki page
return 'sysop'
end
elseif title.namespace == 2 and title.isSubpage then
if title.contentModel == 'javascript' or title.contentModel == 'css' then -- user JS or CSS page
return 'interfaceadmin'
elseif title.contentModel == 'json' then -- user JSON page
return 'sysop'
end
end
if action == 'undelete' then
return 'sysop'
end
local level = title.protectionLevels[action] and title.protectionLevels[action][1]
if level == 'sysop' or level == 'editprotected' then
return 'sysop'
elseif title.cascadingProtection.restrictions[action] and title.cascadingProtection.restrictions[action][1] then -- used by a cascading-protected page
return 'sysop'
elseif level == 'templateeditor' then
return 'templateeditor'
elseif action == 'move' then
local blacklistentry = mw.ext.TitleBlacklist.test('edit', pagename) -- Testing action edit is correct, since this is for the source page. The target page name gets tested with action move.
if blacklistentry and not blacklistentry.params.autoconfirmed then
return 'templateeditor'
elseif title.namespace == 6 then
return 'filemover'
elseif level == 'extendedconfirmed' then
return 'extendedconfirmed'
else
return 'autoconfirmed'
end
end
local blacklistentry = mw.ext.TitleBlacklist.test(action, pagename)
if blacklistentry then
if not blacklistentry.params.autoconfirmed then
return 'templateeditor'
elseif level == 'extendedconfirmed' then
return 'extendedconfirmed'
else
return 'autoconfirmed'
end
elseif level == 'editsemiprotected' then -- create-semiprotected pages return this for some reason
return 'autoconfirmed'
elseif level then
return level
elseif action == 'upload' then
return 'autoconfirmed'
elseif action == 'create' and title.namespace % 2 == 0 and title.namespace ~= 118 then -- You need to be registered, but not autoconfirmed, to create non-talk pages other than drafts
return 'user'
else
return '*'
end
end
setmetatable(p, { __index = function(t, k)
return function(frame)
return t._main(k, frame.args[1])
end
end })
return p
70256a489edf6be9808031b14a7e3ef3e025da97
Template:Lang
10
205
416
2020-10-19T17:49:42Z
[[w>Gonnym
0
wikitext
text/x-wiki
<includeonly>{{#invoke:Lang|{{{fn|lang}}}}}</includeonly><noinclude>
{{Documentation}}
</noinclude>
ed35aafbfe8198c5ad80fd861124244d0c7f2742
Template:Start date
10
1045
2151
2020-11-05T01:49:22Z
[[]]>Primefac
0
TFD closed as keep
wikitext
text/x-wiki
<includeonly>{{#if: {{{4|}}}
|{{#if: {{{5|}}}
|{{padleft:{{{4}}}|2|0}}:{{padleft:{{{5}}}|2|0}}{{#if: {{{6|}}}
|:{{padleft:{{{6}}}|2|0}} }}, }} }}<!--ABOVE FOR TIME; BELOW FOR DATE
-->{{#if: {{{1|}}}
|{{#if: {{{2|}}}
|{{#if: {{{3|}}}
|{{#if: {{{df|}}}|{{#expr:{{{3}}}}} {{MONTHNAME|{{{2}}}}}|{{MONTHNAME|{{{2}}}}} {{#expr:{{{3}}}}},}} {{{1}}}|{{MONTHNAME|{{{2}}}}} {{{1}}}}}|{{{1}}}}}}}{{#if: {{{7|}}}
| ({{#ifeq: {{{7}}}|Z|UTC|{{{7}}}}})}}<!-- BELOW FOR hCalendar
--><span style="display:none"> (<span class="bday dtstart published updated">{{#if: {{{1|}}}
| {{{1}}}{{#if: {{{2|}}}
| -{{padleft:{{{2}}}|2|0}}{{#if: {{{3|}}}
| -{{padleft:{{{3}}}|2|0}} }} }}<!--
-->{{#if: {{{4|}}}
| T{{padleft:{{{4}}}|2|0}}{{#if: {{{5|}}}
| :{{padleft:{{{5}}}|2|0}}{{#if: {{{6|}}}
| :{{padleft:{{{6}}}|2|0}} }} }} }} }}{{{7|}}}</span>)</span></includeonly><noinclude>
{{documentation}}
</noinclude>
2bdc464c20f7d568f3d482c9fb2d04f5d266f982
Module:Documentation/styles.css
828
319
689
2020-11-19T20:21:58Z
[[]]>Izno
0
Changed protection level for "[[Module:Documentation/styles.css]]": actually match module ([Edit=Require template editor access] (indefinite) [Move=Require template editor access] (indefinite))
sanitized-css
text/css
/* {{pp|small=yes}} */
.documentation,
.documentation-metadata {
border: 1px solid #a2a9b1;
background-color: #ecfcf4;
clear: both;
}
.documentation {
margin: 1em 0 0 0;
padding: 1em;
}
.documentation-metadata {
margin: 0.2em 0; /* same margin left-right as .documentation */
font-style: italic;
padding: 0.4em 1em; /* same padding left-right as .documentation */
}
.documentation-startbox {
padding-bottom: 3px;
border-bottom: 1px solid #aaa;
margin-bottom: 1ex;
}
.documentation-heading {
font-weight: bold;
font-size: 125%;
}
.documentation-clear { /* Don't want things to stick out where they shouldn't. */
clear: both;
}
.documentation-toolbar {
font-style: normal;
font-size: 85%;
}
ce0e629c92e3d825ab9fd927fe6cc37d9117b6cb
Template:Tld
10
1025
2107
2020-11-20T18:52:18Z
[[]]>Primefac
0
avoid redir
wikitext
text/x-wiki
#REDIRECT [[Template:Template link code]]
be5d6275ea41d83224503e05901f3405c82141f7
Template:Tlx
10
30
64
2020-11-20T18:53:35Z
[[w>Primefac
0
Primefac moved page [[Template:Tlx]] to [[Template:Template link expanded]] over redirect: expand name, make it more obvious
wikitext
text/x-wiki
#REDIRECT [[Template:Template link expanded]]
{{Redirect category shell|
{{R from move}}
}}
1fec988ceb46cb324af228aac45d7cd25fcc9008
Template:Template link expanded
10
31
66
2020-11-21T12:04:41Z
[[w>Primefac
0
update
wikitext
text/x-wiki
{{#Invoke:Template link general|main|code=on}}<noinclude>
{{Documentation|1=Template:Tlg/doc
|content = {{tlg/doc|tlx}}
}}
<!-- Add categories to the /doc subpage, not here! -->
</noinclude>
6c99696fee02f1da368ed20d2504e19bc15b1c13
Template:Template link with link off
10
64
132
2020-11-21T12:06:17Z
[[w>Primefac
0
update
wikitext
text/x-wiki
<includeonly>{{#Invoke:Template link general|main|nowrap=yes|nolink=yes}}</includeonly><noinclude>
{{Documentation|1=Template:Tlg/doc
|content = {{tlg/doc|tlf}}
}}
<!-- Add categories to the /doc subpage, not here! -->
</noinclude>
b099fea5d1f36b0b4b9cb253ad3a9f4e095f6851
Template:Template link code
10
1024
2105
2020-11-21T12:06:22Z
[[]]>Primefac
0
update
wikitext
text/x-wiki
<includeonly>{{#Invoke:Template link general|main|nolink=yes|code=yes|nowrap=yes}}</includeonly><noinclude>
{{Documentation|1=Template:Tlg/doc
|content = {{tlg/doc|tlc}}
}}
<!-- Add categories to the /doc subpage, not here! -->
</noinclude>
044f00ca1bfc10cb967c32e893043ccc6f739764
Module:Location map/styles.css
828
1038
2137
2021-01-02T20:03:01Z
[[]]>Izno
0
Protected "[[Module:Location map/styles.css]]": [[WP:High-risk templates|Highly visible template]]: match parent ([Edit=Require template editor access] (indefinite) [Move=Require template editor access] (indefinite))
sanitized-css
text/css
/* {{pp|small=yes}} */
.locmap .od {
position: absolute;
}
.locmap .id {
position: absolute;
line-height: 0;
}
.locmap .l0 {
font-size: 0;
position: absolute;
}
.locmap .pv {
line-height: 110%;
position: absolute;
text-align: center;
}
.locmap .pl {
line-height: 110%;
position: absolute;
top: -0.75em;
text-align: right;
}
.locmap .pr {
line-height: 110%;
position: absolute;
top: -0.75em;
text-align: left;
}
.locmap .pv > div {
display: inline;
padding: 1px;
}
.locmap .pl > div {
display: inline; /* inline does not impact floated elements */
padding: 1px;
float: right;
}
.locmap .pr > div {
display: inline; /* inline does not impact floated elements */
padding: 1px;
float: left;
}
1af8c3b5ae1ff654548b74f76b5208f6b360c5a1
Module:Data
828
1041
2143
2021-01-16T19:03:09Z
[[]]>Jackmcbarn
0
Make this work when called with wikitext's fake tables
Scribunto
text/plain
local mt = {}
function mt.__index(t, k)
return function(frame)
local data = mw.loadData(k)
local i = 1
for _,v in ipairs(frame.args) do
local ty = type(data)
if ty ~= 'table' then
local args = {}
for j = 1, i - 1 do
args[j] = frame.args[j]
end
if frame.args.softfail then
return '<span class="error">[[Category:Pages with failed Module:Data lookups]]Error: Tried to read index "' .. mw.text.nowiki(v) .. '" of mw.loadData("' .. mw.text.nowiki(k) .. '").' .. mw.text.nowiki(table.concat(args, '.')) .. ', which is a ' .. ty .. '</span>'
else
error('Tried to read index "' .. v .. '" of mw.loadData("' .. k .. '").' .. table.concat(args, '.') .. ', which is a ' .. ty)
end
end
data = data[v]
i = i + 1
end
return data
end
end
return setmetatable({}, mt)
654c5ba2e0c73e7415457ca7a67fe0dfacfdba3b
Template:Tlc
10
1023
2103
2021-01-23T16:04:55Z
[[]]>Elli
0
cats
wikitext
text/x-wiki
#REDIRECT [[Template:Template link code]]
{{Redirect category shell|
{{R from template shortcut}}
{{R from high-use template}}
{{R from move}}
}}
48ef4a029c0e27cccb1148a29fb8b7ccb211a4a2
Template:Tl
10
17
38
2021-02-12T22:03:00Z
[[w>Anthony Appleyard
0
Anthony Appleyard moved page [[Template:Tl]] to [[Template:Template link]]: [[Special:Permalink/1006428669|Requested]] by Buidhe at [[WP:RM/TR]]: RM closed as move
wikitext
text/x-wiki
#REDIRECT [[Template:Template link]]
{{Redirect category shell|
{{R from move}}
}}
d6593bb3b4a866249f55d0f34b047a71fe1f1529
Template:Div col
10
53
110
2021-02-14T23:20:57Z
[[w>Matt Fitzpatrick
0
whitelist parameter class
wikitext
text/x-wiki
<includeonly><templatestyles src="Div col/styles.css"/><!--
--><div class="div-col {{#ifeq:{{{small|}}}|yes|div-col-small}} {{#ifeq:{{{rules|}}}|yes|div-col-rules}} {{{class|}}}" <!--
-->{{#if:{{{colwidth|}}}{{{gap|}}}{{{style|}}}|<!--
-->style="{{#if:{{{colwidth|}}}|column-width: {{{colwidth}}};}}{{#if:{{{gap|}}}|column-gap: {{{gap}}};}}{{#if:{{{style|}}}|{{{style}}}}}"<!--
-->}}><!--
-->{{#if:{{{content|}}}|{{{content}}}</div>}}<!-- Inventory how many pages use small=yes
-->{{#ifeq:{{{small|}}}|yes|[[Category:Pages using div col with small parameter]]}}<!--
--></includeonly>{{#invoke:Check for unknown parameters|check|unknown={{main other|[[Category:Pages using div col with unknown parameters|_VALUE_{{PAGENAME}}]]}}|preview=Page using [[Template:Div col]] with unknown parameter "_VALUE_"; use colwidth= to specify column size |ignoreblank=y | class | colwidth | content | gap | rules | small | style }}<noinclude>
{{Documentation}}
</noinclude>
6e84133dd867d6c701e7b161878cf66665bb7eb7
Module:Math
828
221
448
2021-03-11T22:23:48Z
[[w>Primefac
0
typo fix
Scribunto
text/plain
--[[
This module provides a number of basic mathematical operations.
]]
local yesno, getArgs -- lazily initialized
local p = {} -- Holds functions to be returned from #invoke, and functions to make available to other Lua modules.
local wrap = {} -- Holds wrapper functions that process arguments from #invoke. These act as intemediary between functions meant for #invoke and functions meant for Lua.
--[[
Helper functions used to avoid redundant code.
]]
local function err(msg)
-- Generates wikitext error messages.
return mw.ustring.format('<strong class="error">Formatting error: %s</strong>', msg)
end
local function unpackNumberArgs(args)
-- Returns an unpacked list of arguments specified with numerical keys.
local ret = {}
for k, v in pairs(args) do
if type(k) == 'number' then
table.insert(ret, v)
end
end
return unpack(ret)
end
local function makeArgArray(...)
-- Makes an array of arguments from a list of arguments that might include nils.
local args = {...} -- Table of arguments. It might contain nils or non-number values, so we can't use ipairs.
local nums = {} -- Stores the numbers of valid numerical arguments.
local ret = {}
for k, v in pairs(args) do
v = p._cleanNumber(v)
if v then
nums[#nums + 1] = k
args[k] = v
end
end
table.sort(nums)
for i, num in ipairs(nums) do
ret[#ret + 1] = args[num]
end
return ret
end
local function fold(func, ...)
-- Use a function on all supplied arguments, and return the result. The function must accept two numbers as parameters,
-- and must return a number as an output. This number is then supplied as input to the next function call.
local vals = makeArgArray(...)
local count = #vals -- The number of valid arguments
if count == 0 then return
-- Exit if we have no valid args, otherwise removing the first arg would cause an error.
nil, 0
end
local ret = table.remove(vals, 1)
for _, val in ipairs(vals) do
ret = func(ret, val)
end
return ret, count
end
--[[
Fold arguments by selectively choosing values (func should return when to choose the current "dominant" value).
]]
local function binary_fold(func, ...)
local value = fold((function(a, b) if func(a, b) then return a else return b end end), ...)
return value
end
--[[
random
Generate a random number
Usage:
{{#invoke: Math | random }}
{{#invoke: Math | random | maximum value }}
{{#invoke: Math | random | minimum value | maximum value }}
]]
function wrap.random(args)
local first = p._cleanNumber(args[1])
local second = p._cleanNumber(args[2])
return p._random(first, second)
end
function p._random(first, second)
math.randomseed(mw.site.stats.edits + mw.site.stats.pages + os.time() + math.floor(os.clock() * 1000000000))
-- math.random will throw an error if given an explicit nil parameter, so we need to use if statements to check the params.
if first and second then
if first <= second then -- math.random doesn't allow the first number to be greater than the second.
return math.random(first, second)
end
elseif first then
return math.random(first)
else
return math.random()
end
end
--[[
order
Determine order of magnitude of a number
Usage:
{{#invoke: Math | order | value }}
]]
function wrap.order(args)
local input_string = (args[1] or args.x or '0');
local input_number = p._cleanNumber(input_string);
if input_number == nil then
return err('order of magnitude input appears non-numeric')
else
return p._order(input_number)
end
end
function p._order(x)
if x == 0 then return 0 end
return math.floor(math.log10(math.abs(x)))
end
--[[
precision
Detemines the precision of a number using the string representation
Usage:
{{ #invoke: Math | precision | value }}
]]
function wrap.precision(args)
local input_string = (args[1] or args.x or '0');
local trap_fraction = args.check_fraction;
local input_number;
if not yesno then
yesno = require('Module:Yesno')
end
if yesno(trap_fraction, true) then -- Returns true for all input except nil, false, "no", "n", "0" and a few others. See [[Module:Yesno]].
local pos = string.find(input_string, '/', 1, true);
if pos ~= nil then
if string.find(input_string, '/', pos + 1, true) == nil then
local denominator = string.sub(input_string, pos+1, -1);
local denom_value = tonumber(denominator);
if denom_value ~= nil then
return math.log10(denom_value);
end
end
end
end
input_number, input_string = p._cleanNumber(input_string);
if input_string == nil then
return err('precision input appears non-numeric')
else
return p._precision(input_string)
end
end
function p._precision(x)
if type(x) == 'number' then
x = tostring(x)
end
x = string.upper(x)
local decimal = x:find('%.')
local exponent_pos = x:find('E')
local result = 0;
if exponent_pos ~= nil then
local exponent = string.sub(x, exponent_pos + 1)
x = string.sub(x, 1, exponent_pos - 1)
result = result - tonumber(exponent)
end
if decimal ~= nil then
result = result + string.len(x) - decimal
return result
end
local pos = string.len(x);
while x:byte(pos) == string.byte('0') do
pos = pos - 1
result = result - 1
if pos <= 0 then
return 0
end
end
return result
end
--[[
max
Finds the maximum argument
Usage:
{{#invoke:Math| max | value1 | value2 | ... }}
Note, any values that do not evaluate to numbers are ignored.
]]
function wrap.max(args)
return p._max(unpackNumberArgs(args))
end
function p._max(...)
local max_value = binary_fold((function(a, b) return a > b end), ...)
if max_value then
return max_value
end
end
--[[
median
Find the median of set of numbers
Usage:
{{#invoke:Math | median | number1 | number2 | ...}}
OR
{{#invoke:Math | median }}
]]
function wrap.median(args)
return p._median(unpackNumberArgs(args))
end
function p._median(...)
local vals = makeArgArray(...)
local count = #vals
table.sort(vals)
if count == 0 then
return 0
end
if p._mod(count, 2) == 0 then
return (vals[count/2] + vals[count/2+1])/2
else
return vals[math.ceil(count/2)]
end
end
--[[
min
Finds the minimum argument
Usage:
{{#invoke:Math| min | value1 | value2 | ... }}
OR
{{#invoke:Math| min }}
When used with no arguments, it takes its input from the parent
frame. Note, any values that do not evaluate to numbers are ignored.
]]
function wrap.min(args)
return p._min(unpackNumberArgs(args))
end
function p._min(...)
local min_value = binary_fold((function(a, b) return a < b end), ...)
if min_value then
return min_value
end
end
--[[
sum
Finds the sum
Usage:
{{#invoke:Math| sum | value1 | value2 | ... }}
OR
{{#invoke:Math| sum }}
Note, any values that do not evaluate to numbers are ignored.
]]
function wrap.sum(args)
return p._sum(unpackNumberArgs(args))
end
function p._sum(...)
local sums, count = fold((function(a, b) return a + b end), ...)
if not sums then
return 0
else
return sums
end
end
--[[
average
Finds the average
Usage:
{{#invoke:Math| average | value1 | value2 | ... }}
OR
{{#invoke:Math| average }}
Note, any values that do not evaluate to numbers are ignored.
]]
function wrap.average(args)
return p._average(unpackNumberArgs(args))
end
function p._average(...)
local sum, count = fold((function(a, b) return a + b end), ...)
if not sum then
return 0
else
return sum / count
end
end
--[[
round
Rounds a number to specified precision
Usage:
{{#invoke:Math | round | value | precision }}
--]]
function wrap.round(args)
local value = p._cleanNumber(args[1] or args.value or 0)
local precision = p._cleanNumber(args[2] or args.precision or 0)
if value == nil or precision == nil then
return err('round input appears non-numeric')
else
return p._round(value, precision)
end
end
function p._round(value, precision)
local rescale = math.pow(10, precision or 0);
return math.floor(value * rescale + 0.5) / rescale;
end
--[[
log10
returns the log (base 10) of a number
Usage:
{{#invoke:Math | log10 | x }}
]]
function wrap.log10(args)
return math.log10(args[1])
end
--[[
mod
Implements the modulo operator
Usage:
{{#invoke:Math | mod | x | y }}
--]]
function wrap.mod(args)
local x = p._cleanNumber(args[1])
local y = p._cleanNumber(args[2])
if not x then
return err('first argument to mod appears non-numeric')
elseif not y then
return err('second argument to mod appears non-numeric')
else
return p._mod(x, y)
end
end
function p._mod(x, y)
local ret = x % y
if not (0 <= ret and ret < y) then
ret = 0
end
return ret
end
--[[
gcd
Calculates the greatest common divisor of multiple numbers
Usage:
{{#invoke:Math | gcd | value 1 | value 2 | value 3 | ... }}
--]]
function wrap.gcd(args)
return p._gcd(unpackNumberArgs(args))
end
function p._gcd(...)
local function findGcd(a, b)
local r = b
local oldr = a
while r ~= 0 do
local quotient = math.floor(oldr / r)
oldr, r = r, oldr - quotient * r
end
if oldr < 0 then
oldr = oldr * -1
end
return oldr
end
local result, count = fold(findGcd, ...)
return result
end
--[[
precision_format
Rounds a number to the specified precision and formats according to rules
originally used for {{template:Rnd}}. Output is a string.
Usage:
{{#invoke: Math | precision_format | number | precision }}
]]
function wrap.precision_format(args)
local value_string = args[1] or 0
local precision = args[2] or 0
return p._precision_format(value_string, precision)
end
function p._precision_format(value_string, precision)
-- For access to Mediawiki built-in formatter.
local lang = mw.getContentLanguage();
local value
value, value_string = p._cleanNumber(value_string)
precision = p._cleanNumber(precision)
-- Check for non-numeric input
if value == nil or precision == nil then
return err('invalid input when rounding')
end
local current_precision = p._precision(value)
local order = p._order(value)
-- Due to round-off effects it is neccesary to limit the returned precision under
-- some circumstances because the terminal digits will be inaccurately reported.
if order + precision >= 14 then
if order + p._precision(value_string) >= 14 then
precision = 13 - order;
end
end
-- If rounding off, truncate extra digits
if precision < current_precision then
value = p._round(value, precision)
current_precision = p._precision(value)
end
local formatted_num = lang:formatNum(math.abs(value))
local sign
-- Use proper unary minus sign rather than ASCII default
if value < 0 then
sign = '−'
else
sign = ''
end
-- Handle cases requiring scientific notation
if string.find(formatted_num, 'E', 1, true) ~= nil or math.abs(order) >= 9 then
value = value * math.pow(10, -order)
current_precision = current_precision + order
precision = precision + order
formatted_num = lang:formatNum(math.abs(value))
else
order = 0;
end
formatted_num = sign .. formatted_num
-- Pad with zeros, if needed
if current_precision < precision then
local padding
if current_precision <= 0 then
if precision > 0 then
local zero_sep = lang:formatNum(1.1)
formatted_num = formatted_num .. zero_sep:sub(2,2)
padding = precision
if padding > 20 then
padding = 20
end
formatted_num = formatted_num .. string.rep('0', padding)
end
else
padding = precision - current_precision
if padding > 20 then
padding = 20
end
formatted_num = formatted_num .. string.rep('0', padding)
end
end
-- Add exponential notation, if necessary.
if order ~= 0 then
-- Use proper unary minus sign rather than ASCII default
if order < 0 then
order = '−' .. lang:formatNum(math.abs(order))
else
order = lang:formatNum(order)
end
formatted_num = formatted_num .. '<span style="margin:0 .15em 0 .25em">×</span>10<sup>' .. order .. '</sup>'
end
return formatted_num
end
--[[
divide
Implements the division operator
Usage:
{{#invoke:Math | divide | x | y | round= | precision= }}
--]]
function wrap.divide(args)
local x = args[1]
local y = args[2]
local round = args.round
local precision = args.precision
if not yesno then
yesno = require('Module:Yesno')
end
return p._divide(x, y, yesno(round), precision)
end
function p._divide(x, y, round, precision)
if y == nil or y == "" then
return err("Empty divisor")
elseif not tonumber(y) then
if type(y) == 'string' and string.sub(y, 1, 1) == '<' then
return y
else
return err("Not a number: " .. y)
end
elseif x == nil or x == "" then
return err("Empty dividend")
elseif not tonumber(x) then
if type(x) == 'string' and string.sub(x, 1, 1) == '<' then
return x
else
return err("Not a number: " .. x)
end
else
local z = x / y
if round then
return p._round(z, 0)
elseif precision then
return p._round(z, precision)
else
return z
end
end
end
--[[
Helper function that interprets the input numerically. If the
input does not appear to be a number, attempts evaluating it as
a parser functions expression.
]]
function p._cleanNumber(number_string)
if type(number_string) == 'number' then
-- We were passed a number, so we don't need to do any processing.
return number_string, tostring(number_string)
elseif type(number_string) ~= 'string' or not number_string:find('%S') then
-- We were passed a non-string or a blank string, so exit.
return nil, nil;
end
-- Attempt basic conversion
local number = tonumber(number_string)
-- If failed, attempt to evaluate input as an expression
if number == nil then
local success, result = pcall(mw.ext.ParserFunctions.expr, number_string)
if success then
number = tonumber(result)
number_string = tostring(number)
else
number = nil
number_string = nil
end
else
number_string = number_string:match("^%s*(.-)%s*$") -- String is valid but may contain padding, clean it.
number_string = number_string:match("^%+(.*)$") or number_string -- Trim any leading + signs.
if number_string:find('^%-?0[xX]') then
-- Number is using 0xnnn notation to indicate base 16; use the number that Lua detected instead.
number_string = tostring(number)
end
end
return number, number_string
end
--[[
Wrapper function that does basic argument processing. This ensures that all functions from #invoke can use either the current
frame or the parent frame, and it also trims whitespace for all arguments and removes blank arguments.
]]
local mt = { __index = function(t, k)
return function(frame)
if not getArgs then
getArgs = require('Module:Arguments').getArgs
end
return wrap[k](getArgs(frame)) -- Argument processing is left to Module:Arguments. Whitespace is trimmed and blank arguments are removed.
end
end }
return setmetatable(p, mt)
2bbe734d898299f65412963a3c1782e9fcc4d9ca
Template:Template link
10
18
40
2021-03-25T19:03:22Z
[[w>Izno
0
[[Wikipedia:Templates for discussion/Log/2021 March 18#Template:Tlu]] closed as keep ([[WP:XFDC#4.0.11|XFDcloser]])
wikitext
text/x-wiki
{{[[Template:{{{1}}}|{{{1}}}]]}}<noinclude>{{documentation}}
<!-- Categories go on the /doc subpage and interwikis go on Wikidata. -->
</noinclude>
eabbec62efe3044a98ebb3ce9e7d4d43c222351d
Template:Flagicon
10
215
436
2021-04-06T23:46:15Z
[[w>Wbm1058
0
remove unnecessary specification
wikitext
text/x-wiki
<includeonly>{{safesubst<noinclude />:#ifeq: {{Yesno-no|{{{noredlink|}}}}}|yes<noinclude><!--
--></noinclude>|<noinclude><!--
#Check for existence of Template: Country data foo before invoking it
--></noinclude>{{safesubst<noinclude />:#ifexist: Template: Country data {{{1|}}}<noinclude><!--
--></noinclude>|<noinclude><!--
# It exists, so proceed
--></noinclude>{{country data {{{1|}}}|flagicon/core|variant={{{variant|{{{2|}}}}}}|size={{{size|}}}}}<noinclude><!--
--></noinclude>|<noinclude><!--
# It doesn't exist, so do nothing
--></noinclude>}}<noinclude><!--
--></noinclude>|<noinclude><!--
# DEFAULT call Template: Country data {{{1|}}}
# with no prior checks
--></noinclude>{{country data {{{1|}}}|flagicon/core|variant={{{variant|{{{2|}}}}}}|size={{{size|}}}}}<noinclude><!--
# Track use where "Template:Country data Foo" does not exist
--></noinclude>{{safesubst<noinclude />:#ifexist: Template:Country data {{{1|}}}||{{safesubst<noinclude />:namespace detect showall
| 1 =
| 2 = [[Category:Flagicons with missing country data templates]]
| user = 1
| talk = 1
| other = 2
}}}}<noinclude><!--
--></noinclude>}}</includeonly>{{safesubst<noinclude />:#invoke:Check for unknown parameters|check|unknown={{main other|[[Category:Pages using flagicon template with unknown parameters|_VALUE_{{PAGENAME}}]]}}|preview=Page using [[Template:Flagicon]] with unknown parameter "_VALUE_"|ignoreblank=y| 1 | 2 | noredlink | size | variant }}<noinclude>
{{Documentation}}
</noinclude>
4ba00e607bb28194908c631e424736dd64374684
Template:Country data Lithuania
10
277
560
2021-04-10T12:19:16Z
[[w>Maiō T.
0
removing unnecessary link alias (basketball)
wikitext
text/x-wiki
{{ {{{1<noinclude>|country showdata</noinclude>}}}
| alias = Lithuania
| flag alias = Flag of Lithuania.svg
| flag alias-1918 = Flag of Lithuania 1918-1940.svg
| flag alias-1988 = Flag of Lithuania (1988-2004).svg
| flag alias-naval = Naval Ensign of Lithuania.svg
| link alias-naval = Lithuanian Naval Force
| flag alias-military=Flag of the Lithuanian Armed Forces.png
| link alias-military=Lithuanian Armed Forces
| flag alias-army = Flag of the Lithuanian Army.svg
| link alias-army = Lithuanian Land Force
| flag alias-navy=Flag of Lithuania (state).svg
| link alias-navy = Lithuanian Naval Force
| flag alias-air force=Air Force Ensign of Lithuania.svg
| link alias-air force=Lithuanian Air Force
| size = {{{size|}}}
| name = {{{name|}}}
| altlink = {{{altlink|}}}
| altvar = {{{altvar|}}}
| variant = {{{variant|}}}
<noinclude>
| var1 = 1918
| var2 = 1988
| redir1 = LTU
| related1 = Lithuanian SSR
</noinclude>
}}
ff73a63b7cb85165f1f72854a062d92b4a488078
Template:Country data Finland
10
271
548
2021-05-07T07:41:42Z
[[w>Skjoldbro
0
air force
wikitext
text/x-wiki
{{ {{{1<noinclude>|country showdata</noinclude>}}}
| alias = Finland
| flag alias = Flag of Finland.svg
| flag alias-grand duchy = Flag of Russia.svg
| flag alias-1809 = Flag of Russia.svg
| flag alias-1917 = Flag of Finland 1918 (state).svg
| flag alias-1918 = Flag of Finland (1918-1920).svg
| flag alias-1920 = Flag of Finland.svg
| flag alias-state = Flag of Finland (state).svg
| flag alias-state-1918 = Flag of Finland 1918-1920 (State).svg
| flag alias-state-1920 = Flag of Finland 1920-1978 (State).svg
| flag alias-naval = Military Flag of Finland.svg
| border-naval =
| flag alias-naval-1918 = Flag of Finland 1918-1920 (Military).svg
| border-naval-1918 =
| flag alias-naval-1920 = Flag of Finland 1920-1978 (Military).svg
| border-naval-1920 =
| link alias-naval = Finnish Navy
| flag alias-navy = Naval Jack of Finland.svg
| link alias-navy = Finnish Navy
| link alias-air force = Finnish Air Force
| link alias-army = Finnish Army
| size = {{{size|}}}
| name = {{{name|}}}
| altlink = {{{altlink|}}}
| variant = {{{variant|}}}
<noinclude>
| var1 = grand duchy
| var2 = 1809
| var3 = 1917
| var4 = 1918
| var5 = 1920
| var6 = state
| var7 = state-1918
| var8 = state-1920
| var9 = naval-1918
| var10 = naval-1920
| redir1 = FIN
| related1 = Åland
</noinclude>
}}
2b032fd45283601b72bcda96d62ac73a3218f5ec
Template:Category link with count
10
75
154
2021-06-11T18:13:44Z
[[w>GKFX
0
Support wider range of (valid) input format
wikitext
text/x-wiki
[[:Category:{{#invoke:string|replace|1={{{1}}}|2=^:?[Cc]ategory:|3=|plain=false}}|<!--
-->{{#if:{{{name|}}}|{{{name}}}|Category:{{#invoke:string|replace|1={{{1}}}|2=^:?[Cc]ategory:|3=|plain=false}}}}<!--
-->]] ({{PAGESINCATEGORY:{{#invoke:string|replace|1={{{1}}}|2=^:?[Cc]ategory:|3=|plain=false}}|{{{2|all}}}}})<noinclude>
{{Documentation}}
</noinclude>
f93f1540b8c157703bd6d24ae35c35bef745981d
Template:Spaced en dash
10
1030
2121
2021-06-13T13:09:03Z
[[]]>Plastikspork
0
[[Wikipedia:Templates for discussion/Log/2021 June 5#Template:Spaced en dash]] closed as keep ([[WP:XFDC#4.0.12|XFDcloser]])
wikitext
text/x-wiki
– <noinclude>
{{documentation}}
<!-- Add categories and interwikis to the /doc subpage, not here! -->
</noinclude>
235afe8e7aca71d984c1bba5d8c96db414594b53
Template:Campaignbox
10
1048
2157
2021-06-14T01:38:04Z
[[]]>Plastikspork
0
Undid revision 1028444717 by [[Special:Contributions/Mathglot|Mathglot]] ([[User talk:Mathglot|talk]]) It's already there!
wikitext
text/x-wiki
<includeonly>{{Military navigation
|name = {{#if:{{{raw_name|}}} |{{{raw_name|}}} |{{#if:{{{title|}}} |{{{name|}}} |}} }}
|state = {{{state|}}}
|border = {{{border|}}}
|title = <span style="line-height:1.6em">{{#if:{{{title|}}}|{{{title}}}|{{{name}}}}}</span>
|bodyclass = {{{bodyclass|}}}
|listclass = {{{listclass|}}}
|list1 = {{{battles|}}}
|below = {{{notes|}}}
}}{{#ifeq:{{NAMESPACE}}|Template|[[Category:Campaignbox templates]]}}</includeonly><noinclude>
{{documentation}}
</noinclude>
bd5acf07aa1526d63d10975ff20fe9d70de2f838
Template:Navbox
10
337
705
2021-06-26T18:05:09Z
[[]]>Trialpears
0
Remove TfD notice as it wouldn't involve any changes to this template.
wikitext
text/x-wiki
<includeonly>{{#invoke:Navbox|navbox}}</includeonly><noinclude>
{{Documentation}}
</noinclude>
fe9b964401f895918ee4fe078678f1722a3c41ec
Template:Tracks and uses Wikidata
10
311
628
2021-06-30T13:54:54Z
[[w>ExE Boss
0
Use [[Module:Uses Wikidata]]
wikitext
text/x-wiki
<onlyinclude><includeonly>{{sister project
|position = {{{position|}}}
|image = [[File:Wikidata-logo-without-paddings.svg|30px|class=noviewer|alt=|link=]]
|text = This {{module other|module|template}} [[:Category:{{{cat|Wikidata tracking categories}}}|tracks]] and uses<!--
--> {{#if:{{{section|}}} | one or more [[Wikidata]] properties; see [[#{{{section}}}|§ {{{section}}}]] for details.<!--
--> | [[Wikidata]] propert{{#if:{{{2|}}}|ies|y}}: {{#invoke:Uses Wikidata|tuProperty}} }}
}}{{#switch:{{SUBPAGENAME}}|sandbox|testcases|doc=<!--nocat-->|#default={{#ifeq:{{PAGENAME}}|Uses Wikidata|<!--
-->|{{module other|[[Category:Modules using data from Wikidata]] [[Category:Modules tracking Wikidata]]<!--
-->|{{template other|[[Category:Templates using data from Wikidata]] [[Category:Templates tracking Wikidata]]}} }}
}}
}}</includeonly></onlyinclude>
{{Documentation}}
a14be63ad2ca80e80789fd88e86e1340f7e5ef00
Module:Hatnote/styles.css
828
317
677
2021-07-12T19:22:27Z
[[]]>Izno
0
per my talk page
sanitized-css
text/css
/* {{pp|small=y}} */
.hatnote {
font-style: italic;
}
/* Limit structure CSS to divs because of [[Module:Hatnote inline]] */
div.hatnote {
/* @noflip */
padding-left: 1.6em;
margin-bottom: 0.5em;
}
.hatnote i {
font-style: normal;
}
/* The templatestyles element inserts a link element before hatnotes.
* TODO: Remove link if/when WMF resolves T200206 */
.hatnote + link + .hatnote {
margin-top: -0.5em;
}
44680ffd6e888866df2cdfa0341af9c7b97da94c
Template:Region history sidebar title
10
1019
2093
2021-07-21T16:49:34Z
[[]]>Goszei
0
wikitext
text/x-wiki
<includeonly><div class="sidebar-pretitle" style="margin: -0.2em 0; font-size:69%; font-weight:normal; {{{pretitlestyle|}}}">Part of [[:Category:{{{category|History of {{#if:{{{series|}}}|{{{series}}}|{{{region|{{{country}}}}}}}}}}}|a series]] on the</div></th>
</tr><tr>
<th class="sidebar-title-with-pretitle {{{titleclass|{{{aboveclass|}}}}}}" style="background: none; {{{titlestyle|{{{abovestyle|}}}}}}">{{#if:{{{linkoverride|}}} |{{{linkoverride}}} |[[History of {{{region|{{{country}}}}}}|History of <span class="fn org label">{{{region|{{{country}}}}}}</span>]]}}</th>
</tr>{{#if:{{{image|}}}
|<tr><td style="padding-bottom: 0.4em; border-bottom: {{{separator-width|1}}}px solid #ccc;{{{imagestyle|}}}">{{{image|}}}</td></tr>
}}</includeonly><noinclude>
{{Documentation}}
</noinclude>
082fbde850ef1f258f3cb44ed2b040e04c52d394
Template:Infobox country/formernext
10
328
685
2021-08-20T02:01:15Z
[[]]>Goszei
0
ensure proper display on mobile
wikitext
text/x-wiki
{| style="width:95%; background: transparent; text-align:center; margin:0 auto; display:inline-table;"
|-
| style="text-align:center; border:0; padding-bottom:0"|<div id="before-after"></div> {{#if:{{{p1|}}}|'''Preceded by'''}} || style="text-align:center;border:0; padding-bottom:0;"| {{#if:{{{s1|}}}|'''Succeeded by'''}}
|-
| style="vertical-align:top; text-align:center; border:0;"| {{#if:{{{p1|}}} | <!--start subtable:-->{{{!}} style="width:100%; background: transparent; text-align:center; margin:0 auto; border:0;"
{{!}}-
{{!}}style="border:0; padding:0; vertical-align:middle;"{{!}} {{#if:{{{flag_p1|}}}|[[File:{{{flag_p1}}}|20px{{#ifeq:{{{border_p1}}}|no||{{!}}border}}|link=|alt=]]|{{#if:{{{image_p1|}}}|{{{image_p1}}}|[[File:Blank.png|22px|link=|alt=]]}}}}
{{!}}style="border:0; padding:0; vertical-align:middle; text-align:left;"{{!}} [[{{{p1}}}]]
{{!}}-
{{#if:{{{p2|}}} |
{{!}}style="border:0; padding:0; vertical-align:middle;"{{!}} {{#if:{{{flag_p2|}}}|[[File:{{{flag_p2}}}|20px{{#ifeq:{{{border_p2}}}|no||{{!}}border}}|link=|alt=]]|{{#if:{{{image_p2|}}}|{{{image_p2}}}|[[File:Blank.png|22px|link=|alt=]]}}}}
{{!}}style="border:0; padding:0; vertical-align:middle; text-align:left;"{{!}} [[{{{p2}}}]]}}
{{!}}-
{{#if:{{{p3|}}} |
{{!}}style="border:0; padding:0; vertical-align:middle;"{{!}} {{#if:{{{flag_p3|}}}|[[File:{{{flag_p3}}}|20px{{#ifeq:{{{border_p3}}}|no||{{!}}border}}|link=|alt=]]|{{#if:{{{image_p3|}}}|{{{image_p3}}}|[[File:Blank.png|22px|link=|alt=]]}}}}
{{!}}style="border:0; padding:0; vertical-align:middle; text-align:left;"{{!}} [[{{{p3}}}]]}}
{{!}}-
{{#if:{{{p4|}}} |
{{!}}style="border:0; padding:0; vertical-align:middle;"{{!}} {{#if:{{{flag_p4|}}}|[[File:{{{flag_p4}}}|20px{{#ifeq:{{{border_p4}}}|no||{{!}}border}}|link=|alt=]]|{{#if:{{{image_p4|}}}|{{{image_p4}}}|[[File:Blank.png|22px|link=|alt=]]}}}}
{{!}}style="border:0; padding:0; vertical-align:middle; text-align:left;"{{!}} [[{{{p4}}}]]}}
{{!}}-
{{#if:{{{p5|}}} |
{{!}}style="border:0; padding:0; vertical-align:middle;"{{!}} {{#if:{{{flag_p5|}}}|[[File:{{{flag_p5}}}|20px{{#ifeq:{{{border_p5}}}|no||{{!}}border}}|link=|alt=]]|{{#if:{{{image_p5|}}}|{{{image_p5}}}|[[File:Blank.png|22px|link=|alt=]]}}}}
{{!}}style="border:0; padding:0; vertical-align:middle; text-align:left;"{{!}} [[{{{p5}}}]]}}
{{!}}-
{{#if:{{{p6|}}} |
{{!}}style="border:0; padding:0; vertical-align:middle;"{{!}} {{#if:{{{flag_p6|}}}|[[File:{{{flag_p6}}}|20px{{#ifeq:{{{border_p6}}}|no||{{!}}border}}|link=|alt=]]|{{#if:{{{image_p6|}}}|{{{image_p6}}}|[[File:Blank.png|22px|link=|alt=]]}}}}
{{!}}style="border:0; padding:0; vertical-align:middle; text-align:left;"{{!}} [[{{{p6}}}]]}}
{{!}}-
{{#if:{{{p7|}}} |
{{!}}style="border:0; padding:0; vertical-align:middle;"{{!}} {{#if:{{{flag_p7|}}}|[[File:{{{flag_p7}}}|20px{{#ifeq:{{{border_p7}}}|no||{{!}}border}}|link=|alt=]]|{{#if:{{{image_p7|}}}|{{{image_p7}}}|[[File:Blank.png|22px|link=|alt=]]}}}}
{{!}}style="border:0; padding:0; vertical-align:middle; text-align:left;"{{!}} [[{{{p7}}}]]}}
{{!}}-
{{#if:{{{p8|}}} |
{{!}}style="border:0; padding:0; vertical-align:middle;"{{!}} {{#if:{{{flag_p8|}}}|[[File:{{{flag_p8}}}|20px{{#ifeq:{{{border_p8}}}|no||{{!}}border}}|link=|alt=]]|{{#if:{{{image_p8|}}}|{{{image_p8}}}|[[File:Blank.png|22px|link=|alt=]]}}}}
{{!}}style="border:0; padding:0; vertical-align:middle; text-align:left;"{{!}} [[{{{p8}}}]]}}
{{!}}-
{{#if:{{{p9|}}} |
{{!}}style="border:0; padding:0; vertical-align:middle;"{{!}} {{#if:{{{flag_p9|}}}|[[File:{{{flag_p9}}}|20px{{#ifeq:{{{border_p9}}}|no||{{!}}border}}|link=|alt=]]|{{#if:{{{image_p9|}}}|{{{image_p9}}}|[[File:Blank.png|22px|link=|alt=]]}}}}
{{!}}style="border:0; padding:0; vertical-align:middle; text-align:left;"{{!}} [[{{{p9}}}]]}}
{{!}}-
{{#if:{{{p10|}}} |
{{!}}style="border:0; padding:0; vertical-align:middle;"{{!}} {{#if:{{{flag_p10|}}}|[[File:{{{flag_p10}}}|20px{{#ifeq:{{{border_p10}}}|no||{{!}}border}}|link=|alt=]]|{{#if:{{{image_p10|}}}|{{{image_p10}}}|[[File:Blank.png|22px|link=|alt=]]}}}}
{{!}}style="border:0; padding:0; vertical-align:middle; text-align:left;"{{!}} [[{{{p10}}}]]}}
{{!}}-
{{#if:{{{p11|}}} |
{{!}}style="border:0; padding:0; vertical-align:middle;"{{!}} {{#if:{{{flag_p11|}}}|[[File:{{{flag_p11}}}|20px{{#ifeq:{{{border_p11}}}|no||{{!}}border}}|link=|alt=]]|{{#if:{{{image_p11|}}}|{{{image_p11}}}|[[File:Blank.png|22px|link=|alt=]]}}}}
{{!}}style="border:0; padding:0; vertical-align:middle; text-align:left;"{{!}} [[{{{p11}}}]]}}
{{!}}-
{{#if:{{{p12|}}} |
{{!}}style="border:0; padding:0; vertical-align:middle;"{{!}} {{#if:{{{flag_p12|}}}|[[File:{{{flag_p12}}}|20px{{#ifeq:{{{border_p12}}}|no||{{!}}border}}|link=|alt=]]|{{#if:{{{image_p12|}}}|{{{image_p12}}}|[[File:Blank.png|22px|link=|alt=]]}}}}
{{!}}style="border:0; padding:0; vertical-align:middle; text-align:left;"{{!}} [[{{{p12}}}]]}}
{{!}}-
{{#if:{{{p13|}}} |
{{!}}style="border:0; padding:0; vertical-align:middle;"{{!}} {{#if:{{{flag_p13|}}}|[[File:{{{flag_p13}}}|20px{{#ifeq:{{{border_p13}}}|no||{{!}}border}}|link=|alt=]]|{{#if:{{{image_p13|}}}|{{{image_p13}}}|[[File:Blank.png|22px|link=|alt=]]}}}}
{{!}}style="border:0; padding:0; vertical-align:middle; text-align:left;"{{!}} [[{{{p13}}}]]}}
{{!}}-
{{#if:{{{p14|}}} |
{{!}}style="border:0; padding:0; vertical-align:middle;"{{!}} {{#if:{{{flag_p14|}}}|[[File:{{{flag_p14}}}|20px{{#ifeq:{{{border_p14}}}|no||{{!}}border}}|link=|alt=]]|{{#if:{{{image_p14|}}}|{{{image_p14}}}|[[File:Blank.png|22px|link=|alt=]]}}}}
{{!}}style="border:0; padding:0; vertical-align:middle; text-align:left;"{{!}} [[{{{p14}}}]]}}
{{!}}-
{{#if:{{{p15|}}} |
{{!}}style="border:0; padding:0; vertical-align:middle;"{{!}} {{#if:{{{flag_p15|}}}|[[File:{{{flag_p15}}}|20px{{#ifeq:{{{border_p15}}}|no||{{!}}border}}|link=|alt=]]|{{#if:{{{image_p15|}}}|{{{image_p15}}}|[[File:Blank.png|22px|link=|alt=]]}}}}
{{!}}style="border:0; padding:0; vertical-align:middle; text-align:left;"{{!}} [[{{{p15}}}]]}}
{{!}}-
{{#if:{{{p16|}}} |
{{!}}style="border:0; padding:0; vertical-align:middle;"{{!}} {{#if:{{{flag_p16|}}}|[[File:{{{flag_p16}}}|20px{{#ifeq:{{{border_p16}}}|no||{{!}}border}}|link=|alt=]]|{{#if:{{{image_p16|}}}|{{{image_p16}}}|[[File:Blank.png|22px|link=|alt=]]}}}}
{{!}}style="border:0; padding:0; vertical-align:middle; text-align:left;"{{!}} [[{{{p16}}}]]}}
{{!}}-
{{#if:{{{p17|}}} |
{{!}}style="border:0; padding:0; vertical-align:middle;"{{!}} {{#if:{{{flag_p17|}}}|[[File:{{{flag_p17}}}|20px{{#ifeq:{{{border_p17}}}|no||{{!}}border}}|link=|alt=]]|{{#if:{{{image_p17|}}}|{{{image_p17}}}|[[File:Blank.png|22px|link=|alt=]]}}}}
{{!}}style="border:0; padding:0; vertical-align:middle; text-align:left;"{{!}} [[{{{p17}}}]]}}
{{!}}-
{{#if:{{{p18|}}} |
{{!}}style="border:0; padding:0; vertical-align:middle;"{{!}} {{#if:{{{flag_p18|}}}|[[File:{{{flag_p18}}}|20px{{#ifeq:{{{border_p18}}}|no||{{!}}border}}|link=|alt=]]|{{#if:{{{image_p18|}}}|{{{image_p18}}}|[[File:Blank.png|22px|link=|alt=]]}}}}
{{!}}style="border:0; padding:0; vertical-align:middle; text-align:left;"{{!}} [[{{{p18}}}]]}}
{{!}}-
{{#if:{{{p19|}}} |
{{!}}style="border:0; padding:0; vertical-align:middle;"{{!}} {{#if:{{{flag_p19|}}}|[[File:{{{flag_p19}}}|20px{{#ifeq:{{{border_p19}}}|no||{{!}}border}}|link=|alt=]]|{{#if:{{{image_p19|}}}|{{{image_p19}}}|[[File:Blank.png|22px|link=|alt=]]}}}}
{{!}}style="border:0; padding:0; vertical-align:middle; text-align:left;"{{!}} [[{{{p19}}}]]}}
{{!}}-
{{#if:{{{p20|}}} |
{{!}}style="border:0; padding:0; vertical-align:middle;"{{!}} {{#if:{{{flag_p20|}}}|[[File:{{{flag_p20}}}|20px{{#ifeq:{{{border_p20}}}|no||{{!}}border}}|link=|alt=]]|{{#if:{{{image_p20|}}}|{{{image_p20}}}|[[File:Blank.png|22px|link=|alt=]]}}}}
{{!}}style="border:0; padding:0; vertical-align:middle; text-align:left;"{{!}} [[{{{p20}}}]]}}
{{!}}-
{{#if:{{{p21|}}} |
{{!}}style="border:0; padding:0; vertical-align:middle;"{{!}} {{#if:{{{flag_p21|}}}|[[File:{{{flag_p21}}}|20px{{#ifeq:{{{border_p21}}}|no||{{!}}border}}|link=|alt=]]|{{#if:{{{image_p21|}}}|{{{image_p21}}}|[[File:Blank.png|22px|link=|alt=]]}}}}
{{!}}style="border:0; padding:0; vertical-align:middle; text-align:left;"{{!}} [[{{{p21}}}]]}}
<!--end subtable:-->
{{!}}}
}}
| style="vertical-align:top; text-align:center;border:0;"| {{#if:{{{s1|}}} | <!--start subtable:-->{{{!}} style="width:92%; background:transparent; text-align:center; margin:0 auto; border:0;"
{{!}}-
{{!}}style="border:0; padding:0; vertical-align:middle; text-align:right;"{{!}} [[{{{s1}}}]]
{{!}}style="border:0; padding:0; vertical-align:middle;"{{!}} {{#if:{{{flag_s1|}}}|[[File:{{{flag_s1}}}|20px{{#ifeq:{{{border_s1}}}|no||{{!}}border}}|link=|alt=]]|{{#if:{{{image_s1|}}}|{{{image_s1}}}|[[File:Blank.png|22px|link=|alt=]]}}}}
{{!}}-
{{#if:{{{s2|}}} |
{{!}}style="border:0; padding:0; vertical-align:middle; text-align:right;"{{!}} [[{{{s2}}}]]
{{!}}style="border:0; padding:0; vertical-align:middle;"{{!}} {{#if:{{{flag_s2|}}}|[[File:{{{flag_s2}}}|20px{{#ifeq:{{{border_s2}}}|no||{{!}}border}}|link=|alt=]]|{{#if:{{{image_s2|}}}|{{{image_s2}}}|[[File:Blank.png|22px|link=|alt=]]}}}}}}
{{!}}-
{{#if:{{{s3|}}} |
{{!}}style="border:0; padding:0; vertical-align:middle; text-align:right;"{{!}} [[{{{s3}}}]]
{{!}}style="border:0; padding:0; vertical-align:middle;"{{!}} {{#if:{{{flag_s3|}}}|[[File:{{{flag_s3}}}|20px{{#ifeq:{{{border_s3}}}|no||{{!}}border}}|link=|alt=]]|{{#if:{{{image_s3|}}}|{{{image_s3}}}|[[File:Blank.png|22px|link=|alt=]]}}}}}}
{{!}}-
{{#if:{{{s4|}}} |
{{!}}style="border:0; padding:0; vertical-align:middle; text-align:right;"{{!}} [[{{{s4}}}]]
{{!}}style="border:0; padding:0; vertical-align:middle;"{{!}} {{#if:{{{flag_s4|}}}|[[File:{{{flag_s4}}}|20px{{#ifeq:{{{border_s4}}}|no||{{!}}border}}|link=|alt=]]|{{#if:{{{image_s4|}}}|{{{image_s4}}}|[[File:Blank.png|22px|link=|alt=]]}}}}}}
{{!}}-
{{#if:{{{s5|}}} |
{{!}}style="border:0; padding:0; vertical-align:middle; text-align:right;"{{!}} [[{{{s5}}}]]
{{!}}style="border:0; padding:0; vertical-align:middle;"{{!}} {{#if:{{{flag_s5|}}}|[[File:{{{flag_s5}}}|20px{{#ifeq:{{{border_s5}}}|no||{{!}}border}}|link=|alt=]]|{{#if:{{{image_s5|}}}|{{{image_s5}}}|[[File:Blank.png|22px|link=|alt=]]}}}}}}
{{!}}-
{{#if:{{{s6|}}} |
{{!}}style="border:0; padding:0; vertical-align:middle; text-align:right;"{{!}} [[{{{s6}}}]]
{{!}}style="border:0; padding:0; vertical-align:middle;"{{!}} {{#if:{{{flag_s6|}}}|[[File:{{{flag_s6}}}|20px{{#ifeq:{{{border_s6}}}|no||{{!}}border}}|link=|alt=]]|{{#if:{{{image_s6|}}}|{{{image_s6}}}|[[File:Blank.png|22px|link=|alt=]]}}}}}}
{{!}}-
{{#if:{{{s7|}}} |
{{!}}style="border:0; padding:0; vertical-align:middle; text-align:right;"{{!}} [[{{{s7}}}]]
{{!}}style="border:0; padding:0; vertical-align:middle;"{{!}} {{#if:{{{flag_s7|}}}|[[File:{{{flag_s7}}}|20px{{#ifeq:{{{border_s7}}}|no||{{!}}border}}|link=|alt=]]|{{#if:{{{image_s7|}}}|{{{image_s7}}}|[[File:Blank.png|22px|link=|alt=]]}}}}}}
{{!}}-
{{#if:{{{s8|}}} |
{{!}}style="border:0; padding:0; vertical-align:middle; text-align:right;"{{!}} [[{{{s8}}}]]
{{!}}style="border:0; padding:0; vertical-align:middle;"{{!}} {{#if:{{{flag_s8|}}}|[[File:{{{flag_s8}}}|20px{{#ifeq:{{{border_s8}}}|no||{{!}}border}}|link=|alt=]]|{{#if:{{{image_s8|}}}|{{{image_s8}}}|[[File:Blank.png|22px|link=|alt=]]}}}}}}
{{!}}-
{{#if:{{{s9|}}} |
{{!}}style="border:0; padding:0; vertical-align:middle; text-align:right;"{{!}} [[{{{s9}}}]]
{{!}}style="border:0; padding:0; vertical-align:middle;"{{!}} {{#if:{{{flag_s9|}}}|[[File:{{{flag_s9}}}|20px{{#ifeq:{{{border_s9}}}|no||{{!}}border}}|link=|alt=]]|{{#if:{{{image_s9|}}}|{{{image_s9}}}|[[File:Blank.png|22px|link=|alt=]]}}}}}}
{{!}}-
{{#if:{{{s10|}}} |
{{!}}style="border:0; padding:0; vertical-align:middle; text-align:right;"{{!}} [[{{{s10}}}]]
{{!}}style="border:0; padding:0; vertical-align:middle;"{{!}} {{#if:{{{flag_s10|}}}|[[File:{{{flag_s10}}}|20px{{#ifeq:{{{border_s10}}}|no||{{!}}border}}|link=|alt=]]|{{#if:{{{image_s10|}}}|{{{image_s10}}}|[[File:Blank.png|22px|link=|alt=]]}}}}}}
{{!}}-
{{#if:{{{s11|}}} |
{{!}}style="border:0; padding:0; vertical-align:middle; text-align:right;"{{!}} [[{{{s11}}}]]
{{!}}style="border:0; padding:0; vertical-align:middle;"{{!}} {{#if:{{{flag_s11|}}}|[[File:{{{flag_s11}}}|20px{{#ifeq:{{{border_s11}}}|no||{{!}}border}}|link=|alt=]]|{{#if:{{{image_s11|}}}|{{{image_s11}}}|[[File:Blank.png|22px|link=|alt=]]}}}}}}
{{!}}-
{{#if:{{{s12|}}} |
{{!}}style="border:0; padding:0; vertical-align:middle; text-align:right;"{{!}} [[{{{s12}}}]]
{{!}}style="border:0; padding:0; vertical-align:middle;"{{!}} {{#if:{{{flag_s12|}}}|[[File:{{{flag_s12}}}|20px{{#ifeq:{{{border_s12}}}|no||{{!}}border}}|link=|alt=]]|{{#if:{{{image_s12|}}}|{{{image_s12}}}|[[File:Blank.png|22px|link=|alt=]]}}}}}}
{{!}}-
{{#if:{{{s13|}}} |
{{!}}style="border:0; padding:0; vertical-align:middle; text-align:right;"{{!}} [[{{{s13}}}]]
{{!}}style="border:0; padding:0; vertical-align:middle;"{{!}} {{#if:{{{flag_s13|}}}|[[File:{{{flag_s13}}}|20px{{#ifeq:{{{border_s13}}}|no||{{!}}border}}|link=|alt=]]|{{#if:{{{image_s13|}}}|{{{image_s13}}}|[[File:Blank.png|22px|link=|alt=]]}}}}}}
{{!}}-
{{#if:{{{s14|}}} |
{{!}}style="border:0; padding:0; vertical-align:middle; text-align:right;"{{!}} [[{{{s14}}}]]
{{!}}style="border:0; padding:0; vertical-align:middle;"{{!}} {{#if:{{{flag_s14|}}}|[[File:{{{flag_s14}}}|20px{{#ifeq:{{{border_s14}}}|no||{{!}}border}}|link=|alt=]]|{{#if:{{{image_s14|}}}|{{{image_s14}}}|[[File:Blank.png|22px|link=|alt=]]}}}}}}
{{!}}-
{{#if:{{{s15|}}} |
{{!}}style="border:0; padding:0; vertical-align:middle; text-align:right;"{{!}} [[{{{s15}}}]]
{{!}}style="border:0; padding:0; vertical-align:middle;"{{!}} {{#if:{{{flag_s15|}}}|[[File:{{{flag_s15}}}|20px{{#ifeq:{{{border_s15}}}|no||{{!}}border}}|link=|alt=]]|{{#if:{{{image_s15|}}}|{{{image_s15}}}|[[File:Blank.png|22px|link=|alt=]]}}}}}}
{{!}}-
{{#if:{{{s16|}}} |
{{!}}style="border:0; padding:0; vertical-align:middle; text-align:right;"{{!}} [[{{{s16}}}]]
{{!}}style="border:0; padding:0; vertical-align:middle;"{{!}} {{#if:{{{flag_s16|}}}|[[File:{{{flag_s16}}}|20px{{#ifeq:{{{border_s16}}}|no||{{!}}border}}|link=|alt=]]|{{#if:{{{image_s16|}}}|{{{image_s16}}}|[[File:Blank.png|22px|link=|alt=]]}}}}}}
{{!}}-
{{#if:{{{s17|}}} |
{{!}}style="border:0; padding:0; vertical-align:middle; text-align:right;"{{!}} [[{{{s17}}}]]
{{!}}style="border:0; padding:0; vertical-align:middle;"{{!}} {{#if:{{{flag_s17|}}}|[[File:{{{flag_s17}}}|20px{{#ifeq:{{{border_s17}}}|no||{{!}}border}}|link=|alt=]]|{{#if:{{{image_s17|}}}|{{{image_s17}}}|[[File:Blank.png|22px|link=|alt=]]}}}}}}
{{!}}-
{{#if:{{{s18|}}} |
{{!}}style="border:0; padding:0; vertical-align:middle; text-align:right;"{{!}} [[{{{s18}}}]]
{{!}}style="border:0; padding:0; vertical-align:middle;"{{!}} {{#if:{{{flag_s18|}}}|[[File:{{{flag_s18}}}|20px{{#ifeq:{{{border_s18}}}|no||{{!}}border}}|link=|alt=]]|{{#if:{{{image_s18|}}}|{{{image_s18}}}|[[File:Blank.png|22px|link=|alt=]]}}}}}}
{{!}}-
{{#if:{{{s19|}}} |
{{!}}style="border:0; padding:0; vertical-align:middle; text-align:right;"{{!}} [[{{{s19}}}]]
{{!}}style="border:0; padding:0; vertical-align:middle;"{{!}} {{#if:{{{flag_s19|}}}|[[File:{{{flag_s19}}}|20px{{#ifeq:{{{border_s19}}}|no||{{!}}border}}|link=|alt=]]|{{#if:{{{image_s19|}}}|{{{image_s19}}}|[[File:Blank.png|22px|link=|alt=]]}}}}}}
{{!}}-
{{#if:{{{s20|}}} |
{{!}}style="border:0; padding:0; vertical-align:middle; text-align:right;"{{!}} [[{{{s20}}}]]
{{!}}style="border:0; padding:0; vertical-align:middle;"{{!}} {{#if:{{{flag_s20|}}}|[[File:{{{flag_s20}}}|20px{{#ifeq:{{{border_s20}}}|no||{{!}}border}}|link=|alt=]]|{{#if:{{{image_s20|}}}|{{{image_s20}}}|[[File:Blank.png|22px|link=|alt=]]}}}}}}
{{!}}-
{{#if:{{{s21|}}} |
{{!}}style="border:0; padding:0; vertical-align:middle; text-align:right;"{{!}} [[{{{s21}}}]]
{{!}}style="border:0; padding:0; vertical-align:middle;"{{!}} {{#if:{{{flag_s21|}}}|[[File:{{{flag_s21}}}|20px{{#ifeq:{{{border_s21}}}|no||{{!}}border}}|link=|alt=]]|{{#if:{{{image_s21|}}}|{{{image_s21}}}|[[File:Blank.png|22px|link=|alt=]]}}}}}}
<!--end subtable:-->
<!--end subtable:-->
{{!}}}
}}
<!--end subtable:-->
{{!}}}<noinclude>
{{documentation|content=
This subtemplate is used to simplify the code of {{tl|infobox country}}. It should not be used directly. It can currently handle up to 21 flags.
}}</noinclude>
05a74d48da51cce78e3518579c2af4cd1e699e4a
Template:TemplateData header
10
67
138
2021-08-29T21:32:29Z
[[w>SUM1
0
Added "based" parameter to other transclusion
wikitext
text/x-wiki
<div class="templatedata-header">{{#if:{{{noheader|}}}|<!--
noheader:
-->{{Template parameter usage|based=y}}|<!--
+header:
-->This is the {{#if:{{{nolink|}}}|<!--
+header, nolink TD
-->TemplateData|<!--
+header, +link [[TD]]; DEFAULT:
-->[[Wikipedia:TemplateData|TemplateData]]}}<!--
e.o. #if:nolink; DEFAULT:
--> for this template used by [[mw:Extension:TemplateWizard|TemplateWizard]], [[Wikipedia:VisualEditor|VisualEditor]] and other tools. {{Template parameter usage|based=y}}<!--
e.o. #if:noheader
-->}}
'''TemplateData for {{{1|{{BASEPAGENAME}}}}}'''
</div><includeonly><!--
check parameters
-->{{#invoke:Check for unknown parameters|check
|unknown={{template other|1=[[Category:Pages using TemplateData header with unknown parameters|_VALUE_]]}}
|template=Template:TemplateData header
|1 |nolink |noheader
|preview=<div class="error" style="font-weight:normal">Unknown parameter '_VALUE_' in [[Template:TemplateData header]].</div>
}}<!--
-->{{template other|{{sandbox other||
[[Category:Templates using TemplateData]]
}}}}</includeonly><!--
--><noinclude>{{Documentation}}</noinclude>
ddfbb4ae793846b96d4c06330417fa6ed4da2adc
Template:Infobox country/styles.css
10
327
683
2021-09-09T08:52:58Z
[[]]>Goszei
0
use default
sanitized-css
text/css
/* {{pp|small=y}} */
.ib-country {
border-collapse: collapse;
line-height: 1.2em;
}
/* TODO split definitions to appropriate class names when live from HTML element */
.ib-country td,
.ib-country th {
border-top: 1px solid #a2a9b1;
padding: 0.4em 0.6em 0.4em 0.6em;
}
.ib-country .mergedtoprow .infobox-header,
.ib-country .mergedtoprow .infobox-label,
.ib-country .mergedtoprow .infobox-data,
.ib-country .mergedtoprow .infobox-full-data,
.ib-country .mergedtoprow .infobox-below {
border-top: 1px solid #a2a9b1;
padding: 0.4em 0.6em 0.2em 0.6em;
}
.ib-country .mergedrow .infobox-label,
.ib-country .mergedrow .infobox-data,
.ib-country .mergedrow .infobox-full-data {
border: 0;
padding: 0 0.6em 0.2em 0.6em;
}
.ib-country .mergedbottomrow .infobox-label,
.ib-country .mergedbottomrow .infobox-data,
.ib-country .mergedbottomrow .infobox-full-data {
border-top: 0;
border-bottom: 1px solid #a2a9b1;
padding: 0 0.6em 0.4em 0.6em;
}
.ib-country .infobox-header {
text-align: left;
}
.ib-country .infobox-above {
font-size: 125%;
line-height: 1.2;
}
.ib-country-names {
padding-top: 0.25em;
font-weight: normal;
}
.ib-country-name-style {
display: inline;
}
.ib-country .infobox-image {
padding: 0.5em 0;
}
.ib-country-anthem {
border-top: 1px solid #a2a9b1;
padding-top: 0.5em;
margin-top: 0.5em;
}
.ib-country-map-caption {
position: relative;
top: 0.3em;
}
.ib-country-largest,
.ib-country-lang {
font-weight: normal;
}
.ib-country-ethnic,
.ib-country-religion,
.ib-country-sovereignty {
font-weight: normal;
display: inline;
}
.ib-country-fake-li {
text-indent: -0.9em;
margin-left: 1.2em;
font-weight: normal;
}
.ib-country-fake-li2 {
text-indent: 0.5em;
margin-left: 1em;
font-weight: normal;
}
.ib-country-website {
line-height: 11pt;
}
.ib-country-map-caption3 {
position: relative;
top: 0.3em;
}
.ib-country-fn {
text-align: left;
margin: 0 auto;
}
.ib-country-fn-alpha {
list-style-type: lower-alpha;
margin-left: 1em;
}
.ib-country-fn-num {
margin-left: 1em;
}
3112a323cf9739e86afd52812cd38e196abfae7d
Module:Sidebar/styles.css
828
322
2079
2021-09-20T01:15:45Z
[[]]>Goszei
0
self-rv, it's a little tight
sanitized-css
text/css
/* {{pp-template}} */
/* TODO: Invert width design to be "mobile first" */
.sidebar {
/* TODO: Ask if we should have max-width 22em instead */
width: 22em;
/* @noflip */
float: right;
/* @noflip */
clear: right;
/* @noflip */
margin: 0.5em 0 1em 1em;
background: #f8f9fa;
border: 1px solid #aaa;
padding: 0.2em;
text-align: center;
line-height: 1.4em;
font-size: 88%;
border-collapse: collapse;
/* Timeless has display: none on .nomobile at mobile resolutions, so we
* unhide it with display: table and let precedence and proximity win.
*/
display: table;
}
/* Unfortunately, so does Minerva desktop, except Minerva drops an
* !important on the declaration. So we have to be mean for Minerva users.
* Mobile removes the element entirely with `wgMFRemovableClasses` in
* https://github.com/wikimedia/operations-mediawiki-config/blob/master/
wmf-config/InitialiseSettings.php#L16992
* which is why displaying it categorically with display: table works.
* We don't really want to expose the generic user in the wild on mobile to have
* to deal with sidebars. (Maybe the ones with collapsible lists, so that
* might be an improvement. That is blocked on [[:phab:T111565]].)
*/
body.skin-minerva .sidebar {
display: table !important;
/* also, minerva is way too aggressive about other stylings on tables.
* TODO remove when this template gets moved to a div. plans on talk page.
* We always float right on Minerva because that's a lot of extra CSS
* otherwise. */
float: right !important;
margin: 0.5em 0 1em 1em !important;
}
.sidebar-subgroup {
width: 100%;
margin: 0;
border-spacing: 0;
}
.sidebar-left {
/* @noflip */
float: left;
/* @noflip */
clear: left;
/* @noflip */
margin: 0.5em 1em 1em 0;
}
.sidebar-none {
float: none;
clear: both;
/* @noflip */
margin: 0.5em 1em 1em 0;
}
.sidebar-outer-title {
padding: 0 0.4em 0.2em;
font-size: 125%;
line-height: 1.2em;
font-weight: bold;
}
.sidebar-top-image {
padding: 0.4em;
}
.sidebar-top-caption,
.sidebar-pretitle-with-top-image,
.sidebar-caption {
padding: 0.2em 0.4em 0;
line-height: 1.2em;
}
.sidebar-pretitle {
padding: 0.4em 0.4em 0;
line-height: 1.2em;
}
.sidebar-title,
.sidebar-title-with-pretitle {
padding: 0.2em 0.8em;
font-size: 145%;
line-height: 1.2em;
}
.sidebar-title-with-pretitle {
padding: 0.1em 0.4em;
}
.sidebar-image {
padding: 0.2em 0.4em 0.4em;
}
.sidebar-heading {
padding: 0.1em 0.4em;
}
.sidebar-content {
padding: 0 0.5em 0.4em;
}
.sidebar-content-with-subgroup {
padding: 0.1em 0.4em 0.2em;
}
.sidebar-above,
.sidebar-below {
padding: 0.3em 0.8em;
font-weight: bold;
}
.sidebar-collapse .sidebar-above,
.sidebar-collapse .sidebar-below {
border-top: 1px solid #aaa;
border-bottom: 1px solid #aaa;
}
.sidebar-navbar {
text-align: right;
font-size: 115%;
padding: 0 0.4em 0.4em;
}
.sidebar-list-title {
padding: 0 0.4em;
text-align: left;
font-weight: bold;
line-height: 1.6em;
font-size: 105%;
}
/* centered text with mw-collapsible headers is finicky */
.sidebar-list-title-c {
padding: 0 0.4em;
text-align: center;
margin: 0 3.3em;
}
@media (max-width: 720px) {
/* users have wide latitude to set arbitrary width and margin :(
"Super-specific" selector to prevent overriding this appearance by
lower level sidebars too */
body.mediawiki .sidebar {
width: 100% !important;
clear: both;
float: none !important; /* Remove when we div based; Minerva is dumb */
margin-left: 0 !important;
margin-right: 0 !important;
}
/* TODO: We might consider making all links wrap at small resolutions and then
* only introduce nowrap at higher resolutions. Do when we invert the media
* query.
*/
}
7d621b35a37807a103b59075851fe36201204ceb
Template:Country data Malta
10
279
564
2021-09-25T06:38:18Z
[[w>Paine Ellsworth
0
per edit request on talk page - include unofficial flag variant - 1943
wikitext
text/x-wiki
{{ {{{1<noinclude>|country showdata</noinclude>}}}
| alias = Malta
| flag alias = Flag of Malta.svg
| flag alias-1875 = Flag of Malta (1875–1898).svg
| flag alias-1898 = Flag of Malta (1898–1923).svg
| flag alias-1923 = Flag of Malta (1923–1943).svg
| flag alias-1943 = Flag of Malta (1943–1964).svg
| flag alias-unofficial-1943 = Flag of Malta (1943).svg
| flag alias-colonial = Flag of Malta (1943-1964).svg <!-- deprecated, but in use -->
| flag alias-civil = Civil Ensign of Malta.svg
| link alias-naval = Maritime Squadron of the Armed Forces of Malta
| link alias-navy = Maritime Squadron of the Armed Forces of Malta
| flag alias-navy =Naval Jack of Malta.svg
| flag alias-1814 = 19th Century Flag of Malta.svg
| size = {{{size|}}}
| name = {{{name|}}}
| altlink = {{{altlink|}}}
| variant = {{{variant|}}}
<noinclude>
| var1 = 1875
| var2 = 1898
| var3 = 1923
| var4 = 1943
| var5 = unofficial-1943
| var6 = civil
| var7 = 1814
| redir1 = MLT
| related1 = Sovereign Military Order of Malta
</noinclude>
}}
abdbfec3b581828dc7c870e10ed7e938c73d9857
Module:Unsubst
828
293
592
2021-10-08T18:22:16Z
[[w>Trappist the monk
0
sync from sandbox; see [[Module_talk:Unsubst#template_invocation_name_override|talk]];
Scribunto
text/plain
local checkType = require('libraryUtil').checkType
local p = {}
local BODY_PARAM = '$B'
local specialParams = {
['$params'] = 'parameter list',
['$aliases'] = 'parameter aliases',
['$flags'] = 'flags',
['$B'] = 'template content',
['$template-name'] = 'template invocation name override',
}
function p.main(frame, body)
-- If we are substing, this function returns a template invocation, and if
-- not, it returns the template body. The template body can be specified in
-- the body parameter, or in the template parameter defined in the
-- BODY_PARAM variable. This function can be called from Lua or from
-- #invoke.
-- Return the template body if we aren't substing.
if not mw.isSubsting() then
if body ~= nil then
return body
elseif frame.args[BODY_PARAM] ~= nil then
return frame.args[BODY_PARAM]
else
error(string.format(
"no template content specified (use parameter '%s' from #invoke)",
BODY_PARAM
), 2)
end
end
-- Sanity check for the frame object.
if type(frame) ~= 'table'
or type(frame.getParent) ~= 'function'
or not frame:getParent()
then
error(
"argument #1 to 'main' must be a frame object with a parent " ..
"frame available",
2
)
end
-- Find the invocation name.
local mTemplateInvocation = require('Module:Template invocation')
local name
if frame.args['$template-name'] and '' ~= frame.args['$template-name'] then
name = frame.args['$template-name'] -- override whatever the template name is with this name
else
name = mTemplateInvocation.name(frame:getParent():getTitle())
end
-- Combine passed args with passed defaults
local args = {}
if string.find( ','..(frame.args['$flags'] or '')..',', ',%s*override%s*,' ) then
for k, v in pairs( frame:getParent().args ) do
args[k] = v
end
for k, v in pairs( frame.args ) do
if not specialParams[k] then
if v == '__DATE__' then
v = mw.getContentLanguage():formatDate( 'F Y' )
end
args[k] = v
end
end
else
for k, v in pairs( frame.args ) do
if not specialParams[k] then
if v == '__DATE__' then
v = mw.getContentLanguage():formatDate( 'F Y' )
end
args[k] = v
end
end
for k, v in pairs( frame:getParent().args ) do
args[k] = v
end
end
-- Trim parameters, if not specified otherwise
if not string.find( ','..(frame.args['$flags'] or '')..',', ',%s*keep%-whitespace%s*,' ) then
for k, v in pairs( args ) do args[k] = mw.ustring.match(v, '^%s*(.*)%s*$') or '' end
end
-- Pull information from parameter aliases
local aliases = {}
if frame.args['$aliases'] then
local list = mw.text.split( frame.args['$aliases'], '%s*,%s*' )
for k, v in ipairs( list ) do
local tmp = mw.text.split( v, '%s*>%s*' )
aliases[tonumber(mw.ustring.match(tmp[1], '^[1-9][0-9]*$')) or tmp[1]] = ((tonumber(mw.ustring.match(tmp[2], '^[1-9][0-9]*$'))) or tmp[2])
end
end
for k, v in pairs( aliases ) do
if args[k] and ( not args[v] or args[v] == '' ) then
args[v] = args[k]
end
args[k] = nil
end
-- Remove empty parameters, if specified
if string.find( ','..(frame.args['$flags'] or '')..',', ',%s*remove%-empty%s*,' ) then
local tmp = 0
for k, v in ipairs( args ) do
if v ~= '' or ( args[k+1] and args[k+1] ~= '' ) or ( args[k+2] and args[k+2] ~= '' ) then
tmp = k
else
break
end
end
for k, v in pairs( args ) do
if v == '' then
if not (type(k) == 'number' and k < tmp) then args[k] = nil end
end
end
end
-- Order parameters
if frame.args['$params'] then
local params, tmp = mw.text.split( frame.args['$params'], '%s*,%s*' ), {}
for k, v in ipairs(params) do
v = tonumber(mw.ustring.match(v, '^[1-9][0-9]*$')) or v
if args[v] then tmp[v], args[v] = args[v], nil end
end
for k, v in pairs(args) do tmp[k], args[k] = args[k], nil end
args = tmp
end
return mTemplateInvocation.invocation(name, args)
end
p[''] = p.main -- For backwards compatibility
return p
7f01ffc8aa2ac4a4772f14c12e0b77e384ecabb6
Template:Resize
10
217
440
2021-10-10T18:04:18Z
[[w>WOSlinker
0
add div=yes option
wikitext
text/x-wiki
{{safesubst<noinclude />:#if:{{{2|}}}
|<{{#ifeq:{{{div|}}}|yes|div|span}} style="font-size:{{{1|}}};">{{{2|}}}</{{#ifeq:{{{div|}}}|yes|div|span}}>
|<{{#ifeq:{{{div|}}}|yes|div|span}} style="font-size:90%;">{{{1}}}</{{#ifeq:{{{div|}}}|yes|div|span}}>
}}<noinclude>
{{Documentation}}
<!-- Add categories to the /doc subpage and interwikis in Wikidata, not here! -->
</noinclude>
3df5b1480eb04f48aa1e701ca895121b4cbb4ed3
Template:Module other
10
87
176
2021-10-20T19:50:22Z
[[w>MusikBot II
0
Changed protection settings for "[[Template:Module other]]": [[Wikipedia:High-risk templates|High-risk template or module]]: 3570 transclusions ([[User:MusikBot II/TemplateProtector|more info]]) ([Edit=Require extended confirmed access] (indefinite) [Move=Require extended confirmed access] (indefinite))
wikitext
text/x-wiki
{{#switch:
<!--If no or empty "demospace" parameter then detect namespace-->
{{#if:{{{demospace|}}}
| {{lc: {{{demospace}}} }} <!--Use lower case "demospace"-->
| {{#ifeq:{{NAMESPACE}}|{{ns:Module}}
| module
| other
}}
}}
| module = {{{1|}}}
| other
| #default = {{{2|}}}
}}<!--End switch--><noinclude>
{{documentation}}
<!-- Add categories to the /doc subpage, not here! -->
</noinclude>
503694836c1b07142e63fd35d8be69ec8bb9ffe7
Template:Military navigation
10
1039
2139
2021-10-23T13:20:32Z
[[]]>Andrybak
0
use [[Template:Sandbox other]]
wikitext
text/x-wiki
<includeonly>{{#invoke:Military navigation|main}}</includeonly><noinclude>
{{Documentation|Wikipedia:WikiProject Military history/Military navigation}}
{{Sandbox other||
[[Category:Navigational box wrapper templates]]
[[Category:Military navigational boxes| ]]
}}</noinclude>
10eb2cd55540aab60dd8603c113e21995e9bb545
Module:Suppress categories
828
77
158
2021-10-26T17:25:37Z
[[w>MusikBot II
0
Changed protection settings for "[[Module:Suppress categories]]": [[Wikipedia:High-risk templates|High-risk template or module]]: 2510 transclusions ([[User:MusikBot II/TemplateProtector|more info]]) ([Edit=Require extended confirmed access] (indefinite) [Move=Require extended confirmed access] (indefinite))
Scribunto
text/plain
-- This is a simple module to strip categories from wikitext. It does
-- not support nested links or magic words like __TOC__, etc. Even so,
-- it should still handle most categories.
local p = {}
-- Detects if a category link is valid or not. If it is valid,
-- the function returns the blank string. If not, the input
-- is returned with no changes.
local function processCategory( all, submatch )
local beforePipe = mw.ustring.match( submatch, '^(.-)[%s_]*|[%s_]*.-$' )
beforePipe = beforePipe or submatch
if mw.ustring.match( beforePipe, '[%[%]<>{}%c\n]' ) then
return all
else
return ''
end
end
-- Preprocess the content if we aren't being called from #invoke,
-- and pass it to gsub to remove valid category links.
local function suppress( content, isPreprocessed )
if not isPreprocessed then
content = mw.getCurrentFrame():preprocess( content )
end
content = mw.ustring.gsub(
content,
'(%[%[[%s_]*[cC][aA][tT][eE][gG][oO][rR][yY][%s_]*:[%s_]*(.-)[%s_]*%]%])',
processCategory
)
return content
end
-- Get the content to suppress categories from, and find
-- whether the content has already been preprocessed. (If the
-- module is called from #invoke, it has been preprocessed already.)
function p.main( frame )
local content, isPreprocessed
if frame == mw.getCurrentFrame() then
content = frame:getParent().args[1]
if frame.args[1] then
content = frame.args[1]
end
isPreprocessed = true
else
content = frame
isPreprocessed = false
end
return suppress( content, isPreprocessed )
end
return p
0ec3903841c489357a879434c5dc23c11d182c78
Template:Main other
10
22
48
2021-12-10T16:08:06Z
Xaosflux
6
<!-- Add categories to the /doc subpage; interwikis go to Wikidata, thank you! -->
wikitext
text/x-wiki
{{#switch:
<!--If no or empty "demospace" parameter then detect namespace-->
{{#if:{{{demospace|}}}
| {{lc: {{{demospace}}} }} <!--Use lower case "demospace"-->
| {{#ifeq:{{NAMESPACE}}|{{ns:0}}
| main
| other
}}
}}
| main = {{{1|}}}
| other
| #default = {{{2|}}}
}}<noinclude>
{{documentation}}
<!-- Add categories to the /doc subpage; interwikis go to Wikidata, thank you! -->
</noinclude>
86ad907ffeea3cc545159e00cd1f2d6433946450
Module:Navbox/styles.css
828
343
719
2021-12-21T22:10:10Z
[[]]>Izno
0
remove qualifications on th - this will remove styling from "hand-crafted" navboxes, but there's no other elegant way to deal with it. see talk page
sanitized-css
text/css
/* {{pp|small=y}} */
.navbox {
box-sizing: border-box;
border: 1px solid #a2a9b1;
width: 100%;
clear: both;
font-size: 88%;
text-align: center;
padding: 1px;
margin: 1em auto 0; /* Prevent preceding content from clinging to navboxes */
}
.navbox .navbox {
margin-top: 0; /* No top margin for nested navboxes */
}
.navbox + .navbox, /* TODO: remove first line after transclusions have updated */
.navbox + .navbox-styles + .navbox {
margin-top: -1px; /* Single pixel border between adjacent navboxes */
}
.navbox-inner,
.navbox-subgroup {
width: 100%;
}
.navbox-group,
.navbox-title,
.navbox-abovebelow {
padding: 0.25em 1em;
line-height: 1.5em;
text-align: center;
}
.navbox-group {
white-space: nowrap;
/* @noflip */
text-align: right;
}
.navbox,
.navbox-subgroup {
background-color: #fdfdfd;
}
.navbox-list {
line-height: 1.5em;
border-color: #fdfdfd; /* Must match background color */
}
.navbox-list-with-group {
text-align: left;
border-left-width: 2px;
border-left-style: solid;
}
/* cell spacing for navbox cells */
/* Borders above 2nd, 3rd, etc. rows */
/* TODO: figure out how to replace tr as structure;
* with div structure it should be just a matter of first-child */
tr + tr > .navbox-abovebelow,
tr + tr > .navbox-group,
tr + tr > .navbox-image,
tr + tr > .navbox-list {
border-top: 2px solid #fdfdfd; /* Must match background color */
}
.navbox-title {
background-color: #ccf; /* Level 1 color */
}
.navbox-abovebelow,
.navbox-group,
.navbox-subgroup .navbox-title {
background-color: #ddf; /* Level 2 color */
}
.navbox-subgroup .navbox-group,
.navbox-subgroup .navbox-abovebelow {
background-color: #e6e6ff; /* Level 3 color */
}
.navbox-even {
background-color: #f7f7f7;
}
.navbox-odd {
background-color: transparent;
}
/* TODO: figure out how to remove reliance on td as structure */
.navbox .hlist td dl,
.navbox .hlist td ol,
.navbox .hlist td ul,
.navbox td.hlist dl,
.navbox td.hlist ol,
.navbox td.hlist ul {
padding: 0.125em 0;
}
.navbox .navbar {
display: block;
font-size: 100%;
}
.navbox-title .navbar {
/* @noflip */
float: left;
/* @noflip */
text-align: left;
/* @noflip */
margin-right: 0.5em;
}
e80b0d7a5770e6e105dab832deb6c37a5245ebc6
Module:Hatnote list
828
44
92
2021-12-26T20:05:24Z
[[w>Nihiltres
0
Undid revision 1062166786 by [[Special:Contributions/Matthiaspaul|Matthiaspaul]] ([[User talk:Matthiaspaul|talk]]); should be fixed now, and if not, please ping me with examples as I couldn't reproduce the original error
Scribunto
text/plain
--------------------------------------------------------------------------------
-- Module:Hatnote list --
-- --
-- This module produces and formats lists for use in hatnotes. In particular, --
-- it implements the for-see list, i.e. lists of "For X, see Y" statements, --
-- as used in {{about}}, {{redirect}}, and their variants. Also introduced --
-- are andList & orList helpers for formatting lists with those conjunctions. --
--------------------------------------------------------------------------------
local mArguments --initialize lazily
local mFormatLink = require('Module:Format link')
local mHatnote = require('Module:Hatnote')
local libraryUtil = require('libraryUtil')
local checkType = libraryUtil.checkType
local p = {}
--------------------------------------------------------------------------------
-- List stringification helper functions
--
-- These functions are used for stringifying lists, usually page lists inside
-- the "Y" portion of "For X, see Y" for-see items.
--------------------------------------------------------------------------------
--default options table used across the list stringification functions
local stringifyListDefaultOptions = {
conjunction = "and",
separator = ",",
altSeparator = ";",
space = " ",
formatted = false
}
--Searches display text only
local function searchDisp(haystack, needle)
return string.find(
string.sub(haystack, (string.find(haystack, '|') or 0) + 1), needle
)
end
-- Stringifies a list generically; probably shouldn't be used directly
local function stringifyList(list, options)
-- Type-checks, defaults, and a shortcut
checkType("stringifyList", 1, list, "table")
if #list == 0 then return nil end
checkType("stringifyList", 2, options, "table", true)
options = options or {}
for k, v in pairs(stringifyListDefaultOptions) do
if options[k] == nil then options[k] = v end
end
local s = options.space
-- Format the list if requested
if options.formatted then
list = mFormatLink.formatPages(
{categorizeMissing = mHatnote.missingTargetCat}, list
)
end
-- Set the separator; if any item contains it, use the alternate separator
local separator = options.separator
for k, v in pairs(list) do
if searchDisp(v, separator) then
separator = options.altSeparator
break
end
end
-- Set the conjunction, apply Oxford comma, and force a comma if #1 has "§"
local conjunction = s .. options.conjunction .. s
if #list == 2 and searchDisp(list[1], "§") or #list > 2 then
conjunction = separator .. conjunction
end
-- Return the formatted string
return mw.text.listToText(list, separator .. s, conjunction)
end
--DRY function
function p.conjList (conj, list, fmt)
return stringifyList(list, {conjunction = conj, formatted = fmt})
end
-- Stringifies lists with "and" or "or"
function p.andList (...) return p.conjList("and", ...) end
function p.orList (...) return p.conjList("or", ...) end
--------------------------------------------------------------------------------
-- For see
--
-- Makes a "For X, see [[Y]]." list from raw parameters. Intended for the
-- {{about}} and {{redirect}} templates and their variants.
--------------------------------------------------------------------------------
--default options table used across the forSee family of functions
local forSeeDefaultOptions = {
andKeyword = 'and',
title = mw.title.getCurrentTitle().text,
otherText = 'other uses',
forSeeForm = 'For %s, see %s.',
}
--Collapses duplicate punctuation
local function punctuationCollapse (text)
local replacements = {
["%.%.$"] = ".",
["%?%.$"] = "?",
["%!%.$"] = "!",
["%.%]%]%.$"] = ".]]",
["%?%]%]%.$"] = "?]]",
["%!%]%]%.$"] = "!]]"
}
for k, v in pairs(replacements) do text = string.gsub(text, k, v) end
return text
end
-- Structures arguments into a table for stringification, & options
function p.forSeeArgsToTable (args, from, options)
-- Type-checks and defaults
checkType("forSeeArgsToTable", 1, args, 'table')
checkType("forSeeArgsToTable", 2, from, 'number', true)
from = from or 1
checkType("forSeeArgsToTable", 3, options, 'table', true)
options = options or {}
for k, v in pairs(forSeeDefaultOptions) do
if options[k] == nil then options[k] = v end
end
-- maxArg's gotten manually because getArgs() and table.maxn aren't friends
local maxArg = 0
for k, v in pairs(args) do
if type(k) == 'number' and k > maxArg then maxArg = k end
end
-- Structure the data out from the parameter list:
-- * forTable is the wrapper table, with forRow rows
-- * Rows are tables of a "use" string & a "pages" table of pagename strings
-- * Blanks are left empty for defaulting elsewhere, but can terminate list
local forTable = {}
local i = from
local terminated = false
-- If there is extra text, and no arguments are given, give nil value
-- to not produce default of "For other uses, see foo (disambiguation)"
if options.extratext and i > maxArg then return nil end
-- Loop to generate rows
repeat
-- New empty row
local forRow = {}
-- On blank use, assume list's ended & break at end of this loop
forRow.use = args[i]
if not args[i] then terminated = true end
-- New empty list of pages
forRow.pages = {}
-- Insert first pages item if present
table.insert(forRow.pages, args[i + 1])
-- If the param after next is "and", do inner loop to collect params
-- until the "and"'s stop. Blanks are ignored: "1|and||and|3" → {1, 3}
while args[i + 2] == options.andKeyword do
if args[i + 3] then
table.insert(forRow.pages, args[i + 3])
end
-- Increment to next "and"
i = i + 2
end
-- Increment to next use
i = i + 2
-- Append the row
table.insert(forTable, forRow)
until terminated or i > maxArg
return forTable
end
-- Stringifies a table as formatted by forSeeArgsToTable
function p.forSeeTableToString (forSeeTable, options)
-- Type-checks and defaults
checkType("forSeeTableToString", 1, forSeeTable, "table", true)
checkType("forSeeTableToString", 2, options, "table", true)
options = options or {}
for k, v in pairs(forSeeDefaultOptions) do
if options[k] == nil then options[k] = v end
end
-- Stringify each for-see item into a list
local strList = {}
if forSeeTable then
for k, v in pairs(forSeeTable) do
local useStr = v.use or options.otherText
local pagesStr =
p.andList(v.pages, true) or
mFormatLink._formatLink{
categorizeMissing = mHatnote.missingTargetCat,
link = mHatnote.disambiguate(options.title)
}
local forSeeStr = string.format(options.forSeeForm, useStr, pagesStr)
forSeeStr = punctuationCollapse(forSeeStr)
table.insert(strList, forSeeStr)
end
end
if options.extratext then table.insert(strList, punctuationCollapse(options.extratext..'.')) end
-- Return the concatenated list
return table.concat(strList, ' ')
end
-- Produces a "For X, see [[Y]]" string from arguments. Expects index gaps
-- but not blank/whitespace values. Ignores named args and args < "from".
function p._forSee (args, from, options)
local forSeeTable = p.forSeeArgsToTable(args, from, options)
return p.forSeeTableToString(forSeeTable, options)
end
-- As _forSee, but uses the frame.
function p.forSee (frame, from, options)
mArguments = require('Module:Arguments')
return p._forSee(mArguments.getArgs(frame), from, options)
end
return p
d0828422b1aa0d0d0092d699d059c9e882260398
Template:FULLROOTPAGENAME
10
291
588
2022-01-02T08:54:02Z
[[w>Dinoguy1000
0
fix "|=foo" bug
wikitext
text/x-wiki
{{ safesubst:<noinclude/>#if: {{ safesubst:<noinclude/>Ns has subpages | {{ safesubst:<noinclude/>#if:{{{1|}}}|{{ safesubst:<noinclude/>NAMESPACE:{{{1}}}}}|{{ safesubst:<noinclude/>NAMESPACE}}}} }}
| {{ safesubst:<noinclude/>#titleparts:{{ safesubst:<noinclude/>#if:{{{1|}}}|{{{1}}}|{{ safesubst:<noinclude/>FULLPAGENAME}}}}|1}}
| {{ safesubst:<noinclude/>#if:{{{1|}}}|{{{1}}}|{{ safesubst:<noinclude/>FULLPAGENAME}}}}
}}<noinclude>
{{documentation}}
</noinclude>
fd0c4e7050dded2d50e5df405e6e5e31dd0d46ac
Template:Native name
10
239
484
2022-01-02T15:28:59Z
[[w>Trappist the monk
0
use [[Module:Native name]];
wikitext
text/x-wiki
<includeonly>{{#invoke:native name|native_name}}</includeonly><noinclude>{{Documentation}}</noinclude>
8ef2e413bdb984b6a4b78857616db695b6658203
Module:Navbar/styles.css
828
320
713
2022-01-03T23:12:15Z
[[]]>Izno
0
navbar styles that were moved to parent templates
sanitized-css
text/css
/* {{pp|small=yes}} */
.navbar {
display: inline;
font-size: 88%;
font-weight: normal;
}
.navbar-collapse {
float: left;
text-align: left;
}
.navbar-boxtext {
word-spacing: 0;
}
.navbar ul {
display: inline-block;
white-space: nowrap;
line-height: inherit;
}
.navbar-brackets::before {
margin-right: -0.125em;
content: '[ ';
}
.navbar-brackets::after {
margin-left: -0.125em;
content: ' ]';
}
.navbar li {
word-spacing: -0.125em;
}
.navbar a > span,
.navbar a > abbr {
text-decoration: inherit;
}
.navbar-mini abbr {
font-variant: small-caps;
border-bottom: none;
text-decoration: none;
cursor: inherit;
}
.navbar-ct-full {
font-size: 114%;
margin: 0 7em;
}
.navbar-ct-mini {
font-size: 114%;
margin: 0 4em;
}
9d4056f949b4f0b159e3d40dfb1a5f01e72f9571
Template:Small
10
206
418
2022-01-17T03:43:07Z
[[w>Explicit
0
[[Wikipedia:Templates for discussion/Log/2022 January 10#Template:Smaller]] closed as merge ([[WP:XFDC#4.0.12|XFDcloser]])
wikitext
text/x-wiki
<span style="font-size:85%;">{{{1}}}</span><includeonly>{{SAFESUBST:#if:{{{1|}}}||[[Category:Pages using small with an empty input parameter]]}}</includeonly><noinclude>
{{Documentation}}<!--Categories and interwikis go in the /doc sub-page.-->
</noinclude>
76d3535c2917cc3bfb1b032506073faa15e1a480
Template:Smaller
10
207
420
2022-01-18T10:48:21Z
[[w>Primefac
0
merge complete
wikitext
text/x-wiki
#REDIRECT [[Template:Small]]
{{r from merge}}
2209ecdc4a987eb3d73f648941a3daaed04cd5d5
Module:Infobox/styles.css
828
314
673
2022-01-18T15:18:00Z
[[]]>Jdlrobson
0
Fix [[phab:T281642]], a pet peeve of mine. This copies across styles from [[MediaWiki:Minerva.css]]
sanitized-css
text/css
/* {{pp|small=y}} */
/*
* This TemplateStyles sheet deliberately does NOT include the full set of
* infobox styles. We are still working to migrate all of the manual
* infoboxes. See [[MediaWiki talk:Common.css/to do#Infobox]]
* DO NOT ADD THEM HERE
*/
/*
* not strictly certain these styles are necessary since the modules now
* exclusively output infobox-subbox or infobox, not both
* just replicating the module faithfully
*/
.infobox-subbox {
padding: 0;
border: none;
margin: -3px;
width: auto;
min-width: 100%;
font-size: 100%;
clear: none;
float: none;
background-color: transparent;
}
.infobox-3cols-child {
margin: auto;
}
.infobox .navbar {
font-size: 100%;
}
/* T281642 */
body.skin-minerva .infobox-header,
body.skin-minerva .infobox-subheader,
body.skin-minerva .infobox-above,
body.skin-minerva .infobox-title,
body.skin-minerva .infobox-image,
body.skin-minerva .infobox-full-data,
body.skin-minerva .infobox-below {
text-align: center;
}
e8de6d96f4fde53afc4a6b0fed534405ab59b0a7
Template:Country data Hungary
10
262
530
2022-01-24T06:40:01Z
[[w>Paine Ellsworth
0
use AWB to add navy variant
wikitext
text/x-wiki
{{ {{{1<noinclude>|country showdata</noinclude>}}}
| alias = Hungary
| flag alias = Flag of Hungary.svg
| flag alias-1848 = Flag of Hungary (1848-1849, 1867-1869).svg
| flag alias-1849 = Flag of the Habsburg Monarchy.svg
| flag alias-1867 = Flag of Hungary (1848-1849, 1867-1869).svg
| flag alias-1869 = Flag of Hungary (1869-1874).svg
| flag alias-1874 = Flag of Hungary (1874-1896).svg
| flag alias-1896 = Flag of Hungary (1896-1915; angels).svg
| flag alias-1915 = Flag of Hungary (1915-1918; angels).svg
| flag alias-1918 = Flag of Hungary (1918-1919).svg
| flag alias-1919 = Flag of Hungary (1919).svg
| flag alias-1920 = Flag of Hungary (1915-1918, 1919-1946).svg
| flag alias-1946 = Flag of Hungary (1946-1949, 1956-1957; 1-2 aspect ratio).svg
| flag alias-1949 = Flag of Hungary (1949-1956; 1-2 aspect ratio).svg
| flag alias-1956 = Flag of Hungary (1946-1949, 1956-1957; 1-2 aspect ratio).svg
| flag alias-1957 = Flag of Hungary.svg
| flag alias-state = Flag of Hungary with arms (state).svg
| flag alias-civil = Civil Ensign of Hungary.svg
| flag alias-naval = Naval Ensign of Hungary.svg
| link alias-naval = Hungarian Defence Forces
| flag alias-military = Flag of the Hungarian Defence Forces.svg
| link alias-military = Hungarian Defence Forces
| flag alias-army = War Flag of Hungary.svg
| link alias-army = Hungarian Ground Forces
| link alias-air force = Hungarian Air Force
| flag alias-navy = Naval Ensign of Hungary.svg
| link alias-navy = Hungarian Defence Forces
| size = {{{size|}}}
| name = {{{name|}}}
| altlink = {{{altlink|}}}
| variant = {{{variant|}}}
<noinclude>
| var1 = 1848
| var2 = 1849
| var3 = 1867
| var4 = 1869
| var5 = 1874
| var6 = 1896
| var7 = 1915
| var8 = 1918
| var9 = 1919
| var10 = 1920
| var11 = 1946
| var12 = 1949
| var13 = 1956
| var14 = 1957
| var15 = state
| var16 = civil
| redir1 = HUN
| related1 = Austria-Hungary
</noinclude>
}}
88752fd60055fe5e7639e859ebfe4a6950f9719f
Module:Documentation/config
828
60
124
2022-01-25T23:46:11Z
[[w>Ianblair23
0
link
Scribunto
text/plain
----------------------------------------------------------------------------------------------------
--
-- Configuration for Module:Documentation
--
-- Here you can set the values of the parameters and messages used in Module:Documentation to
-- localise it to your wiki and your language. Unless specified otherwise, values given here
-- should be string values.
----------------------------------------------------------------------------------------------------
local cfg = {} -- Do not edit this line.
----------------------------------------------------------------------------------------------------
-- Protection template configuration
----------------------------------------------------------------------------------------------------
-- cfg['protection-reason-edit']
-- The protection reason for edit-protected templates to pass to
-- [[Module:Protection banner]].
cfg['protection-reason-edit'] = 'template'
--[[
----------------------------------------------------------------------------------------------------
-- Sandbox notice configuration
--
-- On sandbox pages the module can display a template notifying users that the current page is a
-- sandbox, and the location of test cases pages, etc. The module decides whether the page is a
-- sandbox or not based on the value of cfg['sandbox-subpage']. The following settings configure the
-- messages that the notices contains.
----------------------------------------------------------------------------------------------------
--]]
-- cfg['sandbox-notice-image']
-- The image displayed in the sandbox notice.
cfg['sandbox-notice-image'] = '[[File:Sandbox.svg|50px|alt=|link=]]'
--[[
-- cfg['sandbox-notice-pagetype-template']
-- cfg['sandbox-notice-pagetype-module']
-- cfg['sandbox-notice-pagetype-other']
-- The page type of the sandbox page. The message that is displayed depends on the current subject
-- namespace. This message is used in either cfg['sandbox-notice-blurb'] or
-- cfg['sandbox-notice-diff-blurb'].
--]]
cfg['sandbox-notice-pagetype-template'] = '[[Wikipedia:Template test cases|template sandbox]] page'
cfg['sandbox-notice-pagetype-module'] = '[[Wikipedia:Template test cases|module sandbox]] page'
cfg['sandbox-notice-pagetype-other'] = 'sandbox page'
--[[
-- cfg['sandbox-notice-blurb']
-- cfg['sandbox-notice-diff-blurb']
-- cfg['sandbox-notice-diff-display']
-- Either cfg['sandbox-notice-blurb'] or cfg['sandbox-notice-diff-blurb'] is the opening sentence
-- of the sandbox notice. The latter has a diff link, but the former does not. $1 is the page
-- type, which is either cfg['sandbox-notice-pagetype-template'],
-- cfg['sandbox-notice-pagetype-module'] or cfg['sandbox-notice-pagetype-other'] depending what
-- namespace we are in. $2 is a link to the main template page, and $3 is a diff link between
-- the sandbox and the main template. The display value of the diff link is set by
-- cfg['sandbox-notice-compare-link-display'].
--]]
cfg['sandbox-notice-blurb'] = 'This is the $1 for $2.'
cfg['sandbox-notice-diff-blurb'] = 'This is the $1 for $2 ($3).'
cfg['sandbox-notice-compare-link-display'] = 'diff'
--[[
-- cfg['sandbox-notice-testcases-blurb']
-- cfg['sandbox-notice-testcases-link-display']
-- cfg['sandbox-notice-testcases-run-blurb']
-- cfg['sandbox-notice-testcases-run-link-display']
-- cfg['sandbox-notice-testcases-blurb'] is a sentence notifying the user that there is a test cases page
-- corresponding to this sandbox that they can edit. $1 is a link to the test cases page.
-- cfg['sandbox-notice-testcases-link-display'] is the display value for that link.
-- cfg['sandbox-notice-testcases-run-blurb'] is a sentence notifying the user that there is a test cases page
-- corresponding to this sandbox that they can edit, along with a link to run it. $1 is a link to the test
-- cases page, and $2 is a link to the page to run it.
-- cfg['sandbox-notice-testcases-run-link-display'] is the display value for the link to run the test
-- cases.
--]]
cfg['sandbox-notice-testcases-blurb'] = 'See also the companion subpage for $1.'
cfg['sandbox-notice-testcases-link-display'] = 'test cases'
cfg['sandbox-notice-testcases-run-blurb'] = 'See also the companion subpage for $1 ($2).'
cfg['sandbox-notice-testcases-run-link-display'] = 'run'
-- cfg['sandbox-category']
-- A category to add to all template sandboxes.
cfg['sandbox-category'] = 'Template sandboxes'
----------------------------------------------------------------------------------------------------
-- Start box configuration
----------------------------------------------------------------------------------------------------
-- cfg['documentation-icon-wikitext']
-- The wikitext for the icon shown at the top of the template.
cfg['documentation-icon-wikitext'] = '[[File:Test Template Info-Icon - Version (2).svg|50px|link=|alt=]]'
-- cfg['template-namespace-heading']
-- The heading shown in the template namespace.
cfg['template-namespace-heading'] = 'Template documentation'
-- cfg['module-namespace-heading']
-- The heading shown in the module namespace.
cfg['module-namespace-heading'] = 'Module documentation'
-- cfg['file-namespace-heading']
-- The heading shown in the file namespace.
cfg['file-namespace-heading'] = 'Summary'
-- cfg['other-namespaces-heading']
-- The heading shown in other namespaces.
cfg['other-namespaces-heading'] = 'Documentation'
-- cfg['view-link-display']
-- The text to display for "view" links.
cfg['view-link-display'] = 'view'
-- cfg['edit-link-display']
-- The text to display for "edit" links.
cfg['edit-link-display'] = 'edit'
-- cfg['history-link-display']
-- The text to display for "history" links.
cfg['history-link-display'] = 'history'
-- cfg['purge-link-display']
-- The text to display for "purge" links.
cfg['purge-link-display'] = 'purge'
-- cfg['create-link-display']
-- The text to display for "create" links.
cfg['create-link-display'] = 'create'
----------------------------------------------------------------------------------------------------
-- Link box (end box) configuration
----------------------------------------------------------------------------------------------------
-- cfg['transcluded-from-blurb']
-- Notice displayed when the docs are transcluded from another page. $1 is a wikilink to that page.
cfg['transcluded-from-blurb'] = 'The above [[Wikipedia:Template documentation|documentation]] is [[Help:Transclusion|transcluded]] from $1.'
--[[
-- cfg['create-module-doc-blurb']
-- Notice displayed in the module namespace when the documentation subpage does not exist.
-- $1 is a link to create the documentation page with the preload cfg['module-preload'] and the
-- display cfg['create-link-display'].
--]]
cfg['create-module-doc-blurb'] = 'You might want to $1 a documentation page for this [[Wikipedia:Lua|Scribunto module]].'
----------------------------------------------------------------------------------------------------
-- Experiment blurb configuration
----------------------------------------------------------------------------------------------------
--[[
-- cfg['experiment-blurb-template']
-- cfg['experiment-blurb-module']
-- The experiment blurb is the text inviting editors to experiment in sandbox and test cases pages.
-- It is only shown in the template and module namespaces. With the default English settings, it
-- might look like this:
--
-- Editors can experiment in this template's sandbox (edit | diff) and testcases (edit) pages.
--
-- In this example, "sandbox", "edit", "diff", "testcases", and "edit" would all be links.
--
-- There are two versions, cfg['experiment-blurb-template'] and cfg['experiment-blurb-module'], depending
-- on what namespace we are in.
--
-- Parameters:
--
-- $1 is a link to the sandbox page. If the sandbox exists, it is in the following format:
--
-- cfg['sandbox-link-display'] (cfg['sandbox-edit-link-display'] | cfg['compare-link-display'])
--
-- If the sandbox doesn't exist, it is in the format:
--
-- cfg['sandbox-link-display'] (cfg['sandbox-create-link-display'] | cfg['mirror-link-display'])
--
-- The link for cfg['sandbox-create-link-display'] link preloads the page with cfg['template-sandbox-preload']
-- or cfg['module-sandbox-preload'], depending on the current namespace. The link for cfg['mirror-link-display']
-- loads a default edit summary of cfg['mirror-edit-summary'].
--
-- $2 is a link to the test cases page. If the test cases page exists, it is in the following format:
--
-- cfg['testcases-link-display'] (cfg['testcases-edit-link-display'] | cfg['testcases-run-link-display'])
--
-- If the test cases page doesn't exist, it is in the format:
--
-- cfg['testcases-link-display'] (cfg['testcases-create-link-display'])
--
-- If the test cases page doesn't exist, the link for cfg['testcases-create-link-display'] preloads the
-- page with cfg['template-testcases-preload'] or cfg['module-testcases-preload'], depending on the current
-- namespace.
--]]
cfg['experiment-blurb-template'] = "Editors can experiment in this template's $1 and $2 pages."
cfg['experiment-blurb-module'] = "Editors can experiment in this module's $1 and $2 pages."
----------------------------------------------------------------------------------------------------
-- Sandbox link configuration
----------------------------------------------------------------------------------------------------
-- cfg['sandbox-subpage']
-- The name of the template subpage typically used for sandboxes.
cfg['sandbox-subpage'] = 'sandbox'
-- cfg['template-sandbox-preload']
-- Preload file for template sandbox pages.
cfg['template-sandbox-preload'] = 'Template:Documentation/preload-sandbox'
-- cfg['module-sandbox-preload']
-- Preload file for Lua module sandbox pages.
cfg['module-sandbox-preload'] = 'Template:Documentation/preload-module-sandbox'
-- cfg['sandbox-link-display']
-- The text to display for "sandbox" links.
cfg['sandbox-link-display'] = 'sandbox'
-- cfg['sandbox-edit-link-display']
-- The text to display for sandbox "edit" links.
cfg['sandbox-edit-link-display'] = 'edit'
-- cfg['sandbox-create-link-display']
-- The text to display for sandbox "create" links.
cfg['sandbox-create-link-display'] = 'create'
-- cfg['compare-link-display']
-- The text to display for "compare" links.
cfg['compare-link-display'] = 'diff'
-- cfg['mirror-edit-summary']
-- The default edit summary to use when a user clicks the "mirror" link. $1 is a wikilink to the
-- template page.
cfg['mirror-edit-summary'] = 'Create sandbox version of $1'
-- cfg['mirror-link-display']
-- The text to display for "mirror" links.
cfg['mirror-link-display'] = 'mirror'
-- cfg['mirror-link-preload']
-- The page to preload when a user clicks the "mirror" link.
cfg['mirror-link-preload'] = 'Template:Documentation/mirror'
----------------------------------------------------------------------------------------------------
-- Test cases link configuration
----------------------------------------------------------------------------------------------------
-- cfg['testcases-subpage']
-- The name of the template subpage typically used for test cases.
cfg['testcases-subpage'] = 'testcases'
-- cfg['template-testcases-preload']
-- Preload file for template test cases pages.
cfg['template-testcases-preload'] = 'Template:Documentation/preload-testcases'
-- cfg['module-testcases-preload']
-- Preload file for Lua module test cases pages.
cfg['module-testcases-preload'] = 'Template:Documentation/preload-module-testcases'
-- cfg['testcases-link-display']
-- The text to display for "testcases" links.
cfg['testcases-link-display'] = 'testcases'
-- cfg['testcases-edit-link-display']
-- The text to display for test cases "edit" links.
cfg['testcases-edit-link-display'] = 'edit'
-- cfg['testcases-run-link-display']
-- The text to display for test cases "run" links.
cfg['testcases-run-link-display'] = 'run'
-- cfg['testcases-create-link-display']
-- The text to display for test cases "create" links.
cfg['testcases-create-link-display'] = 'create'
----------------------------------------------------------------------------------------------------
-- Add categories blurb configuration
----------------------------------------------------------------------------------------------------
--[[
-- cfg['add-categories-blurb']
-- Text to direct users to add categories to the /doc subpage. Not used if the "content" or
-- "docname fed" arguments are set, as then it is not clear where to add the categories. $1 is a
-- link to the /doc subpage with a display value of cfg['doc-link-display'].
--]]
cfg['add-categories-blurb'] = 'Add categories to the $1 subpage.'
-- cfg['doc-link-display']
-- The text to display when linking to the /doc subpage.
cfg['doc-link-display'] = '/doc'
----------------------------------------------------------------------------------------------------
-- Subpages link configuration
----------------------------------------------------------------------------------------------------
--[[
-- cfg['subpages-blurb']
-- The "Subpages of this template" blurb. $1 is a link to the main template's subpages with a
-- display value of cfg['subpages-link-display']. In the English version this blurb is simply
-- the link followed by a period, and the link display provides the actual text.
--]]
cfg['subpages-blurb'] = '$1.'
--[[
-- cfg['subpages-link-display']
-- The text to display for the "subpages of this page" link. $1 is cfg['template-pagetype'],
-- cfg['module-pagetype'] or cfg['default-pagetype'], depending on whether the current page is in
-- the template namespace, the module namespace, or another namespace.
--]]
cfg['subpages-link-display'] = 'Subpages of this $1'
-- cfg['template-pagetype']
-- The pagetype to display for template pages.
cfg['template-pagetype'] = 'template'
-- cfg['module-pagetype']
-- The pagetype to display for Lua module pages.
cfg['module-pagetype'] = 'module'
-- cfg['default-pagetype']
-- The pagetype to display for pages other than templates or Lua modules.
cfg['default-pagetype'] = 'page'
----------------------------------------------------------------------------------------------------
-- Doc link configuration
----------------------------------------------------------------------------------------------------
-- cfg['doc-subpage']
-- The name of the subpage typically used for documentation pages.
cfg['doc-subpage'] = 'doc'
-- cfg['docpage-preload']
-- Preload file for template documentation pages in all namespaces.
cfg['docpage-preload'] = 'Template:Documentation/preload'
-- cfg['module-preload']
-- Preload file for Lua module documentation pages.
cfg['module-preload'] = 'Template:Documentation/preload-module-doc'
----------------------------------------------------------------------------------------------------
-- HTML and CSS configuration
----------------------------------------------------------------------------------------------------
-- cfg['templatestyles']
-- The name of the TemplateStyles page where CSS is kept.
-- Sandbox CSS will be at Module:Documentation/sandbox/styles.css when needed.
cfg['templatestyles'] = 'Module:Documentation/styles.css'
-- cfg['container']
-- Class which can be used to set flex or grid CSS on the
-- two child divs documentation and documentation-metadata
cfg['container'] = 'documentation-container'
-- cfg['main-div-classes']
-- Classes added to the main HTML "div" tag.
cfg['main-div-classes'] = 'documentation'
-- cfg['main-div-heading-class']
-- Class for the main heading for templates and modules and assoc. talk spaces
cfg['main-div-heading-class'] = 'documentation-heading'
-- cfg['start-box-class']
-- Class for the start box
cfg['start-box-class'] = 'documentation-startbox'
-- cfg['start-box-link-classes']
-- Classes used for the [view][edit][history] or [create] links in the start box.
-- mw-editsection-like is per [[Wikipedia:Village pump (technical)/Archive 117]]
cfg['start-box-link-classes'] = 'mw-editsection-like plainlinks'
-- cfg['end-box-class']
-- Class for the end box.
cfg['end-box-class'] = 'documentation-metadata'
-- cfg['end-box-plainlinks']
-- Plainlinks
cfg['end-box-plainlinks'] = 'plainlinks'
-- cfg['toolbar-class']
-- Class added for toolbar links.
cfg['toolbar-class'] = 'documentation-toolbar'
-- cfg['clear']
-- Just used to clear things.
cfg['clear'] = 'documentation-clear'
----------------------------------------------------------------------------------------------------
-- Tracking category configuration
----------------------------------------------------------------------------------------------------
-- cfg['display-strange-usage-category']
-- Set to true to enable output of cfg['strange-usage-category'] if the module is used on a /doc subpage
-- or a /testcases subpage. This should be a boolean value (either true or false).
cfg['display-strange-usage-category'] = true
-- cfg['strange-usage-category']
-- Category to output if cfg['display-strange-usage-category'] is set to true and the module is used on a
-- /doc subpage or a /testcases subpage.
cfg['strange-usage-category'] = 'Wikipedia pages with strange ((documentation)) usage'
--[[
----------------------------------------------------------------------------------------------------
-- End configuration
--
-- Don't edit anything below this line.
----------------------------------------------------------------------------------------------------
--]]
return cfg
71b68ed73088f1a59d61acf06bbee9fde6677f03
Module:TableTools
828
29
62
2022-01-31T13:08:18Z
[[w>MSGJ
0
updates/fixes requested by [[User:Uzume]]
Scribunto
text/plain
------------------------------------------------------------------------------------
-- TableTools --
-- --
-- This module includes a number of functions for dealing with Lua tables. --
-- It is a meta-module, meant to be called from other Lua modules, and should not --
-- be called directly from #invoke. --
------------------------------------------------------------------------------------
local libraryUtil = require('libraryUtil')
local p = {}
-- Define often-used variables and functions.
local floor = math.floor
local infinity = math.huge
local checkType = libraryUtil.checkType
local checkTypeMulti = libraryUtil.checkTypeMulti
------------------------------------------------------------------------------------
-- isPositiveInteger
--
-- This function returns true if the given value is a positive integer, and false
-- if not. Although it doesn't operate on tables, it is included here as it is
-- useful for determining whether a given table key is in the array part or the
-- hash part of a table.
------------------------------------------------------------------------------------
function p.isPositiveInteger(v)
return type(v) == 'number' and v >= 1 and floor(v) == v and v < infinity
end
------------------------------------------------------------------------------------
-- isNan
--
-- This function returns true if the given number is a NaN value, and false if
-- not. Although it doesn't operate on tables, it is included here as it is useful
-- for determining whether a value can be a valid table key. Lua will generate an
-- error if a NaN is used as a table key.
------------------------------------------------------------------------------------
function p.isNan(v)
return type(v) == 'number' and v ~= v
end
------------------------------------------------------------------------------------
-- shallowClone
--
-- This returns a clone of a table. The value returned is a new table, but all
-- subtables and functions are shared. Metamethods are respected, but the returned
-- table will have no metatable of its own.
------------------------------------------------------------------------------------
function p.shallowClone(t)
checkType('shallowClone', 1, t, 'table')
local ret = {}
for k, v in pairs(t) do
ret[k] = v
end
return ret
end
------------------------------------------------------------------------------------
-- removeDuplicates
--
-- This removes duplicate values from an array. Non-positive-integer keys are
-- ignored. The earliest value is kept, and all subsequent duplicate values are
-- removed, but otherwise the array order is unchanged.
------------------------------------------------------------------------------------
function p.removeDuplicates(arr)
checkType('removeDuplicates', 1, arr, 'table')
local isNan = p.isNan
local ret, exists = {}, {}
for _, v in ipairs(arr) do
if isNan(v) then
-- NaNs can't be table keys, and they are also unique, so we don't need to check existence.
ret[#ret + 1] = v
else
if not exists[v] then
ret[#ret + 1] = v
exists[v] = true
end
end
end
return ret
end
------------------------------------------------------------------------------------
-- numKeys
--
-- This takes a table and returns an array containing the numbers of any numerical
-- keys that have non-nil values, sorted in numerical order.
------------------------------------------------------------------------------------
function p.numKeys(t)
checkType('numKeys', 1, t, 'table')
local isPositiveInteger = p.isPositiveInteger
local nums = {}
for k in pairs(t) do
if isPositiveInteger(k) then
nums[#nums + 1] = k
end
end
table.sort(nums)
return nums
end
------------------------------------------------------------------------------------
-- affixNums
--
-- This takes a table and returns an array containing the numbers of keys with the
-- specified prefix and suffix. For example, for the table
-- {a1 = 'foo', a3 = 'bar', a6 = 'baz'} and the prefix "a", affixNums will return
-- {1, 3, 6}.
------------------------------------------------------------------------------------
function p.affixNums(t, prefix, suffix)
checkType('affixNums', 1, t, 'table')
checkType('affixNums', 2, prefix, 'string', true)
checkType('affixNums', 3, suffix, 'string', true)
local function cleanPattern(s)
-- Cleans a pattern so that the magic characters ()%.[]*+-?^$ are interpreted literally.
return s:gsub('([%(%)%%%.%[%]%*%+%-%?%^%$])', '%%%1')
end
prefix = prefix or ''
suffix = suffix or ''
prefix = cleanPattern(prefix)
suffix = cleanPattern(suffix)
local pattern = '^' .. prefix .. '([1-9]%d*)' .. suffix .. '$'
local nums = {}
for k in pairs(t) do
if type(k) == 'string' then
local num = mw.ustring.match(k, pattern)
if num then
nums[#nums + 1] = tonumber(num)
end
end
end
table.sort(nums)
return nums
end
------------------------------------------------------------------------------------
-- numData
--
-- Given a table with keys like {"foo1", "bar1", "foo2", "baz2"}, returns a table
-- of subtables in the format
-- {[1] = {foo = 'text', bar = 'text'}, [2] = {foo = 'text', baz = 'text'}}.
-- Keys that don't end with an integer are stored in a subtable named "other". The
-- compress option compresses the table so that it can be iterated over with
-- ipairs.
------------------------------------------------------------------------------------
function p.numData(t, compress)
checkType('numData', 1, t, 'table')
checkType('numData', 2, compress, 'boolean', true)
local ret = {}
for k, v in pairs(t) do
local prefix, num = mw.ustring.match(tostring(k), '^([^0-9]*)([1-9][0-9]*)$')
if num then
num = tonumber(num)
local subtable = ret[num] or {}
if prefix == '' then
-- Positional parameters match the blank string; put them at the start of the subtable instead.
prefix = 1
end
subtable[prefix] = v
ret[num] = subtable
else
local subtable = ret.other or {}
subtable[k] = v
ret.other = subtable
end
end
if compress then
local other = ret.other
ret = p.compressSparseArray(ret)
ret.other = other
end
return ret
end
------------------------------------------------------------------------------------
-- compressSparseArray
--
-- This takes an array with one or more nil values, and removes the nil values
-- while preserving the order, so that the array can be safely traversed with
-- ipairs.
------------------------------------------------------------------------------------
function p.compressSparseArray(t)
checkType('compressSparseArray', 1, t, 'table')
local ret = {}
local nums = p.numKeys(t)
for _, num in ipairs(nums) do
ret[#ret + 1] = t[num]
end
return ret
end
------------------------------------------------------------------------------------
-- sparseIpairs
--
-- This is an iterator for sparse arrays. It can be used like ipairs, but can
-- handle nil values.
------------------------------------------------------------------------------------
function p.sparseIpairs(t)
checkType('sparseIpairs', 1, t, 'table')
local nums = p.numKeys(t)
local i = 0
local lim = #nums
return function ()
i = i + 1
if i <= lim then
local key = nums[i]
return key, t[key]
else
return nil, nil
end
end
end
------------------------------------------------------------------------------------
-- size
--
-- This returns the size of a key/value pair table. It will also work on arrays,
-- but for arrays it is more efficient to use the # operator.
------------------------------------------------------------------------------------
function p.size(t)
checkType('size', 1, t, 'table')
local i = 0
for _ in pairs(t) do
i = i + 1
end
return i
end
local function defaultKeySort(item1, item2)
-- "number" < "string", so numbers will be sorted before strings.
local type1, type2 = type(item1), type(item2)
if type1 ~= type2 then
return type1 < type2
elseif type1 == 'table' or type1 == 'boolean' or type1 == 'function' then
return tostring(item1) < tostring(item2)
else
return item1 < item2
end
end
------------------------------------------------------------------------------------
-- keysToList
--
-- Returns an array of the keys in a table, sorted using either a default
-- comparison function or a custom keySort function.
------------------------------------------------------------------------------------
function p.keysToList(t, keySort, checked)
if not checked then
checkType('keysToList', 1, t, 'table')
checkTypeMulti('keysToList', 2, keySort, {'function', 'boolean', 'nil'})
end
local arr = {}
local index = 1
for k in pairs(t) do
arr[index] = k
index = index + 1
end
if keySort ~= false then
keySort = type(keySort) == 'function' and keySort or defaultKeySort
table.sort(arr, keySort)
end
return arr
end
------------------------------------------------------------------------------------
-- sortedPairs
--
-- Iterates through a table, with the keys sorted using the keysToList function.
-- If there are only numerical keys, sparseIpairs is probably more efficient.
------------------------------------------------------------------------------------
function p.sortedPairs(t, keySort)
checkType('sortedPairs', 1, t, 'table')
checkType('sortedPairs', 2, keySort, 'function', true)
local arr = p.keysToList(t, keySort, true)
local i = 0
return function ()
i = i + 1
local key = arr[i]
if key ~= nil then
return key, t[key]
else
return nil, nil
end
end
end
------------------------------------------------------------------------------------
-- isArray
--
-- Returns true if the given value is a table and all keys are consecutive
-- integers starting at 1.
------------------------------------------------------------------------------------
function p.isArray(v)
if type(v) ~= 'table' then
return false
end
local i = 0
for _ in pairs(v) do
i = i + 1
if v[i] == nil then
return false
end
end
return true
end
------------------------------------------------------------------------------------
-- isArrayLike
--
-- Returns true if the given value is iterable and all keys are consecutive
-- integers starting at 1.
------------------------------------------------------------------------------------
function p.isArrayLike(v)
if not pcall(pairs, v) then
return false
end
local i = 0
for _ in pairs(v) do
i = i + 1
if v[i] == nil then
return false
end
end
return true
end
------------------------------------------------------------------------------------
-- invert
--
-- Transposes the keys and values in an array. For example, {"a", "b", "c"} ->
-- {a = 1, b = 2, c = 3}. Duplicates are not supported (result values refer to
-- the index of the last duplicate) and NaN values are ignored.
------------------------------------------------------------------------------------
function p.invert(arr)
checkType("invert", 1, arr, "table")
local isNan = p.isNan
local map = {}
for i, v in ipairs(arr) do
if not isNan(v) then
map[v] = i
end
end
return map
end
------------------------------------------------------------------------------------
-- listToSet
--
-- Creates a set from the array part of the table. Indexing the set by any of the
-- values of the array returns true. For example, {"a", "b", "c"} ->
-- {a = true, b = true, c = true}. NaN values are ignored as Lua considers them
-- never equal to any value (including other NaNs or even themselves).
------------------------------------------------------------------------------------
function p.listToSet(arr)
checkType("listToSet", 1, arr, "table")
local isNan = p.isNan
local set = {}
for _, v in ipairs(arr) do
if not isNan(v) then
set[v] = true
end
end
return set
end
------------------------------------------------------------------------------------
-- deepCopy
--
-- Recursive deep copy function. Preserves identities of subtables.
------------------------------------------------------------------------------------
local function _deepCopy(orig, includeMetatable, already_seen)
-- Stores copies of tables indexed by the original table.
already_seen = already_seen or {}
local copy = already_seen[orig]
if copy ~= nil then
return copy
end
if type(orig) == 'table' then
copy = {}
for orig_key, orig_value in pairs(orig) do
copy[_deepCopy(orig_key, includeMetatable, already_seen)] = _deepCopy(orig_value, includeMetatable, already_seen)
end
already_seen[orig] = copy
if includeMetatable then
local mt = getmetatable(orig)
if mt ~= nil then
local mt_copy = _deepCopy(mt, includeMetatable, already_seen)
setmetatable(copy, mt_copy)
already_seen[mt] = mt_copy
end
end
else -- number, string, boolean, etc
copy = orig
end
return copy
end
function p.deepCopy(orig, noMetatable, already_seen)
checkType("deepCopy", 3, already_seen, "table", true)
return _deepCopy(orig, not noMetatable, already_seen)
end
------------------------------------------------------------------------------------
-- sparseConcat
--
-- Concatenates all values in the table that are indexed by a number, in order.
-- sparseConcat{a, nil, c, d} => "acd"
-- sparseConcat{nil, b, c, d} => "bcd"
------------------------------------------------------------------------------------
function p.sparseConcat(t, sep, i, j)
local arr = {}
local arr_i = 0
for _, v in p.sparseIpairs(t) do
arr_i = arr_i + 1
arr[arr_i] = v
end
return table.concat(arr, sep, i, j)
end
------------------------------------------------------------------------------------
-- length
--
-- Finds the length of an array, or of a quasi-array with keys such as "data1",
-- "data2", etc., using an exponential search algorithm. It is similar to the
-- operator #, but may return a different value when there are gaps in the array
-- portion of the table. Intended to be used on data loaded with mw.loadData. For
-- other tables, use #.
-- Note: #frame.args in frame object always be set to 0, regardless of the number
-- of unnamed template parameters, so use this function for frame.args.
------------------------------------------------------------------------------------
function p.length(t, prefix)
-- requiring module inline so that [[Module:Exponential search]] which is
-- only needed by this one function doesn't get millions of transclusions
local expSearch = require("Module:Exponential search")
checkType('length', 1, t, 'table')
checkType('length', 2, prefix, 'string', true)
return expSearch(function (i)
local key
if prefix then
key = prefix .. tostring(i)
else
key = i
end
return t[key] ~= nil
end) or 0
end
------------------------------------------------------------------------------------
-- inArray
--
-- Returns true if valueToFind is a member of the array, and false otherwise.
------------------------------------------------------------------------------------
function p.inArray(arr, valueToFind)
checkType("inArray", 1, arr, "table")
-- if valueToFind is nil, error?
for _, v in ipairs(arr) do
if v == valueToFind then
return true
end
end
return false
end
return p
085e7094ac84eb0132ee65822cf3f69cd8ba3d81
Module:Check for unknown parameters
828
25
54
2022-02-21T05:24:13Z
[[w>BusterD
0
Changed protection settings for "[[Module:Check for unknown parameters]]": [[WP:High-risk templates|Highly visible template]]; requested at [[WP:RfPP]] ([Edit=Require administrator access] (indefinite) [Move=Require administrator access] (indefinite))
Scribunto
text/plain
-- This module may be used to compare the arguments passed to the parent
-- with a list of arguments, returning a specified result if an argument is
-- not on the list
local p = {}
local function trim(s)
return s:match('^%s*(.-)%s*$')
end
local function isnotempty(s)
return s and s:match('%S')
end
local function clean(text)
-- Return text cleaned for display and truncated if too long.
-- Strip markers are replaced with dummy text representing the original wikitext.
local pos, truncated
local function truncate(text)
if truncated then
return ''
end
if mw.ustring.len(text) > 25 then
truncated = true
text = mw.ustring.sub(text, 1, 25) .. '...'
end
return mw.text.nowiki(text)
end
local parts = {}
for before, tag, remainder in text:gmatch('([^\127]*)\127[^\127]*%-(%l+)%-[^\127]*\127()') do
pos = remainder
table.insert(parts, truncate(before) .. '<' .. tag .. '>...</' .. tag .. '>')
end
table.insert(parts, truncate(text:sub(pos or 1)))
return table.concat(parts)
end
function p._check(args, pargs)
if type(args) ~= "table" or type(pargs) ~= "table" then
-- TODO: error handling
return
end
-- create the list of known args, regular expressions, and the return string
local knownargs = {}
local regexps = {}
for k, v in pairs(args) do
if type(k) == 'number' then
v = trim(v)
knownargs[v] = 1
elseif k:find('^regexp[1-9][0-9]*$') then
table.insert(regexps, '^' .. v .. '$')
end
end
-- loop over the parent args, and make sure they are on the list
local ignoreblank = isnotempty(args['ignoreblank'])
local showblankpos = isnotempty(args['showblankpositional'])
local values = {}
for k, v in pairs(pargs) do
if type(k) == 'string' and knownargs[k] == nil then
local knownflag = false
for _, regexp in ipairs(regexps) do
if mw.ustring.match(k, regexp) then
knownflag = true
break
end
end
if not knownflag and ( not ignoreblank or isnotempty(v) ) then
table.insert(values, clean(k))
end
elseif type(k) == 'number' and knownargs[tostring(k)] == nil then
local knownflag = false
for _, regexp in ipairs(regexps) do
if mw.ustring.match(tostring(k), regexp) then
knownflag = true
break
end
end
if not knownflag and ( showblankpos or isnotempty(v) ) then
table.insert(values, k .. ' = ' .. clean(v))
end
end
end
-- add results to the output tables
local res = {}
if #values > 0 then
local unknown_text = args['unknown'] or 'Found _VALUE_, '
if mw.getCurrentFrame():preprocess( "{{REVISIONID}}" ) == "" then
local preview_text = args['preview']
if isnotempty(preview_text) then
preview_text = require('Module:If preview')._warning({preview_text})
elseif preview == nil then
preview_text = unknown_text
end
unknown_text = preview_text
end
for _, v in pairs(values) do
-- Fix odd bug for | = which gets stripped to the empty string and
-- breaks category links
if v == '' then v = ' ' end
-- avoid error with v = 'example%2' ("invalid capture index")
local r = unknown_text:gsub('_VALUE_', {_VALUE_ = v})
table.insert(res, r)
end
end
return table.concat(res)
end
function p.check(frame)
local args = frame.args
local pargs = frame:getParent().args
return p._check(args, pargs)
end
return p
93db6d115d4328d2a5148bb42959105e367b663e
Template:Use dmy dates
10
295
596
2022-02-22T16:24:28Z
[[w>Frietjes
0
fix |=February 2022 bug (see https://en.wikipedia.org/w/index.php?title=Night_of_the_Pencils_(film)&type=revision&diff=1073091061&oldid=1067523640 which transcluded [[Template:February 2022]])
wikitext
text/x-wiki
{{ <includeonly>safesubst:</includeonly>#invoke:Unsubst||date=__DATE__ |$B=
{{DMCA|Use dmy dates|from|{{{date|}}}}}{{#invoke:Check for unknown parameters|check|unknown={{main other|[[Category:Pages using Use dmy dates template with unknown parameters|_VALUE_{{PAGENAME}}]]}}|preview=Page using [[Template:Use dmy dates]] with unknown parameter "_VALUE_"|ignoreblank=y| cs1-dates | date }}}}<noinclude>{{documentation}}</noinclude>
3a087cd27e88fd70a0765c62d5ab506c3b73c9e7
Module:Effective protection expiry
828
38
80
2022-02-23T10:59:29Z
Xaosflux
6
Changed protection settings for "[[Module:Effective protection expiry]]": used in the mediawiki interface / match [[Module:Effective protection level]] ([Edit=Require administrator access] (indefinite) [Move=Require administrator access] (indefinite))
Scribunto
text/plain
local p = {}
-- Returns the expiry of a restriction of an action on a given title, or unknown if it cannot be known.
-- If no title is specified, the title of the page being displayed is used.
function p._main(action, pagename)
local title
if type(pagename) == 'table' and pagename.prefixedText then
title = pagename
elseif pagename then
title = mw.title.new(pagename)
else
title = mw.title.getCurrentTitle()
end
pagename = title.prefixedText
if action == 'autoreview' then
local stabilitySettings = mw.ext.FlaggedRevs.getStabilitySettings(title)
return stabilitySettings and stabilitySettings.expiry or 'unknown'
elseif action ~= 'edit' and action ~= 'move' and action ~= 'create' and action ~= 'upload' then
error( 'First parameter must be one of edit, move, create, upload, autoreview', 2 )
end
local rawExpiry = mw.getCurrentFrame():callParserFunction('PROTECTIONEXPIRY', action, pagename)
if rawExpiry == 'infinity' then
return 'infinity'
elseif rawExpiry == '' then
return 'unknown'
else
local year, month, day, hour, minute, second = rawExpiry:match(
'^(%d%d%d%d)(%d%d)(%d%d)(%d%d)(%d%d)(%d%d)$'
)
if year then
return string.format(
'%s-%s-%sT%s:%s:%s',
year, month, day, hour, minute, second
)
else
error('internal error in Module:Effective protection expiry; malformed expiry timestamp')
end
end
end
setmetatable(p, { __index = function(t, k)
return function(frame)
return t._main(k, frame.args[1])
end
end })
return p
9a8c58dc2667232ed08a9b206a5d89ca8150312b
Template:Country data Bulgaria
10
260
526
2022-02-25T18:11:30Z
[[w>Paine Ellsworth
0
no longer required - High use template is now in the documentation
wikitext
text/x-wiki
{{ {{{1<noinclude>|country showdata</noinclude>}}}
| alias = Bulgaria
| flag alias = Flag of Bulgaria.svg
| flag alias-1878 = Flag of Bulgaria.svg
| flag alias-1947 = Flag of Bulgaria (1946–1948).svg
| flag alias-1948 = Flag of Bulgaria (1948–1967).svg
| flag alias-1967 = Flag of Bulgaria (1967-1971).svg
| flag alias-1971 = Flag of Bulgaria (1971–1990).svg
| flag alias-naval-1879 = Naval Ensign of Bulgaria (1878-1944).svg
| flag alias-naval-1949 = Naval Ensign of Bulgaria (1949-1955).svg
| flag alias-naval-1955 = Naval Ensign of Bulgaria (1955-1990).svg
| flag alias-naval-1991 = Naval Ensign of Bulgaria 1991-2005.svg
| flag alias-naval = Naval Ensign of Bulgaria.svg
| link alias-naval = Bulgarian Navy
| flag alias-army = War flag of Bulgaria.svg
| link alias-army = Bulgarian Land Forces
| link alias-air force = Bulgarian Air Force
| flag alias-navy = Naval Ensign of Bulgaria.svg
| link alias-navy = Bulgarian Navy
| size = {{{size|}}}
| name = {{{name|}}}
| altlink = {{{altlink|}}}
| variant = {{{variant|}}}
<noinclude>
| var1 = 1878
| var2 = 1947
| var3 = 1948
| var4 = 1967
| var5 = 1971
| var6 = naval-1879
| var7 = naval-1949
| var8 = naval-1955
| var9 = naval-1991
| redir1 = BGR
| redir2 = BUL
| related1 = Kingdom of Bulgaria
</noinclude>
}}
3c6d30533fdfb1975878aa79f5e7f467985c402e
Template:Country data Greece
10
265
536
2022-02-25T18:12:31Z
[[w>Paine Ellsworth
0
no longer required - High use template is now in the documentation
wikitext
text/x-wiki
{{ {{{1<noinclude>|country showdata</noinclude>}}}
| alias = Greece
| flag alias = Flag of Greece.svg
| flag alias-old = Flag of Greece (1822-1978).svg
| flag alias-1970 = Flag of Greece (1970-1975).svg
| flag alias-royal = State flag of Greece (1863–1924;1935–73).svg
| flag alias-otto = Flag of Greece (1822-1978).svg
| flag alias-army = Hellenic Army War Flag.svg
| link alias-army = Hellenic Army
| border-army=
| flag alias-air force=Fin Flash of Greece.svg
| link alias-air force=Hellenic Air Force
| flag alias-royalnavy = Naval Ensign of Kingdom of Greece.svg
| link alias-naval = Hellenic Navy
| flag alias-navy = Flag of Greece.svg
| link alias-navy = Hellenic Navy
| link alias-military = Hellenic Armed Forces
| link alias-royalnavy = Royal Hellenic Navy
| size = {{{size|}}}
| name = {{{name|}}}
| altlink = {{{altlink|}}}
| variant = {{{variant|}}}
<noinclude>
| var1 = old
| var2 = 1970
| var3 = royal
| var4 = otto
| var5 = royalnavy
| redir1 = GRC
| redir2 = GRE
</noinclude>
}}
9362470d876ccba9fb1cf88c0a43720002dfeccf
Template:Country data Italy
10
251
508
2022-02-25T19:19:17Z
[[w>Paine Ellsworth
0
no longer required - High use template is now in the documentation
wikitext
text/x-wiki
{{ {{{1<noinclude>|country showdata</noinclude>}}}
| alias = Italy
| flag alias = Flag of Italy.svg
| flag alias-1861 = Flag of Italy (1861–1946).svg
| flag alias-1943 = War flag of the Italian Social Republic.svg
| flag alias-2003 = Flag of Italy (2003–2006).svg
| flag alias-civil = Civil Ensign of Italy.svg
| flag alias-naval = Naval Ensign of Italy.svg
| flag alias-navy-1947 = Naval Ensign of Italy (1947-2013).svg
| link alias-naval = Italian Navy
| link alias-air force = Italian Air Force
| link alias-army = Italian Army
| flag alias-navy = Naval Ensign of Italy.svg
| link alias-navy = Italian Navy
| link alias-roller hockey = Italy {{{mw}}} national roller hockey team
| size = {{{size|}}}
| name = {{{name|}}}
| variant = {{{variant|}}}
| altlink = {{{altlink|}}}
| altvar = {{{altvar|}}}
<noinclude>
| var1 = 1861
| var2 = 1943
| var4 = 2003
| var5 = civil
| var6 = navy-1947
| redir1 = ITA
| related1 = Kingdom of Italy
| related2 = Italian Social Republic
| related3 = Napoleonic Italy
</noinclude>
}}
305bf5a66b74b7211326d9326b28d66a836e8721
Template:Country data Netherlands
10
246
498
2022-02-26T20:00:49Z
[[w>Paine Ellsworth
0
no longer required - High use template is now in the documentation
wikitext
text/x-wiki
{{ {{{1<noinclude>|country showdata</noinclude>}}}
| alias = Netherlands
| flag alias = Flag of the Netherlands.svg
| flag alias-prinsengeus = Naval Jack of the Netherlands.svg
| flag alias-army =Flag of the Royal Netherlands Army.svg
| flag alias-air force=Flag of the Royal Netherlands Air Force.svg
| link alias-air force= Royal Netherlands Air Force
| link alias-army= Royal Netherlands Army
| link alias-naval = Royal Netherlands Navy
| flag alias-navy = Naval Jack of the Netherlands.svg
| link alias-navy=Royal Netherlands Navy
| flag alias-marines = Naval Jack of the Netherlands.svg
| link alias-marines = Netherlands Marine Corps
| size = {{{size|}}}
| name = {{{name|}}}
| altlink = {{{altlink|}}}
| variant = {{{variant|}}}
<noinclude>
| var1 = prinsengeus
| redir1 = NLD
| redir2 = NED
| redir3 = The Netherlands
| related1 = Kingdom of the Netherlands
| related2 = Dutch Republic
| related3 = Batavian Republic
</noinclude>
}}
1c723f169b6e9824c190beea044f0bdf8852db76
Template:Country data Latvia
10
275
556
2022-02-26T20:51:20Z
[[w>Paine Ellsworth
0
no longer required - High use template is now in the documentation
wikitext
text/x-wiki
{{ {{{1<noinclude>|country showdata</noinclude>}}}
| alias = Latvia
| flag alias = Flag of Latvia.svg
| flag alias-naval = Naval Ensign of Latvia.svg
| link alias-naval = Latvian Naval Forces
| link alias-army = Latvian Land Forces
| flag alias-navy = Naval Ensign of Latvia.svg
| link alias-navy = Latvian Naval Forces
| size = {{{size|}}}
| name = {{{name|}}}
| altlink = {{{altlink|}}}
| variant = {{{variant|}}}
<noinclude>
| redir1 = LVA
| redir2 = LAT
| related1 = Latvian SSR
</noinclude>
}}
b73038430b70fdf779abd8896f6b69e2cb3a2eb7
Template:Country data Estonia
10
278
562
2022-02-26T22:50:13Z
[[w>Paine Ellsworth
0
no longer required - High use template is now in the documentation
wikitext
text/x-wiki
{{ {{{1<noinclude>|country showdata</noinclude>}}}
| alias = Estonia
| flag alias = Flag of Estonia.svg
| flag alias-naval = Naval Jack of Estonia.svg
| link alias-naval = Estonian Navy
| flag alias-army=Flag of Estonian Land Forces.svg
| link alias-army=Estonian Land Forces
| flag alias-air force =Flag of the Estonia Air Force.png
| link alias-air force = Estonian Air Force
| flag alias-navy = Naval Ensign of Estonia.svg
| link alias-navy = Estonian Navy
| border-naval =
| size = {{{size|}}}
| name = {{{name|}}}
| altlink = {{{altlink|}}}
| variant = {{{variant|}}}
<noinclude>
| redir1 = EST
| related1 = Estonian SSR
</noinclude>
}}
9d47f0787ce2f607d4f6b61cd4956aa9ac9fd47f
Template:Ns has subpages
10
292
590
2022-03-02T10:43:18Z
[[w>Trialpears
0
Changed protection settings for "[[Template:Ns has subpages]]": [[WP:High-risk templates|Highly visible template]] ([Edit=Require administrator access] (indefinite) [Move=Require administrator access] (indefinite))
wikitext
text/x-wiki
{{<includeonly>safesubst:</includeonly>#invoke:Ns has subpages|main}}<noinclude>
{{documentation}}
<!-- Categories go on the /doc subpage and interwikis go on Wikidata. -->
</noinclude>
060d2d01af26cb67fd90a7c346a0d2d5e450a040
Module:Template link general
828
32
68
2022-03-08T08:30:51Z
[[w>Primefac
0
update from sandbox - fixes to _show_result and adding _expand
Scribunto
text/plain
-- This implements Template:Tlg
local getArgs = require('Module:Arguments').getArgs
local p = {}
-- Is a string non-empty?
local function _ne(s)
return s ~= nil and s ~= ""
end
local nw = mw.text.nowiki
local function addTemplate(s)
local i, _ = s:find(':', 1, true)
if i == nil then
return 'Template:' .. s
end
local ns = s:sub(1, i - 1)
if ns == '' or mw.site.namespaces[ns] then
return s
else
return 'Template:' .. s
end
end
local function trimTemplate(s)
local needle = 'template:'
if s:sub(1, needle:len()):lower() == needle then
return s:sub(needle:len() + 1)
else
return s
end
end
local function linkTitle(args)
if _ne(args.nolink) then
return args['1']
end
local titleObj
local titlePart = '[['
if args['1'] then
-- This handles :Page and other NS
titleObj = mw.title.new(args['1'], 'Template')
else
titleObj = mw.title.getCurrentTitle()
end
titlePart = titlePart .. (titleObj ~= nil and titleObj.fullText or
addTemplate(args['1']))
local textPart = args.alttext
if not _ne(textPart) then
if titleObj ~= nil then
textPart = titleObj:inNamespace("Template") and args['1'] or titleObj.fullText
else
-- redlink
textPart = args['1']
end
end
if _ne(args.subst) then
-- HACK: the ns thing above is probably broken
textPart = 'subst:' .. textPart
end
if _ne(args.brace) then
textPart = nw('{{') .. textPart .. nw('}}')
elseif _ne(args.braceinside) then
textPart = nw('{') .. textPart .. nw('}')
end
titlePart = titlePart .. '|' .. textPart .. ']]'
if _ne(args.braceinside) then
titlePart = nw('{') .. titlePart .. nw('}')
end
return titlePart
end
function p.main(frame)
local args = getArgs(frame, {
trim = true,
removeBlanks = false
})
return p._main(args)
end
function p._main(args)
local bold = _ne(args.bold) or _ne(args.boldlink) or _ne(args.boldname)
local italic = _ne(args.italic) or _ne(args.italics)
local dontBrace = _ne(args.brace) or _ne(args.braceinside)
local code = _ne(args.code) or _ne(args.tt)
local show_result = _ne(args._show_result)
local expand = _ne(args._expand)
-- Build the link part
local titlePart = linkTitle(args)
if bold then titlePart = "'''" .. titlePart .. "'''" end
if _ne(args.nowrapname) then titlePart = '<span class="nowrap">' .. titlePart .. '</span>' end
-- Build the arguments
local textPart = ""
local textPartBuffer = "|"
local codeArguments = {}
local codeArgumentsString = ""
local i = 2
local j = 1
while args[i] do
local val = args[i]
if val ~= "" then
if _ne(args.nowiki) then
-- Unstrip nowiki tags first because calling nw on something that already contains nowiki tags will
-- mangle the nowiki strip marker and result in literal UNIQ...QINU showing up
val = nw(mw.text.unstripNoWiki(val))
end
local k, v = string.match(val, "(.*)=(.*)")
if not k then
codeArguments[j] = val
j = j + 1
else
codeArguments[k] = v
end
codeArgumentsString = codeArgumentsString .. textPartBuffer .. val
if italic then
val = '<span style="font-style:italic;">' .. val .. '</span>'
end
textPart = textPart .. textPartBuffer .. val
end
i = i + 1
end
-- final wrap
local ret = titlePart .. textPart
if not dontBrace then ret = nw('{{') .. ret .. nw('}}') end
if _ne(args.a) then ret = nw('*') .. ' ' .. ret end
if _ne(args.kbd) then ret = '<kbd>' .. ret .. '</kbd>' end
if code then
ret = '<code>' .. ret .. '</code>'
elseif _ne(args.plaincode) then
ret = '<code style="border:none;background:transparent;">' .. ret .. '</code>'
end
if _ne(args.nowrap) then ret = '<span class="nowrap">' .. ret .. '</span>' end
--[[ Wrap as html??
local span = mw.html.create('span')
span:wikitext(ret)
--]]
if _ne(args.debug) then ret = ret .. '\n<pre>' .. mw.text.encode(mw.dumpObject(args)) .. '</pre>' end
if show_result then
local result = mw.getCurrentFrame():expandTemplate{title = addTemplate(args[1]), args = codeArguments}
ret = ret .. " → " .. result
end
if expand then
local query = mw.text.encode('{{' .. addTemplate(args[1]) .. string.gsub(codeArgumentsString, textPartBuffer, "|") .. '}}')
local url = mw.uri.fullUrl('special:ExpandTemplates', 'wpInput=' .. query)
mw.log()
ret = ret .. " [" .. tostring(url) .. "]"
end
return ret
end
return p
c7307fa3959d308a2dd7fd2f5009c1ce6db3d122
Template:Clear
10
34
656
2022-03-08T14:12:32Z
[[cln>DarkMatterMan4500
0
Created page with "<div style="clear:{{{1|both}}};"></div><noinclude> {{documentation}} </noinclude>"
wikitext
text/x-wiki
<div style="clear:{{{1|both}}};"></div><noinclude>
{{documentation}}
</noinclude>
38bab3e3d7fbd3d6800d46556e60bc6bac494d72
72
2022-06-13T15:31:11Z
Xaosflux
6
Changed protection settings for "[[Template:Clear]]": [[WP:High-risk templates|Highly visible template]]: 3MM+ uses ([Edit=Require administrator access] (indefinite) [Move=Require administrator access] (indefinite))
wikitext
text/x-wiki
<div style="clear:{{{1|both}}};"></div><noinclude>
{{documentation}}
</noinclude>
38bab3e3d7fbd3d6800d46556e60bc6bac494d72
Module:InfoboxImage
828
198
402
2022-03-13T19:18:18Z
[[w>WOSlinker
0
add class param from sandbox as per edit request
Scribunto
text/plain
-- Inputs:
-- image - Can either be a bare filename (with or without the File:/Image: prefix) or a fully formatted image link
-- page - page to display for multipage images (DjVu)
-- size - size to display the image
-- maxsize - maximum size for image
-- sizedefault - default size to display the image if size param is blank
-- alt - alt text for image
-- title - title text for image
-- border - set to yes if border
-- center - set to yes, if the image has to be centered
-- upright - upright image param
-- suppressplaceholder - if yes then checks to see if image is a placeholder and suppresses it
-- link - page to visit when clicking on image
-- class - HTML classes to add to the image
-- Outputs:
-- Formatted image.
-- More details available at the "Module:InfoboxImage/doc" page
local i = {};
local placeholder_image = {
"Blue - Replace this image female.svg",
"Blue - Replace this image male.svg",
"Female no free image yet.png",
"Flag of None (square).svg",
"Flag of None.svg",
"Flag of.svg",
"Green - Replace this image female.svg",
"Green - Replace this image male.svg",
"Image is needed female.svg",
"Image is needed male.svg",
"Location map of None.svg",
"Male no free image yet.png",
"Missing flag.png",
"No flag.svg",
"No free portrait.svg",
"No portrait (female).svg",
"No portrait (male).svg",
"Red - Replace this image female.svg",
"Red - Replace this image male.svg",
"Replace this image female (blue).svg",
"Replace this image female.svg",
"Replace this image male (blue).svg",
"Replace this image male.svg",
"Silver - Replace this image female.svg",
"Silver - Replace this image male.svg",
"Replace this image.svg",
"Cricket no pic.png",
"CarersLogo.gif",
"Diagram Needed.svg",
"Example.jpg",
"Image placeholder.png",
"No male portrait.svg",
"Nocover-upload.png",
"NoDVDcover copy.png",
"Noribbon.svg",
"No portrait-BFD-test.svg",
"Placeholder barnstar ribbon.png",
"Project Trains no image.png",
"Image-request.png",
"Sin bandera.svg",
"Sin escudo.svg",
"Replace this image - temple.png",
"Replace this image butterfly.png",
"Replace this image.svg",
"Replace this image1.svg",
"Resolution angle.png",
"Image-No portrait-text-BFD-test.svg",
"Insert image here.svg",
"No image available.png",
"NO IMAGE YET square.png",
"NO IMAGE YET.png",
"No Photo Available.svg",
"No Screenshot.svg",
"No-image-available.jpg",
"Null.png",
"PictureNeeded.gif",
"Place holder.jpg",
"Unbenannt.JPG",
"UploadACopyrightFreeImage.svg",
"UploadAnImage.gif",
"UploadAnImage.svg",
"UploadAnImageShort.svg",
"CarersLogo.gif",
"Diagram Needed.svg",
"No male portrait.svg",
"NoDVDcover copy.png",
"Placeholder barnstar ribbon.png",
"Project Trains no image.png",
"Image-request.png",
"Noimage.gif",
}
function i.IsPlaceholder(image)
-- change underscores to spaces
image = mw.ustring.gsub(image, "_", " ");
assert(image ~= nil, 'mw.ustring.gsub(image, "_", " ") must not return nil')
-- if image starts with [[ then remove that and anything after |
if mw.ustring.sub(image,1,2) == "[[" then
image = mw.ustring.sub(image,3);
image = mw.ustring.gsub(image, "([^|]*)|.*", "%1");
assert(image ~= nil, 'mw.ustring.gsub(image, "([^|]*)|.*", "%1") must not return nil')
end
-- Trim spaces
image = mw.ustring.gsub(image, '^[ ]*(.-)[ ]*$', '%1');
assert(image ~= nil, "mw.ustring.gsub(image, '^[ ]*(.-)[ ]*$', '%1') must not return nil")
-- remove prefix if exists
local allNames = mw.site.namespaces[6].aliases
allNames[#allNames + 1] = mw.site.namespaces[6].name
allNames[#allNames + 1] = mw.site.namespaces[6].canonicalName
for i, name in ipairs(allNames) do
if mw.ustring.lower(mw.ustring.sub(image, 1, mw.ustring.len(name) + 1)) == mw.ustring.lower(name .. ":") then
image = mw.ustring.sub(image, mw.ustring.len(name) + 2);
break
end
end
-- Trim spaces
image = mw.ustring.gsub(image, '^[ ]*(.-)[ ]*$', '%1');
-- capitalise first letter
image = mw.ustring.upper(mw.ustring.sub(image,1,1)) .. mw.ustring.sub(image,2);
for i,j in pairs(placeholder_image) do
if image == j then
return true
end
end
return false
end
function i.InfoboxImage(frame)
local image = frame.args["image"];
if image == "" or image == nil then
return "";
end
if image == " " then
return image;
end
if frame.args["suppressplaceholder"] ~= "no" then
if i.IsPlaceholder(image) == true then
return "";
end
end
if mw.ustring.lower(mw.ustring.sub(image,1,5)) == "http:" then
return "";
end
if mw.ustring.lower(mw.ustring.sub(image,1,6)) == "[http:" then
return "";
end
if mw.ustring.lower(mw.ustring.sub(image,1,7)) == "[[http:" then
return "";
end
if mw.ustring.lower(mw.ustring.sub(image,1,6)) == "https:" then
return "";
end
if mw.ustring.lower(mw.ustring.sub(image,1,7)) == "[https:" then
return "";
end
if mw.ustring.lower(mw.ustring.sub(image,1,8)) == "[[https:" then
return "";
end
if mw.ustring.sub(image,1,2) == "[[" then
-- search for thumbnail images and add to tracking cat if found
local cat = "";
if mw.title.getCurrentTitle().namespace == 0 and (mw.ustring.find(image, "|%s*thumb%s*[|%]]") or mw.ustring.find(image, "|%s*thumbnail%s*[|%]]")) then
cat = "[[Category:Pages using infoboxes with thumbnail images]]";
end
return image .. cat;
elseif mw.ustring.sub(image,1,2) == "{{" and mw.ustring.sub(image,1,3) ~= "{{{" then
return image;
elseif mw.ustring.sub(image,1,1) == "<" then
return image;
elseif mw.ustring.sub(image,1,5) == mw.ustring.char(127).."UNIQ" then
-- Found strip marker at begining, so pass don't process at all
return image;
elseif mw.ustring.sub(image,4,9) == "`UNIQ-" then
-- Found strip marker at begining, so pass don't process at all
return image;
else
local result = "";
local page = frame.args["page"];
local size = frame.args["size"];
local maxsize = frame.args["maxsize"];
local sizedefault = frame.args["sizedefault"];
local alt = frame.args["alt"];
local link = frame.args["link"];
local title = frame.args["title"];
local border = frame.args["border"];
local upright = frame.args["upright"] or "";
local thumbtime = frame.args["thumbtime"] or "";
local center = frame.args["center"];
local class = frame.args["class"];
-- remove prefix if exists
local allNames = mw.site.namespaces[6].aliases
allNames[#allNames + 1] = mw.site.namespaces[6].name
allNames[#allNames + 1] = mw.site.namespaces[6].canonicalName
for i, name in ipairs(allNames) do
if mw.ustring.lower(mw.ustring.sub(image, 1, mw.ustring.len(name) + 1)) == mw.ustring.lower(name .. ":") then
image = mw.ustring.sub(image, mw.ustring.len(name) + 2);
break
end
end
if maxsize ~= "" and maxsize ~= nil then
-- if no sizedefault then set to maxsize
if sizedefault == "" or sizedefault == nil then
sizedefault = maxsize
end
-- check to see if size bigger than maxsize
if size ~= "" and size ~= nil then
local sizenumber = tonumber(mw.ustring.match(size,"%d*")) or 0;
local maxsizenumber = tonumber(mw.ustring.match(maxsize,"%d*")) or 0;
if sizenumber>maxsizenumber and maxsizenumber>0 then
size = maxsize;
end
end
end
-- add px to size if just a number
if (tonumber(size) or 0) > 0 then
size = size .. "px";
end
-- add px to sizedefault if just a number
if (tonumber(sizedefault) or 0) > 0 then
sizedefault = sizedefault .. "px";
end
result = "[[File:" .. image;
if page ~= "" and page ~= nil then
result = result .. "|page=" .. page;
end
if size ~= "" and size ~= nil then
result = result .. "|" .. size;
elseif sizedefault ~= "" and sizedefault ~= nil then
result = result .. "|" .. sizedefault;
else
result = result .. "|frameless";
end
if center == "yes" then
result = result .. "|center"
end
if alt ~= "" and alt ~= nil then
result = result .. "|alt=" .. alt;
end
if link ~= "" and link ~= nil then
result = result .. "|link=" .. link;
end
if border == "yes" then
result = result .. "|border";
end
if upright == "yes" then
result = result .. "|upright";
elseif upright ~= "" then
result = result .. "|upright=" .. upright;
end
if thumbtime ~= "" then
result = result .. "|thumbtime=" .. thumbtime;
end
if class ~= nil and class ~= "" then
result = result .. "|class=" .. class;
end
-- if alt value is a keyword then do not use as a description
if alt == "thumbnail" or alt == "thumb" or alt == "frameless" or alt == "left" or alt == "center" or alt == "right" or alt == "upright" or alt == "border" or mw.ustring.match(alt or "", '^[0-9]*px$', 1) ~= nil then
alt = nil;
end
if title ~= "" and title ~= nil then
-- does title param contain any templatestyles? If yes then set to blank.
if mw.ustring.match(frame:preprocess(title), 'UNIQ%-%-templatestyles', 1) ~= nil then
title = nil;
end
end
if title ~= "" and title ~= nil then
result = result .. "|" .. title;
end
result = result .. "]]";
return result;
end
end
return i;
0ee5fe75ba239fc5c9cedc81ca11bdc0be068542
Template:Documentation
10
58
120
2022-03-29T02:14:34Z
[[w>Bsherr
0
consistent with new substitution template format
wikitext
text/x-wiki
{{#invoke:documentation|main|_content={{ {{#invoke:documentation|contentTitle}}}}}}<noinclude>
<!-- Add categories to the /doc subpage -->
</noinclude>
9e62b964e96c4e3d478edecbfcb3c0338ae8a276
640
120
2022-09-30T01:43:37Z
[[cln>MacFan4000
0
4 revisions imported from [[:meta:Template:Documentation]]: this is useful and was on templateiwki
wikitext
text/x-wiki
{{#invoke:documentation|main|_content={{ {{#invoke:documentation|contentTitle}}}}}}<noinclude>[[Category:Templates]]</noinclude>
9885bb4fa99bf3d5b960e73606bbb8eed3026877
Template:If empty
10
201
408
2022-04-03T20:56:41Z
Wugapodes
12
Changed protection settings for "[[Template:If empty]]": [[WP:High-risk templates|Highly visible template]]: used on 2 million pages and permanently cascade protected; matches module protection ([Edit=Require administrator access] (indefinite) [Move=Require administrator access] (indefinite))
wikitext
text/x-wiki
{{<includeonly>safesubst:</includeonly>#invoke:If empty|main}}<noinclude>{{Documentation}}</noinclude>
745940b7bdde8a1585c887ee4ee5ce81d98461a4
Template:DOW
10
1052
2165
2022-04-16T02:39:11Z
[[]]>Thrakkx
0
Like [[Template:WIA]] and [[Template:POW]], the parentheses should not be part of the link
wikitext
text/x-wiki
([[Killed in action|{{abbr|DOW|Died of wounds}}]])<noinclude>
<!-- Add categories and interwikis to the /doc subpage, not here! -->
{{Documentation}}
</noinclude>
a14551ef11993cd99ef9b8d4f781f0feaf2e7640
Template:Country data European Union
10
250
506
2022-04-18T01:09:30Z
[[w>Paine Ellsworth
0
per edit request on talk page - remove shortname alias
wikitext
text/x-wiki
{{ {{{1<noinclude>|country showdata</noinclude>}}}
| alias = European Union
| flag alias = Flag of Europe.svg
| size = {{{size|}}}
| name = {{{name|}}}
<noinclude>
| redir1 = EU
| related1 = Europe
</noinclude>
}}
a0a90732df569849342cb7fb84f87ad11d803cb7
Template:Infobox country
10
324
669
2022-05-21T18:18:18Z
[[]]>Primefac
0
fix pipe parameter issue
wikitext
text/x-wiki
{{infobox
|templatestyles = Template:Infobox country/styles.css
| bodyclass = ib-country vcard
| aboveclass = adr
| above =
{{#if:{{{conventional_long_name|}}}{{{native_name|}}}{{{name|}}}
| {{#if:{{{conventional_long_name|}}}
|<div class="fn org country-name">{{{conventional_long_name|}}}</div>
}}{{#if:{{{native_name|}}}{{{name|}}}
|<div class="ib-country-names"><!--
-->{{br separated entries
|{{{native_name|}}}
|{{#if:{{{name|}}}
|<div class="ib-country-name-style fn org country-name">{{{name|}}}</div>
}}}}</div>
}}<!--
-->{{#ifeq:{{{micronation|}}}|yes
|<span class="fn org">[[Micronation]]</span>
}}
}}
| subheader = {{#if:{{{life_span|}}} | {{{life_span}}} | {{#if:{{{year_start|}}}|{{{year_start}}}{{#if:{{{year_end|}}}|–{{{year_end}}} }} }} }}
| image1 = {{#if:{{{image_coat|}}}{{{image_symbol|}}}{{{image_flag|}}}{{{image_flag2|}}}
|{{infobox country/imagetable
|image1a = {{#invoke:InfoboxImage|InfoboxImage|suppressplaceholder={{main other||no}}|image={{{image_flag|}}}|sizedefault=125px|size={{{flag_width|{{{flag_size|}}}}}}|maxsize=250|border={{yesno |{{{flag_border|}}}|yes=yes|blank=yes}}|alt={{{alt_flag|{{{flag_alt|}}}}}}|title=Flag of {{{common_name|{{{name|{{{linking_name|{{PAGENAME}}}}}}}}}}}}}
|image1b = {{#invoke:InfoboxImage|InfoboxImage|suppressplaceholder={{main other||no}}|image={{{image_flag2|}}}|sizedefault=125px|size={{{flag_width|}}}|maxsize=250|border={{yesno |{{{flag2_border|}}}|yes=yes|blank=yes}}|alt={{{alt_flag2|{{{flag_alt2|}}}}}}}}
|caption1= {{#ifexist:{{if empty |{{{flag_type_article|}}} |{{{flag|}}} | {{if empty |{{{flag_type|}}} |Flag}} of {{if empty |{{{linking_name|}}} |{{{common_name|}}} |{{{name|}}} |{{PAGENAME}} }} }} |[[{{if empty |{{{flag_type_article|}}} |{{{flag|}}} |{{if empty |{{{flag_type|}}} |Flag}} of {{if empty |{{{linking_name|}}} |{{{common_name|}}} |{{{name|}}} |{{PAGENAME}} }} }}|{{if empty |{{{flag_caption|}}} |{{{flag_type|}}} |Flag}}]] |{{if empty |{{{flag_caption|}}} |{{{flag_type|}}} |Flag}} }}
|image2 = {{#invoke:InfoboxImage|InfoboxImage|suppressplaceholder={{main other||no}}|image={{if empty|{{{image_coat|}}}|{{{image_symbol|}}}}} |size={{{symbol_width|{{{coa_size|}}}}}}|sizedefault=85px|alt={{#if:{{{image_coat|}}}|{{{alt_coat|{{{coat_alt|}}}}}}|{{{alt_symbol|}}}}}|title={{{symbol_type|Coat of arms}}} of {{{common_name|{{{name|{{{linking_name|{{PAGENAME}}}}}}}}}}}}}
|caption2= {{#ifexist:{{if empty |{{{symbol_type_article|}}} |{{{symbol|}}} |{{if empty |{{{symbol_type|}}} |Coat of arms}} of {{if empty |{{{linking_name|}}} |{{{common_name|}}} |{{{name|}}} |{{PAGENAME}} }} }} |[[{{if empty |{{{symbol_type_article|}}} |{{{symbol|}}} |{{if empty |{{{symbol_type|}}} |Coat of arms}} of {{if empty |{{{linking_name|}}} |{{{common_name|}}} |{{{name|}}} |{{PAGENAME}} }} }} | {{if empty |{{{symbol_type|}}} |Coat of arms}}]] |{{if empty |{{{symbol_type|}}} |Coat of arms}} }}
}} }}
| data1 = {{#if:{{{national_motto|}}}{{{motto|}}}
|'''Motto: '''{{if empty|{{{motto|}}}|{{{national_motto|}}}}}<!--
-->{{#if:{{{englishmotto|}}}|<div>{{{englishmotto}}}</div> }}
}}
| class2 = anthem
| data2 = {{#if:{{{national_anthem|}}}{{{anthem|}}}
|'''Anthem:''' {{if empty|{{{national_anthem|}}}|{{{anthem|}}}}}
}}{{#if:{{{anthems|}}}
|'''Anthems:''' {{{anthems}}}
}}{{#if:{{{royal_anthem|}}}
|
<div class="ib-country-anthem">'''[[Royal anthem]]:''' {{{royal_anthem}}}</div>
}}{{#if:{{{flag_anthem|}}}
|
<div class="ib-country-anthem">'''[[Flag anthem]]:''' {{{flag_anthem}}}</div>
}}{{#if:{{{national_march|}}}
|
<div class="ib-country-anthem">'''National march:''' {{{national_march}}}</div>
}}{{#if:{{{territorial_anthem|}}}
|
<div class="ib-country-anthem">'''Territorial anthem:''' {{{territorial_anthem}}}</div>
}}{{#if:{{{regional_anthem|}}}
|
<div class="ib-country-anthem">'''Regional anthem:''' {{{regional_anthem}}}</div>
}}{{#if:{{{state_anthem|}}}
|
<div class="ib-country-anthem">'''State anthem:''' {{{state_anthem}}}</div>
}}{{#if:{{{march|}}}
|
<div class="ib-country-anthem">'''March:''' {{{march}}}</div>
}}
| data3 = {{#if:{{{other_symbol|}}}{{{text_symbol|}}}
|{{#if:{{{other_symbol_type|}}}{{{text_symbol_type|}}}
| '''{{if empty|{{{other_symbol_type|}}}|{{{text_symbol_type|}}}}}'''<br/>}}<!--
-->{{if empty|{{{other_symbol|}}}|{{{text_symbol|}}}}}
}}
| data4 = {{#if:{{{image_map|}}}
|{{#invoke:InfoboxImage|InfoboxImage|image={{{image_map|}}}|size={{{map_width|{{{image_map_size|}}}}}}|upright=1.15|alt={{{alt_map|{{{image_map_alt|}}}}}}|title={{{map_caption|{{{image_map_caption|Location of {{{common_name|{{{name|{{{linking_name|{{PAGENAME}} }}} }}} }}} }}} }}} }}<!--
-->{{#if:{{{map_caption|{{{image_map_caption|}}}}}}|<div class="ib-country-map-caption">{{{map_caption|{{{image_map_caption|}}}}}}</div>}} }}
| data5 = {{#if:{{{image_map2|}}}
|{{#invoke:InfoboxImage|InfoboxImage|image={{{image_map2|}}}|size={{{map2_width|{{{image_map2_size|}}}}}}|upright=1.15|alt={{{alt_map2|{{{image_map2_alt|}}}}}}|title={{{map_caption2|{{{image_map2_caption|Location of {{{common_name|{{{name|{{{linking_name|{{PAGENAME}} }}} }}} }}} }}} }}} }}<!--
-->{{#if:{{{map_caption2|{{{image_map2_caption|}}}}}}|<div class="ib-country-map-caption">{{{map_caption2|{{{image_map2_caption|}}}}}}</div>}} }}
| label6 = Status
| data6 = {{#if:{{{status|}}}|{{Infobox country/status text|status={{{status|}}}|status_text={{{status_text|}}}|empire={{{empire|}}}|year_end={{{year_end|}}}|year_exile_start={{{year_exile_start|}}}|year_exile_end={{{year_exile_end|}}} }} }}
| label7 = Location
| data7 = {{{loctext|}}}
| label8 = {{#if:{{{capital_type|}}} | {{{capital_type}}} | Capital }}{{#ifeq: {{#ifeq:{{{largest_city|}}}{{{largest_settlement|}}}|capital
|capital<!--
-->|{{#switch:{{{capital}}}
| [[{{{largest_city|}}}{{{largest_settlement|}}}]] = capital
| {{{largest_city|}}}{{{largest_settlement|}}} = capital
| not capital
}}<!--
-->}}|capital <!--
(#ifeq:)-->|<!------------------------------------------
capital is largest_city/_settlement:
-------------------------------------------
--><div class="ib-country-largest">and {{{largest_settlement_type|largest city}}}</div>
}}
| data8 = {{#if:{{{capital|}}}|{{{capital}}}{{#if:{{{coordinates|}}}|<br/>{{#invoke:Coordinates|coordinsert|{{{coordinates}}}|type:city}}}} }}
| rowclass9 = {{#if:{{{capital|}}}|mergedrow}}
| label9 = Capital-in-exile
| data9 = {{#ifexist:{{{capital_exile|}}}|[[{{{capital_exile|}}}]]|{{{capital_exile|}}}}}
| rowclass10 = {{#if:{{{capital|}}}|mergedrow}}
| label10 = {{#if:{{{admin_center_type|}}}| {{{admin_center_type}}} | Administrative center }}
| data10 = {{#switch:{{{admin_center|}}}
|capital | =
|[[{{{capital|}}}]] =
|{{{capital|}}} =
|#default = {{{admin_center}}}{{#if:{{{capital|}}}||{{#if:{{{coordinates|}}}|<br/>{{#invoke:Coordinates|coordinsert|{{{coordinates}}}|type:city}}}} }} }}
| rowclass11 = {{#if:{{{capital|}}}{{{admin_center|}}}|mergedbottomrow}}
| label11 = Largest {{{largest_settlement_type|city}}}
| data11 = {{#ifeq: {{#ifeq:{{{largest_city|}}}{{{largest_settlement|}}}|capital
|capital<!--
-->|{{#switch:{{{capital}}}
| [[{{{largest_city|}}}{{{largest_settlement|}}}]] = capital
| {{{largest_city|}}}{{{largest_settlement|}}} = capital
| not capital
}}<!--
-->}}|capital <!--
(#ifeq:)-->|<!-- nothing already appears above -->
| {{if empty| {{{largest_city|}}} | {{{largest_settlement|}}} }}
}}
| rowclass12 = mergedtoprow
| label12 = Official languages
| data12 = {{{official_languages|}}}
| rowclass13 = mergedrow
| label13 = <span class="ib-country-lang">{{#if:{{{recognized_languages|}}}|Recognized|Recognised}} languages</span>
| data13 = {{if empty| {{{recognized_languages|}}} | {{{recognised_languages|}}} }}
| rowclass14 = mergedrow
| label14 = <span class="ib-country-lang">{{#if:{{{recognized_national_languages|}}}|Recognized|Recognised}} national languages</span>
| data14 = {{if empty| {{{recognized_national_languages|}}} | {{{recognised_national_languages|}}} | {{{national_languages|}}} }}
| rowclass15 = mergedrow
| label15 = <span class="ib-country-lang">{{#if:{{{recognized_regional_languages|}}}|Recognized|Recognised}} regional languages</span>
| data15 = {{if empty| {{{recognized_regional_languages|}}} | {{{recognised_regional_languages|}}} | {{{regional_languages|}}} }}
| label16 = Common languages
| data16 = {{{common_languages|}}}
| rowclass17 = {{#ifeq:{{{languages2_sub|}}}|yes
|{{#ifeq:{{{languages_sub|}}}|yes |mergedrow}}
|{{#ifeq:{{{languages_sub|}}}|yes |mergedbottomrow}} }}
| label17 ={{#ifeq:{{{languages_sub|}}}|yes
|<div class="ib-country-lang">{{if empty| {{{languages_type|}}} | Other languages }}</div>
|{{if empty| {{{languages_type|}}} | Other languages }}
}}
| data17 = {{{languages|}}}
| rowclass18 = {{#ifeq:{{{languages2_sub|}}}|yes |mergedbottomrow}}
| label18 = {{#ifeq:{{{languages2_sub|}}}|yes
|<div class="ib-country-lang">{{if empty|{{{languages2_type|}}} | Other languages }}</div>
|{{if empty|{{{languages2_type|}}} | Other languages }}
}}
| data18 = {{{languages2|}}}
| label19 = [[Ethnic group|Ethnic groups]] <!--
-->{{#if:{{{ethnic_groups_year|}}} |<div class="ib-country-ethnic"> ({{{ethnic_groups_year}}}){{{ethnic_groups_ref|}}}</div>|<div class="ib-country-ethnic">{{{ethnic_groups_ref|}}}</div>}}
| data19 = {{{ethnic_groups|}}}
| label20 = Religion <!--
-->{{#if:{{{religion_year|}}} |<div class="ib-country-religion"> ({{{religion_year}}}){{{religion_ref|}}}</div>|<div class="ib-country-religion">{{{religion_ref|}}}</div>}}
| data20 = {{{religion|}}}
| label21 = [[Demonym|Demonym(s)]]
| data21 = {{#if:{{{demonym|}}}
|{{#ifexist:{{{demonym}}} people
| [[{{{demonym}}} people|{{{demonym}}}]]
| {{{demonym}}}
}}
}}
| label22 = Type
| data22 = {{{org_type|}}}
| label23 = {{if empty|{{{membership_type|}}} | Membership }}
| data23 = {{{membership|}}}
| label24 = {{#if:{{{government_type|}}}
| {{#if:{{{politics_link|}}}
| [[{{{politics_link}}}|{{#ifeq:{{{micronation|}}}|yes|Organizational structure|Government}}]]<!--
-->| {{#ifexist:Politics of {{{linking_name|{{{common_name|{{{name|{{PAGENAME}}}}}}}}}}}
| [[Politics of {{{linking_name|{{{common_name|{{{name|{{PAGENAME}}}}}}}}}}}|{{#ifeq:{{{micronation|}}}|yes|Organizational structure|Government}}]]<!--
-->| {{#ifeq:{{{micronation|}}}|yes|Organizational structure|Government}}<!--
-->}}<!--
-->}}<!--
-->}}
| data24 = {{{government_type|}}}
| header25 = {{#if:{{{government_type|}}} || {{#if:{{{leader_title1|}}}{{{leader_name1|}}}
| {{#if:{{{name|}}}{{{membership|}}}
| <!--template being used for geopolitical org:-->Leaders
| <!--template being used for country/territory: -->Government
}}
}} }}
| rowclass26 = mergedrow
| data26 = {{#if:{{{leader_name1|}}}|{{Infobox country/multirow|{{{leader_title1|}}} |{{{leader_name1|}}} |{{{leader_title2|}}} |{{{leader_name2|}}} |{{{leader_title3|}}} |{{{leader_name3|}}} |{{{leader_title4|}}} |{{{leader_name4|}}} |{{{leader_title5|}}} |{{{leader_name5|}}} |{{{leader_title6|}}} |{{{leader_name6|}}} |{{{leader_title7|}}} |{{{leader_name7|}}} |{{{leader_title8|}}} |{{{leader_name8|}}} |{{{leader_title9|}}} |{{{leader_name9|}}} |{{{leader_title10|}}} |{{{leader_name10|}}} |{{{leader_title11|}}} |{{{leader_name11|}}} |{{{leader_title12|}}} |{{{leader_name12|}}} |{{{leader_title13|}}} |{{{leader_name13|}}} |{{{leader_title14|}}} |{{{leader_name14|}}} |{{{leader_title15|}}} |{{{leader_name15|}}} }} }}
| rowclass27 = mergedrow
| label27 = {{#if:{{{title_leader|}}}| {{{title_leader}}} }}
| data27 = {{#if:{{{title_leader|}}}| }}
| rowclass28 = mergedrow
| data28 = {{#if:{{{year_leader1|}}} | {{Infobox country/multirow|{{{year_leader1|}}} |{{{leader1|}}} |{{{year_leader2|}}} |{{{leader2|}}} |{{{year_leader3|}}} |{{{leader3|}}} |{{{year_leader4|}}} |{{{leader4|}}} |{{{year_leader5|}}} |{{{leader5|}}} |{{{year_leader6|}}} |{{{leader6|}}} |{{{year_leader7|}}} |{{{leader7|}}} |{{{year_leader8|}}} |{{{leader8|}}} |{{{year_leader9|}}} |{{{leader9|}}} |{{{year_leader10|}}} |{{{leader10|}}} |{{{year_leader11|}}} |{{{leader11|}}}|{{{year_leader12|}}} |{{{leader12|}}}|{{{year_leader13|}}} |{{{leader13|}}}|{{{year_leader14|}}} |{{{leader14|}}}|{{{year_leader15|}}} |{{{leader15|}}} }} }}
| rowclass29 = mergedrow
| label29 = {{#if:{{{title_representative|}}}| {{{title_representative}}} }}
| data29 = {{#if:{{{title_representative|}}}| }}
| rowclass30 = mergedrow
| data30 = {{#if:{{{year_representative1|}}}|{{Infobox country/multirow|{{{year_representative1|}}} |{{{representative1|}}} |{{{year_representative2|}}} |{{{representative2|}}} |{{{year_representative3|}}} |{{{representative3|}}} |{{{year_representative4|}}} |{{{representative4|}}} |{{{year_representative5|}}} |{{{representative5|}}}|{{{year_representative6|}}} |{{{representative6|}}}|{{{year_representative7|}}} |{{{representative7|}}}|{{{year_representative8|}}} |{{{representative8|}}} }} }}
| rowclass31 = mergedrow
| label31 = {{#if:{{{title_deputy|}}}|{{{title_deputy}}} }}
| data31 = {{#if:{{{title_deputy|}}}| }}
| rowclass32 = mergedrow
| data32 = {{#if:{{{year_deputy1|}}}|{{Infobox country/multirow|{{{year_deputy1|}}} |{{{deputy1|}}} |{{{year_deputy2|}}} |{{{deputy2|}}} |{{{year_deputy3|}}} |{{{deputy3|}}} |{{{year_deputy4|}}} |{{{deputy4|}}} |{{{year_deputy5|}}} |{{{deputy5|}}} |{{{year_deputy6|}}} |{{{deputy6|}}}|{{{year_deputy7|}}} |{{{deputy7|}}}|{{{year_deputy8|}}} |{{{deputy8|}}}|{{{year_deputy9|}}} |{{{deputy9|}}}|{{{year_deputy10|}}} |{{{deputy10|}}}|{{{year_deputy11|}}} |{{{deputy11|}}}|{{{year_deputy12|}}} |{{{deputy12|}}}|{{{year_deputy13|}}} |{{{deputy13|}}}|{{{year_deputy14|}}} |{{{deputy14|}}}|{{{year_deputy15|}}} |{{{deputy15|}}} }} }}
| label40 = Legislature
| data40 = {{{legislature|}}}
| rowclass41 = mergedrow
| label41 = <div class="ib-country-fake-li">• {{#if:{{{type_house1|}}}|{{{type_house1}}}|[[Upper house]]}}</div>
| data41 = {{{upper_house|{{{house1|}}}}}}
| rowclass42 = mergedbottomrow
| label42 = <div class="ib-country-fake-li">• {{#if:{{{type_house2|}}}|{{{type_house2}}}|[[Lower house]]}}</div>
| data42 = {{{lower_house|{{{house2|}}}}}}
| rowclass43 = {{#if:{{{established_event1|}}} |mergedtoprow}}
| header43 = {{#if:{{{established_event1|}}}{{{sovereignty_type|}}}
|{{#if:{{{sovereignty_type|}}}
| {{{sovereignty_type}}}<!--
-->{{#if:{{{sovereignty_note|}}} | <div class="ib-country-sovereignty">{{{sovereignty_note}}}</div>}}
| {{#if:{{{established|}}}| | Establishment }}
}} }}
| label44 = Establishment
| data44 = {{#if:{{{sovereignty_type|}}}
|
|{{{established|}}}
}}
| label45 = {{#if:{{{era|}}}|Historical era|History}}
| data45 = {{#if:{{{era|}}} |{{#ifexist:{{{era|}}}|[[{{{era}}}]]|{{{era}}}}} | {{#if:{{{date_start|}}}{{{year_start|}}}| }}}}
| rowclass46 = {{#if:{{{established_event1|}}} |mergedrow |mergedbottomrow}}
| data46 = {{#if:{{{established_date1|}}}|{{Infobox country/multirow |{{{established_event1|}}} |{{{established_date1||}}} |{{{established_event2|}}} |{{{established_date2||}}} |{{{established_event3|}}} |{{{established_date3|}}} |{{{established_event4|}}} |{{{established_date4|}}} |{{{established_event5|}}} |{{{established_date5|}}} |{{{established_event6|}}} |{{{established_date6|}}} |{{{established_event7|}}} |{{{established_date7|}}} |{{{established_event8|}}} |{{{established_date8|}}} |{{{established_event9|}}} |{{{established_date9|}}} |{{{established_event10|}}} |{{{established_date10|}}} |{{{established_event11|}}} |{{{established_date11|}}} |{{{established_event12|}}} |{{{established_date12|}}} |{{{established_event13|}}} |{{{established_date13|}}} |{{{established_event14|}}} |{{{established_date14|}}} |{{{established_event15|}}} |{{{established_date15|}}} |{{{established_event16|}}} |{{{established_date16|}}} |{{{established_event17|}}} |{{{established_date17|}}} |{{{established_event18|}}} |{{{established_date18|}}} |{{{established_event19|}}} |{{{established_date19|}}} |{{{established_event20|}}} |{{{established_date20|}}} }} }}
| rowclass47 = {{#if:{{{date_start|}}}{{{year_start|}}} |mergedrow |mergedbottomrow}}
| data47 = {{#if:{{{date_start|}}}{{{year_start|}}}|{{Infobox country/multirow |{{{event_pre|}}} |{{{date_pre|}}} |{{if empty|{{{event_start|}}}|Established}} |{{{date_start|}}} {{{year_start|}}} |{{{event1|}}} |{{{date_event1|}}} |{{{event2|}}} |{{{date_event2|}}} |{{{event3|}}} |{{{date_event3|}}} |{{{event4|}}} |{{{date_event4|}}} |{{{event5|}}} |{{{date_event5|}}} |{{{event6|}}} |{{{date_event6|}}}|{{{event7|}}} |{{{date_event7|}}}|{{{event8|}}} |{{{date_event8|}}}|{{{event9|}}} |{{{date_event9|}}}|{{{event10|}}} |{{{date_event10|}}} |{{if empty|{{{event_end|}}}|Disestablished}} |{{{date_end|}}} {{{year_end|}}} |{{{event_post|}}} |{{{date_post|}}} }} }}
| rowclass60 = mergedtoprow
| header60 = {{#if:{{{area_km2|}}}{{{area_ha|}}}{{{area_sq_mi|}}}{{{area_acre|}}}{{{area_land_km2|}}}{{{area_land_ha|}}}{{{area_land_sq_mi|}}}{{{area_land_acre|}}}{{{area_water_km2|}}}{{{area_water_ha|}}}{{{area_water_sq_mi|}}}{{{area_water_acre|}}}{{{stat_area1|}}}{{{stat_area2|}}}{{{stat_area3|}}}{{{stat_area4|}}}{{{stat_area5|}}}
| {{#if:{{{area_link|}}}
| [[{{{area_link}}}|Area {{#ifeq:{{{micronation|}}}|yes|claimed|}}]]
| {{#ifexist:Geography of {{{linking_name|{{{common_name|{{{name|{{PAGENAME}}}}}}}}}}}
| [[Geography of {{{linking_name|{{{common_name|{{{name|{{PAGENAME}}}}}}}}}}}|Area {{#ifeq:{{{micronation|}}}|yes|claimed|}}]]
| Area {{#ifeq:{{{micronation|}}}|yes|claimed|}}<!--
-->}}<!--
-->}} }}
| rowclass61 = {{#if:{{{area_land_km2|}}}{{{area_land_ha|}}}{{{area_land_sq_mi|}}}{{{area_land_acre|}}}{{{area_water_km2|}}}{{{area_water_ha|}}}{{{area_water_sq_mi|}}}{{{area_water_acre|}}}{{{FR_metropole|}}}{{{area_label2|}}}{{{area_label3|}}}{{{percent_water|}}}{{{stat_area1|}}}{{{stat_area2|}}}{{{stat_area3|}}}{{{stat_area4|}}}{{{stat_area5|}}}|mergedrow|mergedbottomrow}}
| label61 = <div class="ib-country-fake-li">• {{{area_label|Total}}}{{{FR_foot4|}}}</div>
| data61 = {{#if:{{{area_km2|}}}{{{area_ha|}}}{{{area_sq_mi|}}}{{{area_acre|}}}
|{{#if:{{{area_km2|}}}{{{area_sq_mi|}}}
|{{convinfobox|{{{area_km2|}}}|km2|{{{area_sq_mi|}}}|sqmi|abbr=on}}
|{{#if:{{{area_ha|}}}{{{area_acre|}}}
|{{convinfobox|{{{area_ha|}}}|ha|{{{area_acre|}}}|acre|abbr=on}}
}}
}}{{{area_footnote|}}}{{#if:{{{area_rank|}}} | ([[List of countries and dependencies by area|{{{area_rank}}}]]) }}
}}
| rowclass62 = {{#if:{{{area_water_km2|}}}{{{area_water_ha|}}}{{{area_water_sq_mi|}}}{{{area_water_acre|}}}{{{FR_metropole|}}}{{{area_label2|}}}{{{area_label3|}}}{{{percent_water|}}}{{{stat_area1|}}}{{{stat_area2|}}}{{{stat_area3|}}}{{{stat_area4|}}}{{{stat_area5|}}}|mergedrow|mergedbottomrow}}
| label62 = <div class="ib-country-fake-li">• Land</div>
| data62 = {{#if:{{{area_land_km2|}}}{{{area_land_ha|}}}{{{area_land_sq_mi|}}}{{{area_land_acre|}}}
|{{#if:{{{area_land_km2|}}}{{{area_land_sq_mi|}}}
|{{convinfobox|{{{area_land_km2|}}}|km2|{{{area_land_sq_mi|}}}|sqmi|abbr=on}}
|{{#if:{{{area_land_ha|}}}{{{area_land_acre|}}}
|{{convinfobox|{{{area_land_ha|}}}|ha|{{{area_land_acre|}}}|acre|abbr=on}}
}}
}}{{{area_land_footnote|}}}
}}
| rowclass63 = {{#if:{{{FR_metropole|}}}{{{area_label2|}}}{{{area_label3|}}}{{{percent_water|}}}{{{stat_area1|}}}{{{stat_area2|}}}{{{stat_area3|}}}{{{stat_area4|}}}{{{stat_area5|}}}|mergedrow|mergedbottomrow}}
| label63 = <div class="ib-country-fake-li">• Water</div>
| data63 = {{#if:{{{area_water_km2|}}}{{{area_water_ha|}}}{{{area_water_sq_mi|}}}{{{area_water_acre|}}}
|{{#if:{{{area_water_km2|}}}{{{area_water_sq_mi|}}}
|{{convinfobox|{{{area_water_km2|}}}|km2|{{{area_water_sq_mi|}}}|sqmi|abbr=on}}
|{{#if:{{{area_water_ha|}}}{{{area_water_acre|}}}
|{{convinfobox|{{{area_water_ha|}}}|ha|{{{area_water_acre|}}}|acre|abbr=on}}
}}
}}{{{area_water_footnote|}}}
}}
| rowclass64 = {{#if:{{{FR_metropole|}}}{{{area_label2|}}}{{{area_label3|}}}{{{stat_area1|}}}{{{stat_area2|}}}{{{stat_area3|}}}{{{stat_area4|}}}{{{stat_area5|}}}|mergedrow|mergedbottomrow}}
| label64 = <div class="ib-country-fake-li">• Water (%)</div>
| data64 = {{{percent_water|}}}
| rowclass65 = {{#if:{{{FR_metropole|}}}{{{area_label3|}}}{{{stat_area1|}}}{{{stat_area2|}}}{{{stat_area3|}}}{{{stat_area4|}}}{{{stat_area5|}}}|mergedrow|mergedbottomrow}}
| label65 = <div class="ib-country-fake-li">• {{{area_label2|}}}</div>
| data65 = {{#if:{{{area_label2|}}}| {{{area_data2|}}} }}
| rowclass66 = {{#if:{{{FR_metropole|}}}{{{stat_area1|}}}{{{stat_area2|}}}{{{stat_area3|}}}{{{stat_area4|}}}{{{stat_area5|}}}|mergedrow|mergedbottomrow}}
| label66 = <div class="ib-country-fake-li">• {{{area_label3|}}}</div>
| data66 = {{#if:{{{area_label3|}}}| {{{area_data3|}}} }}
| rowclass67 = {{#if:{{{FR_metropole|}}}{{{stat_area2|}}}{{{stat_area3|}}}{{{stat_area4|}}}{{{stat_area5|}}}|mergedrow|mergedbottomrow}}
| label67 = {{{stat_year1|}}}{{{ref_area1|}}}
| data67 = {{#if: {{{stat_area1|}}} | {{convinfobox|{{{stat_area1|}}}|km2||sqmi}} }}
| rowclass68 = {{#if:{{{FR_metropole|}}}{{{stat_area3|}}}{{{stat_area4|}}}{{{stat_area5|}}}|mergedrow|mergedbottomrow}}
| label68 = {{{stat_year2|}}}{{{ref_area2|}}}
| data68 = {{#if: {{{stat_area2|}}} | {{convinfobox|{{{stat_area2|}}}|km2||sqmi}} }}
| rowclass69 = {{#if:{{{FR_metropole|}}}{{{stat_area4|}}}{{{stat_area5|}}}|mergedrow|mergedbottomrow}}
| label69 = {{{stat_year3|}}}{{{ref_area3|}}}
| data69 = {{#if: {{{stat_area3|}}} | {{convinfobox|{{{stat_area3|}}}|km2||sqmi}} }}
| rowclass70 = {{#if:{{{FR_metropole|}}}{{{stat_area5|}}}|mergedrow|mergedbottomrow}}
| label70 = {{{stat_year4|}}}{{{ref_area4|}}}
| data70 = {{#if: {{{stat_area4|}}} | {{convinfobox|{{{stat_area4|}}}|km2||sqmi}} }}
| rowclass71 = {{#if:{{{FR_metropole|}}}|mergedrow|mergedbottomrow}}
| label71 = {{{stat_year5|}}}{{{ref_area5|}}}
| data71 = {{#if: {{{stat_area5|}}} | {{convinfobox|{{{stat_area5|}}}|km2||sqmi}} }}
| rowclass72 = mergedrow
| label72 = <div class="ib-country-fake-li">• {{{FR_metropole}}}</div>
| data72 = {{#if:{{{FR_metropole|}}}| <nowiki /> }}
| rowclass73 = mergedrow
| label73 = <div class="ib-country-fake-li2">• [[Institut Géographique National|IGN]]{{{FR_foot2|}}}</div>
| data73 = {{#if:{{{FR_metropole|}}}
|{{#if:{{{FR_IGN_area_km2|}}}{{{FR_IGN_area_sq_mi|}}}
|{{convinfobox|{{{FR_IGN_area_km2|}}}|km2|{{{FR_IGN_area_sq_mi|}}}|sqmi|abbr=on}}{{#if:{{{FR_IGN_area_rank|}}}| ([[List of countries and dependencies by area|{{{FR_IGN_area_rank|}}}]])}}
}}
}}
| rowclass89 = mergedbottomrow
| label89 = <div class="ib-country-fake-li2">• [[Cadastre]]{{{FR_foot3|}}}</div>
| data89 = {{#if:{{{FR_metropole|}}}
|{{#if:{{{FR_cadastre_area_km2|}}}{{{FR_cadastre_area_sq_mi|}}}
| {{convinfobox|{{{FR_cadastre_area_km2|}}}|km2|{{{FR_cadastre_area_sq_mi|}}}|sqmi|abbr=on}}{{#if:{{{FR_cadastre_area_rank|}}}| ([[List of countries and dependencies by area|{{{FR_cadastre_area_rank|}}}]])}}
}}
}}
| rowclass90 = mergedtoprow
| header90 = {{#if:{{{population_estimate|}}}{{{population_census|}}}{{{FR_metropole_population|}}}{{{stat_pop1|}}}{{{stat_pop2|}}}{{{stat_pop3|}}}{{{stat_pop4|}}}{{{stat_pop5|}}}
|{{#if:{{{population_link|}}}
| {{#ifeq:{{{population_link}}}|no|Population|[[{{{population_link}}}|Population]]}}<!--
-->| {{#ifexist:Demographics of {{{linking_name|{{{common_name|{{{name|{{PAGENAME}}}}}}}}}}}
| [[Demographics of {{{linking_name|{{{common_name|{{{name|{{PAGENAME}}}}}}}}}}}|Population]]<!--
-->| Population<!--
-->}}<!--
-->}} }}
| rowclass91 = mergedrow
| label91 = <div class="ib-country-fake-li">• {{#if:{{{population_estimate_year|}}} |{{{population_estimate_year}}} estimate|Estimate}}</div>
| data91 = {{#if:{{{population_estimate|}}}
|{{{population_estimate}}}<!--
-->{{#if:{{{population_estimate_rank|}}} | ([[List of countries and dependencies by population|{{{population_estimate_rank}}}]])}}
}}
| rowclass92 = mergedrow
| label92= <div class="ib-country-fake-li">• {{{population_label2|}}}</div>
| data92= {{#if:{{{population_label2|}}}|{{{population_data2|}}}}}
| rowclass93= mergedrow
| label93= <div class="ib-country-fake-li">• {{{population_label3|}}}</div>
| data93= {{#if:{{{population_label3|}}}|{{{population_data3|}}}}}
| rowclass94= mergedrow
| data94= {{#if:{{{stat_pop1|}}}{{{stat_pop2|}}}{{{stat_pop3|}}}{{{stat_pop4|}}}{{{stat_pop5|}}}|{{infobox country/multirow|{{{stat_year1|}}}{{{ref_pop1|}}} |{{{stat_pop1|}}}|{{{stat_year2|}}}{{{ref_pop2|}}} |{{{stat_pop2|}}}|{{{stat_year3|}}}{{{ref_pop3|}}} |{{{stat_pop3|}}}|{{{stat_year4|}}}{{{ref_pop4|}}} |{{{stat_pop4|}}}|{{{stat_year5|}}}{{{ref_pop5|}}} |{{{stat_pop5|}}} }} }}
| rowclass95= mergedrow
| label95= <div class="ib-country-fake-li">• {{#if:{{{population_census_year|}}} |{{{population_census_year}}} census|Census}}</div>
| data95= {{#if:{{{population_census|}}}
|{{{population_census}}}<!--
-->{{#if:{{{population_census_rank|}}} | ([[List of countries and dependencies by population|{{{population_census_rank}}}]])}}
}}
| rowclass96= mergedrow
| label96 = {{#if:{{{FR_metropole_population|}}}|{{#if:{{{FR_total_population_estimate_year|}}}|{{nobold|1= ({{{FR_total_population_estimate_year}}})}}}}}}
| data96 = {{#if:{{{FR_metropole_population|}}}|{{#if:{{{FR_total_population_estimate_year|}}}|<nowiki />}}}}
| rowclass97 = mergedrow
| label97= <div class="ib-country-fake-li">• Total{{{FR_foot|}}}</div>
| data97= {{#if:{{{FR_metropole_population|}}}|{{#if:{{{FR_total_population_estimate|}}}
|{{{FR_total_population_estimate}}}{{#if:{{{FR_total_population_estimate_rank|}}}| ([[List of countries by population in 2005|{{{FR_total_population_estimate_rank}}}]])}}
}} }}
| rowclass98 = mergedrow
| label98= <div class="ib-country-fake-li">• {{{FR_metropole}}}</div>
| data98= {{#if:{{{FR_metropole_population|}}}|{{{FR_metropole_population}}}{{#if:{{{FR_metropole_population_estimate_rank|}}}
| ([[List of countries by population in 2005|{{{FR_metropole_population_estimate_rank}}}]])}}
}}
| rowclass99 = mergedbottomrow
| label99= <div class="ib-country-fake-li">• Density{{{FR_foot5|}}}</div>
| data99= {{#if:{{{population_density_km2|}}}{{{population_density_sq_mi|}}}
| {{convinfobox|{{{population_density_km2|}}}|/km2|{{{population_density_sq_mi|}}}|/sqmi|1|abbr=on}}{{{pop_den_footnote|}}}<!--
-->{{#if:{{{population_density_rank|}}} | ([[List of countries and dependencies by population density|{{{population_density_rank}}}]])}}
}}
| rowclass100 = {{#if:{{{population_estimate|}}}{{{population_census|}}}{{{FR_metropole_population|}}}|mergedbottomrow|mergedtoprow}}
| label100 = Membership
| data100= {{{nummembers|}}}
| rowclass101= mergedtoprow
| label101= {{#ifeq:{{{micronation|}}}|yes|Claimed|}} [[Gross domestic product|GDP]] {{nobold|([[Purchasing power parity|PPP]])}}
| data101= {{#if:{{{GDP_PPP|}}}{{{GDP_PPP_per_capita|}}}
|{{#if:{{{GDP_PPP_year|}}} |{{{GDP_PPP_year}}} }}estimate
}}
| rowclass102= mergedrow
| label102= <div class="ib-country-fake-li">• Total</div>
| data102= {{#if:{{{GDP_PPP|}}}
|{{{GDP_PPP}}}<!--
-->{{#if:{{{GDP_PPP_rank|}}} | ([[List of countries by GDP (PPP)|{{{GDP_PPP_rank}}}]])}}
}}
| rowclass103= mergedbottomrow
| label103= <div class="ib-country-fake-li">• Per capita</div>
| data103= {{#if:{{{GDP_PPP_per_capita|}}}
|{{{GDP_PPP_per_capita}}}<!--
-->{{#if:{{{GDP_PPP_per_capita_rank|}}} | ([[List of countries by GDP (PPP) per capita|{{{GDP_PPP_per_capita_rank}}}]])}}
}}
| rowclass104= mergedtoprow
| label104= {{#ifeq:{{{micronation|}}}|yes|Claimed|}} [[Gross domestic product|GDP]] {{nobold|(nominal)}}
| data104= {{#if:{{{GDP_nominal|}}}{{{GDP_nominal_per_capita|}}}
|{{#if:{{{GDP_nominal_year|}}} |{{{GDP_nominal_year}}} }}estimate
}}
| rowclass105= mergedrow
| label105= <div class="ib-country-fake-li">• Total</div>
| data105= {{#if:{{{GDP_nominal|}}}
|{{{GDP_nominal}}}<!--
-->{{#if:{{{GDP_nominal_rank|}}} | ([[List of countries by GDP (nominal)|{{{GDP_nominal_rank}}}]])}}
}}
| rowclass106= mergedbottomrow
| label106= <div class="ib-country-fake-li">• Per capita</div>
| data106= {{#if:{{{GDP_nominal_per_capita|}}}
| {{{GDP_nominal_per_capita}}}<!--
-->{{#if:{{{GDP_nominal_per_capita_rank|}}} | ([[List of countries by GDP (nominal) per capita|{{{GDP_nominal_per_capita_rank}}}]])}}
}}
| label107= [[Gini_coefficient|Gini]]{{#if:{{{Gini_year|}}} | {{nobold|1=({{{Gini_year}}})}}}}
| data107= {{#if:{{{Gini|}}}
| {{#switch:{{{Gini_change|}}}
|increase = {{increaseNegative}} <!--
-->|decrease = {{decreasePositive}} <!--
-->|steady = {{steady}} <!--
-->}}{{{Gini}}}{{{Gini_ref|}}}<br/><!--
---------Evaluate and add Gini category:----------
-->{{nowrap|1=<!--
-->{{#iferror:<!--
-->{{#ifexpr:{{{Gini}}}>100 <!--
-->| {{error|Error: Gini value above 100}}<!--Handled by outer #iferror, not visible to users--><!--
-->| {{#ifexpr:{{{Gini}}}>=60 |{{color|red|very high}}<!--
-->| {{#ifexpr:{{{Gini}}}>=46 <!--
-->| {{color|darkred|high}}<!--
-->| {{#ifexpr:{{{Gini}}}>=30 <!--
-->| {{color|orange|medium}}<!--
-->| {{#ifexpr:{{{Gini}}}>=0 <!--
-->| {{color|forestgreen|low}}<!--
-->| {{error|Error:Gini value below 0}}<!--Handled by outer #iferror, not visible to users--><!--
-->}}<!--
-->}}<!--
-->}}<!--
-->}}<!--
-->}}<!--
-->| {{error|Error: Invalid Gini value}}{{#ifeq: {{NAMESPACE}} | {{ns:0}} | [[Category:Country articles requiring maintenance]] }}<!--
-->}}<!--
-->}}<!--
-----------Add Gini_rank (if supplied):----------
-->{{#if:{{{Gini_rank|}}}
| · [[List of countries by income equality|{{{Gini_rank}}}]]<!--
-->}}<!--
-->}}
| label108= [[Human Development Index|HDI]]{{#if:{{{HDI_year|}}} | {{nobold|1=({{{HDI_year}}})}}}}
| data108= {{#if:{{{HDI|}}}
| {{#switch:{{{HDI_change|}}}
|increase = {{increase}} <!--
-->|decrease = {{decrease}} <!--
-->|steady = {{steady}} <!--
-->}}{{{HDI}}}{{{HDI_ref|}}}<br/><!--
---------Evaluate and add HDI category:---------
-->{{nowrap|1=<!--
-->{{#iferror:<!--
-->{{#ifexpr:{{{HDI}}}>1 <!--
-->| {{error|Error: HDI value greater than 1}}<!--Handled by outer #iferror, not visible to users--><!--
-->| {{#ifexpr:{{{HDI}}}>0.799 <!--
-->| {{color|darkgreen|very high}}<!--
-->| {{#ifexpr:{{{HDI}}}>0.699 <!--
-->| {{color|forestgreen|high}}<!--
-->| {{#ifexpr:{{{HDI}}}>0.549 <!--
-->| {{color|orange|medium}}<!--
-->| {{#ifexpr:{{{HDI}}}>=0.000<!--
-->| {{color|red|low}}<!--
-->| {{error|Error: HDI value less than 0}}<!--Handled by outer #iferror, not visible to users--><!--
-->}}<!--
-->}}<!--
-->}}<!--
-->}}<!--
-->}}<!--
-->| {{error|Error: Invalid HDI value}}{{#ifeq: {{NAMESPACE}} | {{ns:0}} | [[Category:Country articles requiring maintenance]] }}<!--
-->}}<!--
-->}}<!--
----------Add HDI_rank (if supplied):-----------
-->{{#if:{{{HDI_rank|}}}
| · [[List of countries by Human Development Index|{{{HDI_rank}}}]]<!--
-->}}<!--
-->}}
| label109= {{#ifeq:{{{micronation|}}}|yes|Purported currency|Currency}}
| data109= {{#if:{{{currency|}}}
| {{{currency}}} {{#if:{{{currency_code|}}} |([[ISO 4217|{{{currency_code}}}]])}}
}}
| rowclass119= {{#if:{{{utc_offset_DST|}}}{{{DST_note|}}} |mergedtoprow}}
| label119= Time zone
| data119= {{#if:{{{utc_offset|}}}
|{{nowrap|[[Coordinated Universal Time|UTC]]{{{utc_offset}}}}} {{#if:{{{time_zone|}}}|({{{time_zone}}})}}
|{{{time_zone|}}}
}}
| rowclass120= {{#if:{{{DST_note|}}} |mergedrow |mergedbottomrow}}
| label120= <div class="ib-country-fake-li">• Summer ([[Daylight saving time|DST]])</div>
| data120= {{#if:{{{utc_offset_DST|}}}
|{{nowrap|[[Coordinated Universal Time|UTC]]{{{utc_offset_DST}}}}} {{#if:{{{time_zone_DST|}}}|({{{time_zone_DST}}})|{{#if:{{{DST|}}}|({{{DST}}})}}}}
|{{#if:{{{time_zone_DST|}}}|{{{time_zone_DST}}}|{{{DST|}}}}}
}}
| rowclass121= mergedbottomrow
| label121= <nowiki />
| data121= {{{DST_note|}}}
| label122 = [[Antipodes]]
| data122= {{{antipodes|}}}
| label123 = Date format
| data123= {{{date_format|}}}
| label125= [[Left- and right-hand traffic|Driving side]]
| data125= {{#if:{{{drives_on|}}} | {{lcfirst:{{{drives_on}}}}} }}
| label126= {{#if:{{{calling_code|}}}
|{{#ifexist:Telephone numbers in {{{linking_name|{{{common_name|{{{name|{{PAGENAME}}}}}}}}}}}
| [[Telephone numbers in {{{linking_name|{{{common_name|{{{name|{{PAGENAME}}}}}}}}}}}|Calling code]]
| Calling code
}}
}}
| data126= {{{calling_code|}}}
| label127= [[ISO 3166|ISO 3166 code]]
| data127= {{#switch:{{{iso3166code|}}}
|omit = <!--(do nothing)-->
| = <!--if iso3166code is not supplied:
-->{{#if:{{{common_name|}}}
| {{#if:{{ISO 3166 code|{{{common_name}}}|nocat=true}}
| [[ISO 3166-2:{{ISO 3166 code|{{{common_name}}}}}|{{ISO 3166 code|{{{common_name}}}}}]]
}}
}}
|#default = [[ISO 3166-2:{{uc:{{{iso3166code}}}}}|{{uc:{{{iso3166code}}}}}]]
}}
| label128= [[Country code top-level domain|Internet TLD]]
| data128= {{{cctld|}}}
| data129 = {{#if:{{{official_website|}}}
|<div class="ib-country-website">'''Website'''<br/>{{{official_website}}}</div>
}}
| data130= {{#if:{{{image_map3|{{{location_map|}}}}}}
| {{#invoke:InfoboxImage|InfoboxImage|image={{{image_map3|{{{location_map|}}}}}}|size={{{map3_width|}}}|upright=1.15|alt={{{alt_map3|}}}|title=Location of {{{common_name|{{{name|{{{linking_name|{{PAGENAME}} }}} }}} }}} }}<!--
-->{{#if:{{{map_caption3|}}}|<div class="ib-country-map-caption3">{{{map_caption3|}}}</div>}}
}}
| data134 = {{#if:{{{p1|}}}{{{s1|}}}
|{{Infobox country/formernext|flag_p1={{{flag_p1|}}}|image_p1={{{image_p1|}}}|p1={{{p1|}}}|border_p1={{{border_p1|}}}|flag_p2={{{flag_p2|}}}|image_p2={{{image_p2|}}}|p2={{{p2|}}}|border_p2={{{border_p2|}}}|flag_p3={{{flag_p3|}}}|image_p3={{{image_p3|}}}|p3={{{p3|}}}|border_p3={{{border_p3|}}}|flag_p4={{{flag_p4|}}}|image_p4={{{image_p4|}}}|p4={{{p4|}}}|border_p4={{{border_p4|}}}|flag_p5={{{flag_p5|}}}|image_p5={{{image_p5|}}}|p5={{{p5|}}}|border_p5={{{border_p5|}}}|flag_p6={{{flag_p6|}}}|image_p6={{{image_p6|}}}|p6={{{p6|}}}|border_p6={{{border_p6|}}}|flag_p7={{{flag_p7|}}}|image_p7={{{image_p7|}}}|p7={{{p7|}}}|border_p7={{{border_p7|}}}|flag_p8={{{flag_p8|}}}|image_p8={{{image_p8|}}}|p8={{{p8|}}}|border_p8={{{border_p8|}}}|flag_p9={{{flag_p9|}}}|image_p9={{{image_p9|}}}|p9={{{p9|}}}|border_p9={{{border_p9|}}}|flag_p10={{{flag_p10|}}}|image_p10={{{image_p10|}}}|p10={{{p10|}}}|border_p10={{{border_p10|}}}|flag_p11={{{flag_p11|}}}|image_p11={{{image_p11|}}}|p11={{{p11|}}}|border_p11={{{border_p11|}}}|flag_p12={{{flag_p12|}}}|image_p12={{{image_p12|}}}|p12={{{p12|}}}|border_p12={{{border_p12|}}}|flag_p13={{{flag_p13|}}}|image_p13={{{image_p13|}}}|p13={{{p13|}}}|border_p13={{{border_p13|}}}|flag_p14={{{flag_p14|}}}|image_p14={{{image_p14|}}}|p14={{{p14|}}}|border_p14={{{border_p14|}}}|flag_p15={{{flag_p15|}}}|image_p15={{{image_p15|}}}|p15={{{p15|}}}|border_p15={{{border_p15|}}}|flag_p16={{{flag_p16|}}}|image_p16={{{image_p16|}}}|p16={{{p16|}}}|border_p16={{{border_p16|}}}|flag_p17={{{flag_p17|}}}|image_p17={{{image_p17|}}}|p17={{{p17|}}}|border_p17={{{border_p17|}}}|flag_p18={{{flag_p18|}}}|image_p18={{{image_p18|}}}|p18={{{p18|}}}|border_p18={{{border_p18|}}}|flag_p19={{{flag_p19|}}}|image_p19={{{image_p19|}}}|p19={{{p19|}}}|border_p19={{{border_p19|}}}|flag_p20={{{flag_p20|}}}|image_p20={{{image_p20|}}}|p20={{{p20|}}}|border_p20={{{border_p20|}}}|flag_p21={{{flag_p21|}}}|image_p21={{{image_p21|}}}|p21={{{p21|}}}|border_p21={{{border_p21|}}}|flag_s1={{{flag_s1|}}}|image_s1={{{image_s1|}}}|s1={{{s1|}}}|border_s1={{{border_s1|}}}|flag_s2={{{flag_s2|}}}|image_s2={{{image_s2|}}}|s2={{{s2|}}}|border_s2={{{border_s2|}}}|flag_s3={{{flag_s3|}}}|image_s3={{{image_s3|}}}|s3={{{s3|}}}|border_s3={{{border_s3|}}}|flag_s4={{{flag_s4|}}}|image_s4={{{image_s4|}}}|s4={{{s4|}}}|border_s4={{{border_s4|}}}|flag_s5={{{flag_s5|}}}|image_s5={{{image_s5|}}}|s5={{{s5|}}}|border_s5={{{border_s5|}}}|flag_s6={{{flag_s6|}}}|image_s6={{{image_s6|}}}|s6={{{s6|}}}|border_s6={{{border_s6|}}}|flag_s7={{{flag_s7|}}}|image_s7={{{image_s7|}}}|s7={{{s7|}}}|border_s7={{{border_s7|}}}|flag_s8={{{flag_s8|}}}|image_s8={{{image_s8|}}}|s8={{{s8|}}}|border_s8={{{border_s8|}}}|flag_s9={{{flag_s9|}}}|image_s9={{{image_s9|}}}|s9={{{s9|}}}|border_s9={{{border_s9|}}}|flag_s10={{{flag_s10|}}}|image_s10={{{image_s10|}}}|s10={{{s10|}}}|border_s10={{{border_s10|}}}|flag_s11={{{flag_s11|}}}|image_s11={{{image_s11|}}}|s11={{{s11|}}}|border_s11={{{border_s11|}}}|flag_s12={{{flag_s12|}}}|image_s12={{{image_s12|}}}|s12={{{s12|}}}|border_s12={{{border_s12|}}}|flag_s13={{{flag_s13|}}}|image_s13={{{image_s13|}}}|s13={{{s13|}}}|border_s13={{{border_s13|}}}|flag_s14={{{flag_s14|}}}|image_s14={{{image_s14|}}}|s14={{{s14|}}}|border_s14={{{border_s14|}}}|flag_s15={{{flag_s15|}}}|image_s15={{{image_s15|}}}|s15={{{s15|}}}|border_s15={{{border_s15|}}}|flag_s16={{{flag_s16|}}}|image_s16={{{image_s16|}}}|s16={{{s16|}}}|border_s16={{{border_s16|}}}|flag_s17={{{flag_s17|}}}|image_s17={{{image_s17|}}}|s17={{{s17|}}}|border_s17={{{border_s17|}}}|flag_s18={{{flag_s18|}}}|image_s18={{{image_s18|}}}|s18={{{s18|}}}|border_s18={{{border_s18|}}}|flag_s19={{{flag_s19|}}}|image_s19={{{image_s19|}}}|s19={{{s19|}}}|border_s19={{{border_s19|}}}|flag_s20={{{flag_s20|}}}|image_s20={{{image_s20|}}}|s20={{{s20|}}}|border_s20={{{border_s20|}}}|flag_s21={{{flag_s21|}}}|image_s21={{{image_s21|}}}|s21={{{s21|}}}|border_s21={{{border_s21|}}}}}
}}
| label135 = Today part of
| data135 = {{{today|}}}
| data136 = {{#if:{{{footnote_a|}}}{{{footnote_b|}}}{{{footnote_c|}}}{{{footnote_d|}}}{{{footnote_e|}}}{{{footnote_f|}}}{{{footnote_g|}}}{{{footnote_h|}}}
|<div class="ib-country-fn"><ol class="ib-country-fn-alpha">
{{#if:{{{footnote_a|}}}|<li value=1>{{{footnote_a|}}}</li>
}}{{#if:{{{footnote_b|}}}|<li value=2>{{{footnote_b|}}}</li>
}}{{#if:{{{footnote_c|}}}|<li value=3>{{{footnote_c|}}}</li>
}}{{#if:{{{footnote_d|}}}|<li value=4>{{{footnote_d|}}}</li>
}}{{#if:{{{footnote_e|}}}|<li value=5>{{{footnote_e|}}}</li>
}}{{#if:{{{footnote_f|}}}|<li value=6>{{{footnote_f|}}}</li>
}}{{#if:{{{footnote_g|}}}|<li value=7>{{{footnote_g|}}}</li>
}}{{#if:{{{footnote_h|}}}|<li value=8>{{{footnote_h|}}}</li>}}
</ol></div>}}
| data137 = {{#if:{{{footnote1|}}}{{{footnote2|}}}{{{footnote3|}}}{{{footnote4|}}}{{{footnote5|}}}{{{footnote6|}}}{{{footnote7|}}}{{{footnote8|}}}
|<div class="ib-country-fn"><ol class="ib-country-fn-num">
{{#if:{{{footnote1|}}}|<li value=1>{{{footnote1|}}}</li>
}}{{#if:{{{footnote2|}}}|<li value=2>{{{footnote2|}}}</li>
}}{{#if:{{{footnote3|}}}|<li value=3>{{{footnote3|}}}</li>
}}{{#if:{{{footnote4|}}}|<li value=4>{{{footnote4|}}}</li>
}}{{#if:{{{footnote5|}}}|<li value=5>{{{footnote5|}}}</li>
}}{{#if:{{{footnote6|}}}|<li value=6>{{{footnote6|}}}</li>
}}{{#if:{{{footnote7|}}}|<li value=7>{{{footnote7|}}}</li>
}}{{#if:{{{footnote8|}}}|<li value=8>{{{footnote8|}}}</li>}}
</ol></div>}}
| data138 = {{#if:{{{footnotes|}}}|<div class="ib-country-fn">{{{footnotes}}}{{#if:{{{footnotes2|}}}|<br>{{{footnotes2}}}}}</div>}}
| belowclass = mergedtoprow noprint
| below = {{#if:{{{navbar|}}}| {{navbar|{{{navbar|}}}}} }}
}}{{#invoke:Check for unknown parameters|check|unknown={{main other|[[Category:Pages using infobox country with unknown parameters|_VALUE_{{PAGENAME}}]]}}|preview=Page using [[Template:Infobox country]] with unknown parameter "_VALUE_"|ignoreblank=y| admin_center_type | admin_center | alt_coat | alt_flag | alt_flag2 | alt_map | alt_map2 | alt_map3 | alt_symbol | anthem | anthems | antipodes | area_acre | area_data2 | area_data3 | area_footnote | area_ha | area_km2 | area_label | area_label2 | area_label3 | area_land_acre | area_land_footnote | area_land_ha | area_land_km2 | area_land_sq_mi | area_link | area_rank | area_sq_mi | area_water_acre | area_water_footnote | area_water_ha | area_water_km2 | area_water_sq_mi | border_p1 | border_p2 | border_p3 | border_p4 | border_p5 | border_p6 | border_p7 | border_p8 | border_p9 | border_p10 | border_p11 | border_p12 | border_p13 | border_p14 | border_p15 | border_p16 | border_p17 | border_p18 | border_p19 | border_p20| border_p21 | border_s1 | border_s2 | border_s3 | border_s4 | border_s5 | border_s6 | border_s7 | border_s8 | border_s9 | border_s10 | border_s11 | border_s12 | border_s13 | border_s14 | border_s15 | border_s16 | border_s17 | border_s18 | border_s19 | border_s20 | border_s21 | calling_code | capital_exile | capital_type | capital | cctld | coa_size | coat_alt | common_languages | common_name | conventional_long_name | coordinates | currency_code | currency | date_end | date_event1 | date_event2 | date_event3 | date_event4 | date_event5 | date_event6 | date_event7 | date_event8 | date_event9 | date_event10 | date_format | date_post | date_pre | date_start | demonym | deputy1 | deputy2 | deputy3 | deputy4 | deputy5 | deputy6 | deputy7 | deputy8 | deputy9 | deputy10 | deputy11 | deputy12 | deputy13 | deputy14 | deputy15 | drives_on | DST_note | DST | empire | englishmotto | era | established_date1 | established_date2 | established_date3 | established_date4 | established_date5 | established_date6 | established_date7 | established_date8 | established_date9 | established_date10 | established_date11 | established_date12 | established_date13 | established_date14 | established_date15 | established_date16 | established_date17 | established_date18 | established_date19 | established_date20 | established_event1 | established_event2 | established_event3 | established_event4 | established_event5 | established_event6 | established_event7 | established_event8 | established_event9 | established_event10 | established_event11 | established_event12 | established_event13 | established_event14 | established_event15 | established_event16 | established_event17 | established_event18 | established_event19 | established_event20 | established | ethnic_groups_ref | ethnic_groups_year | ethnic_groups | event_end | event_post | event_pre | event_start | event1 | event2 | event3 | event4 | event5 | event6 | event7 | event8 | event9 | event10 | flag| flag_alt | flag_alt2 | flag_border | flag_caption | flag_caption | flag_p1 | flag_p2 | flag_p3 | flag_p4 | flag_p5 | flag_p6 | flag_p7 | flag_p8 | flag_p9 | flag_p10 | flag_p11 | flag_p12 | flag_p13 | flag_p14 | flag_p15 | flag_p16 | flag_p17 | flag_p18 | flag_p19 | flag_p20 | flag_p21 | flag_s1 | flag_s2 | flag_s3 | flag_s4 | flag_s5 | flag_s6 | flag_s7 | flag_s8 | flag_s9 | flag_s10 | flag_s11 | flag_s12 | flag_s13 | flag_s14 | flag_s15 | flag_s16 | flag_s17 | flag_s18 | flag_s19 | flag_s20 | flag_s21 | flag_size | flag_type | flag_type_article | flag_width | flag2_border | footnote_a | footnote_a | footnote_b | footnote_b | footnote_c | footnote_c | footnote_d | footnote_d | footnote_e | footnote_e | footnote_f | footnote_f | footnote_g | footnote_g | footnote_h | footnote_h | footnote1 | footnote1 | footnote2 | footnote2 | footnote3 | footnote3 | footnote4 | footnote4 | footnote5 | footnote5 | footnote6 | footnote6 | footnote7 | footnote7 | footnote8 | footnote8 | footnotes | footnotes2 | FR_cadastre_area_km2 | FR_cadastre_area_rank | FR_cadastre_area_sq_mi | FR_foot | FR_foot2 | FR_foot3 | FR_foot4 | FR_foot5 | FR_IGN_area_km2 | FR_IGN_area_rank | FR_IGN_area_sq_mi | FR_metropole_population_estimate_rank | FR_metropole_population | FR_metropole | FR_total_population_estimate_rank | FR_total_population_estimate_year | FR_total_population_estimate | GDP_nominal_per_capita_rank | GDP_nominal_per_capita | GDP_nominal_rank | GDP_nominal_year | GDP_nominal | GDP_PPP_per_capita_rank | GDP_PPP_per_capita | GDP_PPP_rank | GDP_PPP_year | GDP_PPP | Gini_change | Gini_rank | Gini_ref | Gini_year | Gini | government_type | HDI_change | HDI_rank | HDI_ref | HDI_year | HDI | house1 | house2 | image_coat | image_flag | image_flag2 | image_map_alt | image_map_caption | image_map_size | image_map | image_map2_alt | image_map2_caption | image_map2_size | image_map2 | image_map3 | image_p1 | image_p2 | image_p3 | image_p4 | image_p5 | image_p6 | image_p7 | image_p8 | image_p9 | image_p10 | image_p11 | image_p12 | image_p13 | image_p14 | image_p15 | image_p16 | image_p17 | image_p18 | image_p19 | image_p20 | image_p21 | image_s1 | image_s2 | image_s3 | image_s4 | image_s5 | image_s6 | image_s7 | image_s8 | image_s9 | image_s10 | image_s11 | image_s12 | image_s13 | image_s14 | image_s15 | image_s16 | image_s17 | image_s18 | image_s19 | image_s20 | image_s21 | image_symbol | iso3166code | languages_sub | languages_type | languages | languages2_sub | languages2_type | languages2 | largest_city | largest_settlement_type | largest_settlement | leader_name1 | leader_name2 | leader_name3 | leader_name4 | leader_name5 | leader_name6 | leader_name7 | leader_name8 | leader_name9 | leader_name10 | leader_name11 | leader_name12 | leader_name13 | leader_name14 | leader_name15 | leader_title1 | leader_title2 | leader_title3 | leader_title4 | leader_title5 | leader_title6 | leader_title7 | leader_title8 | leader_title9 | leader_title10 | leader_title11 | leader_title12 | leader_title13 | leader_title14 | leader_title15 | leader1 | leader2 | leader3 | leader4 | leader5 | leader6 | leader7 | leader8 | leader9 | leader10 | leader11 | leader12 | leader13 | leader14 | leader15 | legislature | life_span | linking_name | location_map | loctext | lower_house | map_caption | map_caption2 | map_caption3 | map_width | map2_width | map3_width | membership_type | membership | micronation | motto | name | national_anthem | national_languages | national_motto | native_name | navbar | nummembers | official_languages | official_website | org_type | other_symbol_type | other_symbol | p1 | p2 | p3 | p4 | p5 | p6 | p7 | p8 | p9 | p10 | p11 | p12 | p13 | p14 | p15 | p16 | p17 | p18 | p19 | p20 | p21 | patron_saint | patron_saints | percent_water | politics_link | pop_den_footnote | population_census_rank | population_census_year | population_census | population_data2 | population_data3 | population_density_km2 | population_density_rank | population_density_sq_mi | population_estimate_rank | population_estimate_year | population_estimate | population_label2 | population_label3 | population_link | recognised_languages | recognised_national_languages | recognised_regional_languages | recognized_languages | recognized_national_languages | ref_area1 | ref_area2 | ref_area3 | ref_area4 | ref_area5 | ref_pop1 | ref_pop2 | ref_pop3 | ref_pop4 | ref_pop5 | regional_languages | recognized_regional_languages | religion_ref | religion_year | religion | representative1 | representative2 | representative3 | representative4 | representative5 | representative6 | representative7 | representative8 | royal_anthem | flag_anthem | march | national_march | regional_anthem | territorial_anthem | state_anthem | s1 | s2 | s3 | s4 | s5 | s6 | s7 | s8 | s9 | s10 | s11 | s12 | s13 | s14 | s15 | s16 | s17 | s18 | s19 | s20 | s21 | sovereignty_note | sovereignty_type | stat_area1 | stat_area2 | stat_area3 | stat_area4 | stat_area5 | stat_pop1 | stat_pop2 | stat_pop3 | stat_pop4 | stat_pop5 | stat_year1 | stat_year2 | stat_year3 | stat_year4 | stat_year5 | status_text | status | symbol| symbol_type_article | symbol_type | symbol_width | text_symbol_type | text_symbol | time_zone_DST | time_zone | title_deputy | title_leader | title_representative | today | type_house1 | type_house2 | upper_house | utc_offset_DST | utc_offset | year_deputy1 | year_deputy2 | year_deputy3 | year_deputy4 | year_deputy5 | year_deputy6 | year_deputy7 | year_deputy8 | year_deputy9 | year_deputy10 | year_deputy11 | year_deputy12 | year_deputy13 | year_deputy14 | year_deputy15 | year_end | year_exile_end | year_exile_start | year_leader1 | year_leader2 | year_leader3 | year_leader4 | year_leader5 | year_leader6 | year_leader7 | year_leader8 | year_leader9 | year_leader10 | year_leader11 | year_leader12 | year_leader13 | year_leader14 | year_leader15 | year_representative1 | year_representative2 | year_representative3 | year_representative4 | year_representative5 | year_representative6 | year_representative7 | year_representative8 | year_start}}{{main other|
{{#if:{{both|{{{image_coat|}}}|{{{image_symbol|}}}}}|[[Category:Pages using infobox country with syntax problems|A]]
}}{{#if:{{both|{{{alt_coat|}}}|{{{alt_symbol|}}}}}|[[Category:Pages using infobox country with syntax problems|B]]
}}{{#if:{{both|{{{motto|}}}|{{{national_motto|}}}}}|[[Category:Pages using infobox country with syntax problems|C]]
}}{{#if:{{both|{{{national_anthem|}}}|{{{anthem|}}}}}|[[Category:Pages using infobox country with syntax problems|D]]
}}{{#if:{{both|{{{other_symbol|}}}|{{{text_symbol|}}}}}|[[Category:Pages using infobox country with syntax problems|E]]
}}{{#if:{{both|{{{other_symbol_type|}}}|{{{text_symbol_type|}}}}}|[[Category:Pages using infobox country with syntax problems|F]]
}}{{#if:{{both|{{{largest_city|}}}|{{{largest_settlement|}}}}}|[[Category:Pages using infobox country with syntax problems|G]]
}}{{#if:{{both|{{{recognized_languages|}}}|{{{recognised_languages|}}}}}|[[Category:Pages using infobox country with syntax problems|H]]
}}{{#if:{{both|{{{recognized_national_languages|}}}|{{{recognised_national_languages|}}}}}{{both|{{{recognized_regional_languages|}}}|{{{recognised_regional_languages|}}}}}|[[Category:Pages using infobox country with syntax problems|I]]
}}{{#if:{{{official_languages|}}}||{{#if:{{{recognized_languages|}}}{{{recognised_languages|}}}{{{recognized_national_languages|}}}{{{recognised_national_languages|}}}{{{recognized_regional_languages|}}}{{{recognised_regional_languages|}}}|[[Category:Pages using infobox country with syntax problems|J]]}}
}}{{#if:{{both|{{{area_km2|}}}|{{{area_ha|}}}}}{{both|{{{area_land_km2|}}}|{{{area_land_ha|}}}}}{{both|{{{area_water_km2|}}}|{{{area_water_ha|}}}}}|[[Category:Pages using infobox country with syntax problems|K]]
}}{{#if:{{both|{{{DST|}}}|{{{time_zone_DST|}}}}}|[[Category:Pages using infobox country with syntax problems|L]]
}}{{#if:{{{time_zone|}}}{{{utc_offset|}}}||{{#if:{{{time_zone_DST|}}}{{{utc_offset_DST|}}}|[[Category:Pages using infobox country with syntax problems|M]]}}
}}{{#if:{{both|{{{sovereignty_type|}}}|{{{established|}}} }}|[[Category:Pages using infobox country with syntax problems|O]]
}}{{#if:{{{languages|}}}|{{#if:{{{languages_type|}}}||[[Category:Pages using infobox country with syntax problems|P]]}}
}}{{#if:{{{languages2|}}}|{{#if:{{{languages2_type|}}}||[[Category:Pages using infobox country with syntax problems|P]]}}
}}{{#if:{{{flag_type|}}}|[[Category:Pages using infobox country or infobox former country with the flag caption or type parameters|T{{PAGENAME}}]]
}}{{#if:{{{flag_caption|}}}|[[Category:Pages using infobox country or infobox former country with the flag caption or type parameters|C{{PAGENAME}}]]
}}{{#if:{{{symbol_type|}}}|[[Category:Pages using infobox country or infobox former country with the symbol caption or type parameters|T{{PAGENAME}}]]
}}{{#if:{{{symbol_caption|}}}|[[Category:Pages using infobox country or infobox former country with the symbol caption or type parameters|C{{PAGENAME}}]]
}}}}<!--
Tracking categories from merge with {{infobox former country}}. After all cats are empty/have been checked, these can be removed.
-->{{#if:{{{status_text|}}}|{{#ifeq:{{ucfirst:{{{status|}}}}}|Colony|{{main other|[[Category:Former country articles using status text with Colony or Exile]]}}|{{#ifeq:{{ucfirst:{{{status|}}}}}|Exile|{{main other|[[Category:Former country articles using status text with Colony or Exile]]}}}}}}
}}<!--End of former country tracking cats--><noinclude>
{{documentation}}
</noinclude>
be47d674190a41bd16abfd73bfb38394b5c704f2
Template:Module rating
10
88
178
2022-06-03T15:10:23Z
[[w>The Anome
0
Reverted edits by [[Special:Contribs/Dawn PScLim|Dawn PScLim]] ([[User talk:Dawn PScLim|talk]]) to last version by Alexis Jazz
wikitext
text/x-wiki
<includeonly>{{#ifeq:{{SUBPAGENAME}}|doc|<!--do not show protection level of the module on the doc page, use the second and optionally third parameter if the doc page is also protected -->{{#if:{{{2|}}}|{{Pp|{{{2}}}|action={{{3|}}}}}}}|{{Module other|{{ombox
| type = notice
| image = {{#switch: {{{1|}}}
| pre-alpha | prealpha | pa = [[File:Ambox warning blue construction.svg|40x40px|link=|alt=Pre-alpha]]
| alpha | a = [[File:Alpha lowercase.svg|26x26px|link=|alt=Alpha]]
| beta | b = [[File:Greek lc beta.svg|40x40px|link=|alt=Beta]]
| release | r | general | g = [[File:Green check.svg|40x40px|link=|alt=Ready for use]]
| protected | protect | p = [[File:{{#switch:{{#invoke:Effective protection level|edit|{{#switch:{{SUBPAGENAME}}|doc|sandbox={{FULLBASEPAGENAME}}|{{FULLPAGENAME}}}}}}|autoconfirmed=Semi|extendedconfirmed=Extended|accountcreator|templateeditor=Template|#default=Full}}-protection-shackle.svg|40x40px|link=|alt=Protected]]
| semiprotected | semiprotect | semi =[[File:Semi-protection-shackle.svg|40x40px|link=|alt=Semi-protected]]
}}
| style =
| textstyle =
| text = {{#switch: {{{1|}}}
| pre-alpha | prealpha | pa = This module is rated as [[:Category:Modules in pre-alpha development|pre-alpha]]. It is unfinished, and may or may not be in active development. It should not be used from article namespace pages. Modules remain pre-alpha until the original editor (or someone who takes one over if it is abandoned for some time) is satisfied with the basic structure.<!--
-->{{#switch: {{SUBPAGENAME}}|doc|sandbox=<!-- No category for /doc or /sandbox subpages -->
| {{#ifeq: {{{nocat|}}} | true | <!-- No category if user sets nocat=true --> | [[Category:Modules in pre-alpha development|{{PAGENAME}}]] }}
}}
| alpha | a = This module is rated as [[:Category:Modules in alpha|alpha]]. It is ready for third-party input, and may be used on a few pages to see if problems arise, but should be watched. Suggestions for new features or changes in their input and output mechanisms are welcome.<!--
-->{{#switch: {{SUBPAGENAME}}|doc|sandbox=<!-- No category for /doc or /sandbox subpages -->
| {{#ifeq: {{{nocat|}}} | true | <!-- No category if user sets nocat=true --> | [[Category:Modules in alpha|{{PAGENAME}}]] }}
}}
| beta | b = This module is rated as [[:Category:Modules in beta|beta]], and is ready for widespread use. It is still new and should be used with some caution to ensure the results are as expected.<!--
-->{{#switch: {{SUBPAGENAME}}|doc|sandbox=<!-- No category for /doc or /sandbox subpages -->
| {{#ifeq: {{{nocat|}}} | true | <!-- No category if user sets nocat=true --> | [[Category:Modules in beta|{{PAGENAME}}]] }}
}}
| release | r | general | g = This module is rated as [[:Category:Modules for general use|ready for general use]]. It has reached a mature form and is thought to be relatively bug-free and ready for use wherever appropriate. It is ready to mention on help pages and other Wikipedia resources as an option for new users to learn. To reduce server load and bad output, it should be improved by [[Wikipedia:Template sandbox and test cases|sandbox testing]] rather than repeated trial-and-error editing.<!--
-->{{#switch: {{SUBPAGENAME}}|doc|sandbox=<!-- No category for /doc or /sandbox subpages -->
| {{#ifeq: {{{nocat|}}} | true | <!-- No category if user sets nocat=true --> | [[Category:Modules for general use|{{PAGENAME}}]] }}
}}
| protected | protect | p = This module is [[:Category:Modules subject to page protection|subject to page protection]]. It is a [[Wikipedia:High-risk templates|highly visible module]] in use by a very large number of pages, or is [[Wikipedia:Substitution|substituted]] very frequently. Because vandalism or mistakes would affect many pages, and even trivial editing might cause substantial load on the servers, it is [[Wikipedia:Protection policy|protected]] from editing.<!--
-->{{#switch: {{SUBPAGENAME}}|doc|sandbox=<!-- No category for /doc or /sandbox subpages -->
| {{#ifeq: {{{nocat|}}} | true | <!-- No category if user sets nocat=true --> | [[Category:Modules subject to page protection|{{PAGENAME}}]] }}
}}
| semiprotected | semiprotect | semi = This module is [[:Category:Modules subject to page protection|subject to page protection]]. It is a [[Wikipedia:High-risk templates|highly visible module]] in use by a very large number of pages, or is [[Wikipedia:Substitution|substituted]] very frequently. Because vandalism or mistakes would affect many pages, and even trivial editing might cause substantial load on the servers, it is [[WP:SEMI|semi-protected]] from editing.<!--
-->{{#switch: {{SUBPAGENAME}}|doc|sandbox=<!-- No category for /doc or /sandbox subpages -->
| {{#ifeq: {{{nocat|}}} | true | <!-- No category if user sets nocat=true --> | [[Category:Modules subject to page protection|{{PAGENAME}}]] }}
}}
| #default = {{error|Module rating is invalid or not specified.}}
}}
}}|{{error|Error: {{tl|Module rating}} must be placed in the Module namespace.}} [[Category:Pages with templates in the wrong namespace]]|demospace={{{demospace|<noinclude>module</noinclude>}}}}}}}</includeonly><noinclude>
{{module rating|release|nocat=true|demospace=module}}
{{documentation}}
<!-- Categories go on the /doc subpage, and interwikis go in Wikidata. -->
</noinclude>
bbd244b3ea2e13ec4c1c810ae44f2f3789a93efc
Template:T
10
348
729
2022-06-05T04:09:28Z
[[]]>Dinoguy1000
0
not that it matters much, but fix comment closing
wikitext
text/x-wiki
#REDIRECT [[Template:Template link]]
{{Rcat shell|
{{R from template shortcut}}
}}
<!-- Used as Template:tl throughout English Wikipedia; demo template referenced only on meta -->
bb10dbc83695404528dbc095ea267429142c7f05
Template:Country data Cyprus
10
253
512
2022-06-08T13:58:32Z
[[w>Terasail
0
Update file location to stop using redirect. Per [[Special:Diff/1092144696|edit request]]
wikitext
text/x-wiki
{{ {{{1<noinclude>|country showdata</noinclude>}}}
| alias = Cyprus
| flag alias = Flag of Cyprus.svg
| flag alias-1878 = Flag of the United Kingdom.svg
| flag alias-1881 = Flag of Cyprus (1881–1922).svg
| flag alias-colonial = Blue Ensign of Cyprus (1922).svg
| flag alias-April 1960 = Flag of Cyprus (1960).svg
| flag alias-1960 = Flag of Cyprus (1960–2006).svg
| link alias-army = Cypriot Ground Forces
| size = {{{size|}}}
| name = {{{name|}}}
| variant = {{{variant|}}}
| altlink = {{{altlink|}}}
<noinclude>
| redir1 = CYP
| var1 = 1878
| var2 = 1881
| var3 = colonial
| var4 = April 1960
| var5 = 1960
</noinclude>
}}
7480d14089e4230b22a47579a3da386902cc7bdd
Module:Uses Wikidata
828
307
620
2022-06-08T17:12:17Z
[[w>Legoktm
0
fix capitalization of Wikidata and Wikipedia in query output
Scribunto
text/plain
local p = {}
function p.usesProperty(frame)
local args = frame.getParent(frame).args or nil
if mw.text.trim(args[1] or '') == '' then
args = frame.args
end
local result = '<ul>'
local ii = 1
while true do
local p_num = mw.text.trim(args[ii] or '')
if p_num ~= '' then
local label = mw.wikibase.getLabel(p_num) or "NO LABEL"
result = result .. "<li>[[File:Disc Plain blue dark.svg|middle|4px|link=|alt=]] <b><i>[[d:Property talk:" .. p_num .. "|" .. label .. " (" .. string.upper(p_num) .. ")]]</i></b> (see <span class='plainlinks'>[https://query.wikidata.org/embed.html#SELECT%20%3FWikidata_item_%20%3FWikidata_item_Label%20%3Fvalue%20%3FvalueLabel%20%3FEnglish_Wikipedia_article%20%23Show%20data%20in%20this%20order%0A%7B%0A%09%3FWikidata_item_%20wdt%3A" .. p_num .. "%20%3Fvalue%20.%20%23Collecting%20all%20items%20which%20have%20" .. p_num .. "%20data%2C%20from%20whole%20Wikidata%20item%20pages%0A%09OPTIONAL%20%7B%3FEnglish_Wikipedia_article%20schema%3Aabout%20%3FWikidata_item_%3B%20schema%3AisPartOf%20%3Chttps%3A%2F%2Fen.wikipedia.org%2F%3E%20.%7D%20%23If%20collected%20item%20has%20link%20to%20English%20Wikipedia%2C%20show%20that%0A%09SERVICE%20wikibase%3Alabel%20%7B%20bd%3AserviceParam%20wikibase%3Alanguage%20%22en%22%20%20%7D%20%23Show%20label%20in%20this%20language.%20%22en%22%20is%20English.%20%20%20%0A%7D%0ALIMIT%201000 uses]</span>)</li>"
ii = ii + 1
else break
end
end
result = result.."</ul>"
return result
end
function p.tuProperty(frame)
local parent = frame.getParent(frame)
local result = '<ul>'
local ii = 1
while true do
local p_num = mw.text.trim(parent.args[ii] or '')
if p_num ~= '' then
local label = mw.wikibase.getLabel(p_num) or "NO LABEL"
result = result .. "<li><span style='font-size:90%;line-height:1;'>●</span> <b>[[d:Property:" .. p_num .. "|" .. label .. "]]</b> <span style='font-size:90%;'>([[d:Property talk:" .. string.upper(p_num) .. "|" .. p_num .. "]])</span></li>"
ii = ii + 1
else break
end
end
result = result.."</ul>"
return result
end
return p
8b704fdbc00fb94538c56f18c5c01f1e72963ea9
Module:Labelled list hatnote
828
340
711
2022-06-08T23:33:35Z
[[]]>Nihiltres
0
Fixed iteration-and-removal bug
Scribunto
text/plain
--------------------------------------------------------------------------------
-- Labelled list --
-- --
-- This module does the core work of creating a hatnote composed of a list --
-- prefixed by a colon-terminated label, i.e. "LABEL: [andList of pages]", --
-- for {{see also}} and similar templates. --
--------------------------------------------------------------------------------
local mHatnote = require('Module:Hatnote')
local mHatlist = require('Module:Hatnote list')
local mArguments --initialize lazily
local yesno --initialize lazily
local p = {}
-- Defaults global to this module
local defaults = {
label = 'See also', --Final fallback for label argument
labelForm = '%s: %s',
prefixes = {'label', 'label ', 'l'},
template = 'Module:Labelled list hatnote'
}
-- Localizable message strings
local msg = {
errorSuffix = '#Errors',
noInputWarning = 'no page names specified',
noOutputWarning =
"'''[[%s]] — no output: none of the target pages exist.'''"
}
-- Helper function that pre-combines display parameters into page arguments.
-- Also compresses sparse arrays, as a desirable side-effect.
function p.preprocessDisplays (args, prefixes)
-- Prefixes specify which parameters, in order, to check for display options
-- They each have numbers auto-appended, e.g. 'label1', 'label 1', & 'l1'
prefixes = prefixes or defaults.prefixes
local indices = {}
local sparsePages = {}
for k, v in pairs(args) do
if type(k) == 'number' then
indices[#indices + 1] = k
local display
for i = 1, #prefixes do
display = args[prefixes[i] .. k]
if display then break end
end
sparsePages[k] = display and
string.format('%s|%s', string.gsub(v, '|.*$', ''), display) or v
end
end
table.sort(indices)
local pages = {}
for k, v in ipairs(indices) do pages[#pages + 1] = sparsePages[v] end
return pages
end
--Helper function to get a page target from a processed page string
--e.g. "Page|Label" → "Page" or "Target" → "Target"
local function getTarget(pagename)
local pipe = string.find(pagename, '|')
return string.sub(pagename, 0, pipe and pipe - 1 or nil)
end
-- Produces a labelled pages-list hatnote.
-- The main frame (template definition) takes 1 or 2 arguments, for a singular
-- and (optionally) plural label respectively:
-- * {{#invoke:Labelled list hatnote|labelledList|Singular label|Plural label}}
-- The resulting template takes pagename & label parameters normally.
function p.labelledList (frame)
mArguments = require('Module:Arguments')
yesno = require('Module:Yesno')
local labels = {frame.args[1] or defaults.label}
labels[2] = frame.args[2] or labels[1]
labels[3] = frame.args[3] --no defaulting
labels[4] = frame.args[4] --no defaulting
local template = frame:getParent():getTitle()
local args = mArguments.getArgs(frame, {parentOnly = true})
local pages = p.preprocessDisplays(args)
local options = {
category = yesno(args.category),
extraclasses = frame.args.extraclasses,
ifexists = yesno(frame.args.ifexists),
namespace = frame.args.namespace or args.namespace,
selfref = yesno(frame.args.selfref or args.selfref),
template = template
}
return p._labelledList(pages, labels, options)
end
function p._labelledList (pages, labels, options)
if options.ifexists then
for k = #pages, 1, -1 do --iterate backwards to allow smooth removals
local v = pages[k]
local title = mw.title.new(getTarget(v), namespace)
if (v == '') or title == nil or not title.exists then
table.remove(pages, k)
end
end
end
labels = labels or {}
label = (#pages == 1 and labels[1] or labels[2]) or defaults.label
for k, v in pairs(pages) do
if mHatnote.findNamespaceId(v) ~= 0 then
label =
(
#pages == 1 and
(labels[3] or labels[1] or defaults.label) or
(labels[4] or labels[2] or defaults.label)
) or defaults.label
end
end
if #pages == 0 then
if options.ifexists then
mw.addWarning(
string.format(
msg.noOutputWarning, options.template or defaults.template
)
)
return ''
else
return mHatnote.makeWikitextError(
msg.noInputWarning,
(options.template or defaults.template) .. msg.errorSuffix,
options.category
)
end
end
local text = string.format(
options.labelForm or defaults.labelForm,
label,
mHatlist.andList(pages, true)
)
local hnOptions = {
extraclasses = options.extraclasses,
selfref = options.selfref
}
return mHatnote._hatnote(text, hnOptions)
end
return p
b7a8ba27cf6195e6427701b94e8d2acad3c40a21
Module:Uses TemplateStyles/config
828
91
184
2022-06-16T15:10:06Z
Pppery
5
Matching reality rather than 2018 me's wishful thinking
Scribunto
text/plain
local cfg = {} -- Don’t touch this line.
-- Subpage blacklist: these subpages will not be categorized (except for the
-- error category, which is always added if there is an error).
-- For example “Template:Foo/doc” matches the `doc = true` rule, so it will have
-- no categories. “Template:Foo” and “Template:Foo/documentation” match no rules,
-- so they *will* have categories. All rules should be in the
-- ['<subpage name>'] = true,
-- format.
cfg['subpage_blacklist'] = {
['doc'] = true,
['sandbox'] = true,
['sandbox2'] = true,
['testcases'] = true,
}
-- Sandbox title: if the stylesheet’s title is <template>/<stylesheet>.css, the
-- stylesheet’s sandbox is expected to be at <template>/<sandbox_title>/<stylesheet>.css
-- Set to nil to disable sandbox links.
cfg['sandbox_title'] = 'sandbox'
-- Error category: this category is added if the module call contains errors
-- (e.g. no stylesheet listed). A category name without namespace, or nil
-- to disable categorization (not recommended).
cfg['error_category'] = 'Uses TemplateStyles templates with errors'
-- Default category: this category is added if no custom category is specified
-- in module/template call. A category name without namespace, or nil
-- to disable categorization.
cfg['default_category'] = 'Templates using TemplateStyles'
-- Protection conflict category: this category is added if the protection level
-- of any stylesheet is lower than the protection level of the template. A category name
-- without namespace, or nil to disable categorization (not recommended).
cfg['protection_conflict_category'] = 'Templates using TemplateStyles with a different protection level'
-- Hierarchy of protection levels, used to determine whether one protection level is lower
-- than another and thus should populate protection_conflict_category. No protection is treated as zero
cfg['protection_hierarchy'] = {
autoconfirmed = 1,
extendedconfirmed = 2,
templateeditor = 3,
sysop = 4
}
-- Padlock pattern: Lua pattern to search on protected stylesheets for, or nil
-- to disable padlock check.
cfg['padlock_pattern'] = '{{pp-'
-- Missing padlock category: this category is added if a protected stylesheet
-- doesn’t contain any padlock template (specified by the above Lua pattern).
-- A category name without namespace (no nil allowed) if the pattern is not nil,
-- unused (and thus may be nil) otherwise.
cfg['missing_padlock_category'] = 'Templates using TemplateStyles without padlocks'
return cfg -- Don’t touch this line.
58e7a37c44f6ea3f6b8af54a559d696cc7256493
Module:Uses TemplateStyles
828
90
182
2022-06-16T15:13:38Z
Pppery
5
Matching reality rather than 2018 me's wishful thinking
Scribunto
text/plain
local yesno = require('Module:Yesno')
local mList = require('Module:List')
local mTableTools = require('Module:TableTools')
local mMessageBox = require('Module:Message box')
local TNT = require('Module:TNT')
local p = {}
local function format(msg, ...)
return TNT.format('I18n/Uses TemplateStyles', msg, ...)
end
local function getConfig()
return mw.loadData('Module:Uses TemplateStyles/config')
end
local function renderBox(tStyles)
local boxArgs = {
type = 'notice',
small = true,
image = string.format('[[File:Farm-Fresh css add.svg|32px|alt=%s]]', format('logo-alt'))
}
if #tStyles < 1 then
boxArgs.text = string.format('<strong class="error">%s</strong>', format('error-emptylist'))
else
local cfg = getConfig()
local tStylesLinks = {}
for i, ts in ipairs(tStyles) do
local link = string.format('[[:%s]]', ts)
local sandboxLink = nil
local tsTitle = mw.title.new(ts)
if tsTitle and cfg['sandbox_title'] then
local tsSandboxTitle = mw.title.new(string.format(
'%s:%s/%s/%s', tsTitle.nsText, tsTitle.baseText, cfg['sandbox_title'], tsTitle.subpageText))
if tsSandboxTitle and tsSandboxTitle.exists then
sandboxLink = format('sandboxlink', link, ':' .. tsSandboxTitle.prefixedText)
end
end
tStylesLinks[i] = sandboxLink or link
end
local tStylesList = mList.makeList('bulleted', tStylesLinks)
boxArgs.text = format(
mw.title.getCurrentTitle():inNamespaces(828,829) and 'header-module' or 'header-template') ..
'\n' .. tStylesList
end
return mMessageBox.main('mbox', boxArgs)
end
local function renderTrackingCategories(args, tStyles, titleObj)
if yesno(args.nocat) then
return ''
end
local cfg = getConfig()
local cats = {}
-- Error category
if #tStyles < 1 and cfg['error_category'] then
cats[#cats + 1] = cfg['error_category']
end
-- TemplateStyles category
titleObj = titleObj or mw.title.getCurrentTitle()
if (titleObj.namespace == 10 or titleObj.namespace == 828)
and not cfg['subpage_blacklist'][titleObj.subpageText]
then
local category = args.category or cfg['default_category']
if category then
cats[#cats + 1] = category
end
if not yesno(args.noprotcat) and (cfg['protection_conflict_category'] or cfg['padlock_pattern']) then
local currentProt = titleObj.protectionLevels["edit"] and titleObj.protectionLevels["edit"][1] or nil
local addedLevelCat = false
local addedPadlockCat = false
for i, ts in ipairs(tStyles) do
local tsTitleObj = mw.title.new(ts)
local tsProt = tsTitleObj.protectionLevels["edit"] and tsTitleObj.protectionLevels["edit"][1] or nil
if cfg['padlock_pattern'] and tsProt and not addedPadlockCat then
local content = tsTitleObj:getContent()
if not content:find(cfg['padlock_pattern']) then
cats[#cats + 1] = cfg['missing_padlock_category']
addedPadlockCat = true
end
end
if cfg['protection_conflict_category'] and currentProt and tsProt ~= currentProt and not addedLevelCat then
currentProt = cfg['protection_hierarchy'][currentProt] or 0
tsProt = cfg['protection_hierarchy'][tsProt] or 0
if tsProt < currentProt then
addedLevelCat = true
cats[#cats + 1] = cfg['protection_conflict_category']
end
end
end
end
end
for i, cat in ipairs(cats) do
cats[i] = string.format('[[Category:%s]]', cat)
end
return table.concat(cats)
end
function p._main(args, cfg)
local tStyles = mTableTools.compressSparseArray(args)
local box = renderBox(tStyles)
local trackingCategories = renderTrackingCategories(args, tStyles)
return box .. trackingCategories
end
function p.main(frame)
local origArgs = frame:getParent().args
local args = {}
for k, v in pairs(origArgs) do
v = v:match('^%s*(.-)%s*$')
if v ~= '' then
args[k] = v
end
end
return p._main(args)
end
return p
71ca57c37849f38e3c5ee30061bdae730963e48e
Template:Region history sidebar title/doc
10
1020
2095
2022-06-23T23:49:18Z
[[]]>Fadesga
0
wikitext
text/x-wiki
{{Documentation subpage}}
<!-- Please place categories where indicated at the bottom of this page and interwikis at Wikidata (see [[Wikipedia:Wikidata]]) -->
This template is used to generate the above/title section in a region history sidebar. Place it in the {{para|title}} parameter of a template that uses {{tl|Sidebar}}.
== Example syntax ==
<pre style="overflow:auto;">
{{Sidebar with collapsible lists
| name = {{subst:PAGENAME}}
| bodyclass = vcard <!--plainlist / hlist-->
| wraplinks = true
| title = {{Region history sidebar title |country= <!-- or: |region= --> |image=[[File:(filename)|frameless]]}}
| expanded = {{{expanded|{{{1|}}}}}}
| list1name =
| list1title =
| list1 =
| list2name =
| list2title =
| list2 =
<!-- (etc) -->
| below = {{portal-inline|''region or country''|size=tiny}}
}}
</pre>
== Parameters ==
; country: The name of the country, which should be the same as the name used in the article about the history of the country.
: Example: {{para|country|the Netherlands}} to link to [[History of the Netherlands]].
; image : Filename of a representative image.
: Example: {{para|image|<nowiki>[[File:Albania state emblem.svg|75px|State emblem of Albania]]</nowiki>}}
===For regions that are not countries===
; region: The name of the region, which should correspond with the title of the article about the region.
: Example: {{para|region|North Dakota}}
===Modifying links===
; linkoverride: Optional parameter to override the default <code>History of region</code> link
; series: Optional parameter to override the default <code>Category:History of region</code> category link
===Removing the separator===
; separator-width: By default, the horizontal rule at the bottom of the box has width 1px, to remove the separator, set {{para|separator-width|0}}.
== See also ==
* {{tl|Politics sidebar title}}
* {{tl|Politics sidebar below}}
* {{tl|Sidebar}}
* {{tl|Sidebar with collapsible lists}}
<includeonly>{{Sandbox other|
| <!-- Categories below this line, please; interwikis at Wikidata -->
[[Category:History sidebar templates by country| ]]
[[Category:History of religion templates]]
[[Category:Sidebar meta-templates]]
}}</includeonly>
dbf0185003f8acf5c3d7a18151abae36b406d33c
Template:Country data Czech Republic
10
274
554
2022-07-03T18:55:09Z
[[w>Paine Ellsworth
0
per edit request on talk page - include flag variant
wikitext
text/x-wiki
{{ {{{1<noinclude>|country showdata</noinclude>}}}
| alias = Czech Republic
| flag alias = Flag of the Czech Republic.svg
| flag alias-1990 = Flag of Bohemia.svg
| flag alias-air force = Flag of the Czech Air Force.svg
| link alias-air force = Czech Air Force
| flag alias-army = Flag of the Czech Land Force.svg
| link alias-army = Czech Land Forces
| size = {{{size|}}}
| name = {{{name|}}}
| variant = {{{variant|}}}
| altlink = {{{altlink|}}}
| altvar = {{{altvar|}}}
<noinclude>
| var1 = 1990
| redir1 = CZE
| redir2 = Czechia
| related1 = Czechoslovakia
| related2 = Bohemia
| related3 = Slovakia
</noinclude>
}}
6c23f290bd62faa6f881f7891d1142783e26ee21
Template:Country data Slovakia
10
276
558
2022-07-03T19:06:55Z
[[w>Paine Ellsworth
0
per edit request on talk page - include flag variant
wikitext
text/x-wiki
{{ {{{1<noinclude>|country showdata</noinclude>}}}
| alias = Slovakia
| flag alias = Flag of Slovakia.svg
| flag alias-1939 = Flag of Slovakia (1939–1945).svg
| flag alias-1990 = Flag of Slovakia (1939–1945).svg
| link alias-army = Ground Forces of the Slovak Republic{{!}}Slovak Ground Forces
| size = {{{size|}}}
| name = {{{name|}}}
| altlink = {{{altlink|}}}
| variant = {{{variant|}}}
<noinclude>
| var1 = 1939
| var2 = 1990
| redir1 = SVK
| related1 = Czechoslovakia
</noinclude>
}}
e7b28706d1a4e6fc783c1d519d45426534ecb325
Template:Country data Spain
10
247
500
2022-07-04T17:08:31Z
[[w>Skjoldbro
0
updated air force
wikitext
text/x-wiki
{{ {{{1<noinclude>|country showdata</noinclude>}}}
| alias = Spain
| flag alias = Flag of Spain.svg
| flag alias-1506 = Flag of Cross of Burgundy.svg
| flag alias-1701 = Bandera de España 1701-1748.svg
| flag alias-1748 = Bandera de España 1748-1785.svg
| flag alias-1760 = Bandera de España 1760-1785.svg
| flag alias-1785 = Flag of Spain (1785–1873, 1875–1931).svg
| flag alias-1873 = Flag of the First Spanish Republic.svg
| flag alias-1874 = Flag of Spain (1785–1873, 1875–1931).svg
| flag alias-1931 = Flag of Spain (1931–1939).svg
| flag alias-civil-1931 = Flag of the Second Spanish Republic (plain).svg
| flag alias-1936 = Bandera del bando nacional 1936-1938.svg
| flag alias-1938 = Flag of Spain (1938–1945).svg
| flag alias-1945 = Flag of Spain (1945–1977).svg
| flag alias-1977 = Flag of Spain (1977–1981).svg
| flag alias-civil = Flag of Spain (Civil).svg
| flag alias-civil-1785 = BandMercante1785.svg
| flag alias-navy = Flag of Spain.svg
| link alias-navy = Spanish Navy
| flag alias-marines = Flag of Spain.svg
| link alias-marines = Spanish Marine Infantry
| flag alias-army = Flag of Spain.svg
| link alias-army = Spanish Army
| flag alias-naval = Naval Jack of Spain.svg
| link alias-naval = Spanish Navy
| flag alias-air force = Flag of Spain.svg
| link alias-air force = Spanish Air and Space Force
| size = {{{size|}}}
| name = {{{name|}}}
| altlink = {{{altlink|}}}
| variant = {{{variant|}}}
<noinclude>
| var1 = 1506
| var2 = 1701
| var3 = 1748
| var4 = 1760
| var5 = 1785
| var6 = 1873
| var7 = 1874
| var8 = 1931
| var9 = civil-1931
| var10 = 1936
| var11 = 1938
| var12 = 1945
| var13 = 1977
| var14 = civil
| var15 = civil-1785
| redir1 = ESP
| redir2 = SPA
| related1 = Spanish Empire
| related2 = Kingdom of Spain
| related3 = Spanish Republic
| related4 = Spanish State
| related5 = Francoist Spain
</noinclude>
}}
a27e5d2bc6539467e8a94c500b05f5caf7b87dff
Template:Generic template demo
10
1017
2089
2022-07-10T21:03:19Z
[[]]>Aidan9382
0
+{{R semiprotected}}
wikitext
text/x-wiki
#REDIRECT [[Template:Parameter names example]]
{{R semiprotected}}
[[Category:Wikipedia utility templates]]
[[Category:Template namespace templates]]
[[Category:Documentation assistance templates]]
22f645541f749cfd0eeffdee734b51b284103400
Module:Message box/ombox.css
828
315
693
2022-07-11T18:40:17Z
[[]]>Izno
0
and move mbox-small to 720px here as well
sanitized-css
text/css
/* {{pp|small=y}} */
.ombox {
margin: 4px 0;
border-collapse: collapse;
border: 1px solid #a2a9b1; /* Default "notice" gray */
background-color: #f8f9fa;
box-sizing: border-box;
}
/* For the "small=yes" option. */
.ombox.mbox-small {
font-size: 88%;
line-height: 1.25em;
}
.ombox-speedy {
border: 2px solid #b32424; /* Red */
background-color: #fee7e6; /* Pink */
}
.ombox-delete {
border: 2px solid #b32424; /* Red */
}
.ombox-content {
border: 1px solid #f28500; /* Orange */
}
.ombox-style {
border: 1px solid #fc3; /* Yellow */
}
.ombox-move {
border: 1px solid #9932cc; /* Purple */
}
.ombox-protection {
border: 2px solid #a2a9b1; /* Gray-gold */
}
.ombox .mbox-text {
border: none;
/* @noflip */
padding: 0.25em 0.9em;
width: 100%;
}
.ombox .mbox-image {
border: none;
/* @noflip */
padding: 2px 0 2px 0.9em;
text-align: center;
}
.ombox .mbox-imageright {
border: none;
/* @noflip */
padding: 2px 0.9em 2px 0;
text-align: center;
}
/* An empty narrow cell */
.ombox .mbox-empty-cell {
border: none;
padding: 0;
width: 1px;
}
.ombox .mbox-invalid-type {
text-align: center;
}
@media (min-width: 720px) {
.ombox {
margin: 4px 10%;
}
.ombox.mbox-small {
/* @noflip */
clear: right;
/* @noflip */
float: right;
/* @noflip */
margin: 4px 0 4px 1em;
width: 238px;
}
}
8fe3df4bb607e699eab2dbd23bd4a1a446391002
Template:Para
10
57
118
2022-07-22T08:06:17Z
[[w>TheDJ
0
breakup super long words, so we do not overflow the viewport.
wikitext
text/x-wiki
<code class="tpl-para" style="word-break:break-word;{{SAFESUBST:<noinclude />#if:{{{plain|}}}|border: none; background-color: inherit;}} {{SAFESUBST:<noinclude />#if:{{{plain|}}}{{{mxt|}}}{{{green|}}}{{{!mxt|}}}{{{red|}}}|color: {{SAFESUBST:<noinclude />#if:{{{mxt|}}}{{{green|}}}|#006400|{{SAFESUBST:<noinclude />#if:{{{!mxt|}}}{{{red|}}}|#8B0000|inherit}}}};}} {{SAFESUBST:<noinclude />#if:{{{style|}}}|{{{style}}}}}">|{{SAFESUBST:<noinclude />#if:{{{1|}}}|{{{1}}}=}}{{{2|}}}</code><noinclude>
{{Documentation}}
<!--Categories and interwikis go near the bottom of the /doc subpage.-->
</noinclude>
06006deea2ed5d552aab61b4332321ab749ae7e8
Module:ISO 3166/data/National
828
230
466
2022-07-28T05:06:29Z
[[w>Paine Ellsworth
0
per edit request on talk page - include "U.S." initialism
Scribunto
text/plain
return {
["AD"] = {alpha3="AND",numeric="020",name="Andorra"},
["AE"] = {alpha3="ARE",numeric="784",name="United Arab Emirates",altnames={"UAE"}},
["AF"] = {alpha3="AFG",numeric="004",name="Afghanistan"},
["AG"] = {alpha3="ATG",numeric="028",name="Antigua and Barbuda"},
["AI"] = {alpha3="AIA",numeric="660",name="Anguilla"},
["AL"] = {alpha3="ALB",numeric="008",name="Albania"},
["AM"] = {alpha3="ARM",numeric="051",name="Armenia"},
["AO"] = {alpha3="AGO",numeric="024",name="Angola"},
["AQ"] = {alpha3="ATA",numeric="010",name="Antarctica"},
["AR"] = {alpha3="ARG",numeric="032",name="Argentina"},
["AS"] = {alpha3="ASM",numeric="016",name="American Samoa"},
["AT"] = {alpha3="AUT",numeric="040",name="Austria"},
["AU"] = {alpha3="AUS",numeric="036",name="Australia"},
["AW"] = {alpha3="ABW",numeric="533",name="Aruba"},
["AX"] = {alpha3="ALA",numeric="248",name="Åland Islands",altnames={"Aland Islands","Åland","Aland"}},
["AZ"] = {alpha3="AZE",numeric="031",name="Azerbaijan"},
["BA"] = {alpha3="BIH",numeric="070",name="Bosnia and Herzegovina",altnames={"Bosnia"}},
["BB"] = {alpha3="BRB",numeric="052",name="Barbados"},
["BD"] = {alpha3="BGD",numeric="050",name="Bangladesh"},
["BE"] = {alpha3="BEL",numeric="056",name="Belgium"},
["BF"] = {alpha3="BFA",numeric="854",name="Burkina Faso"},
["BG"] = {alpha3="BGR",numeric="100",name="Bulgaria"},
["BH"] = {alpha3="BHR",numeric="048",name="Bahrain"},
["BI"] = {alpha3="BDI",numeric="108",name="Burundi"},
["BJ"] = {alpha3="BEN",numeric="204",name="Benin"},
["BL"] = {alpha3="BLM",numeric="652",name="Saint Barthélemy",altnames={"St Barthelemy"}},
["BM"] = {alpha3="BMU",numeric="060",name="Bermuda"},
["BN"] = {alpha3="BRN",numeric="096",name="Brunei",isoname="Brunei Darussalam"},
["BO"] = {alpha3="BOL",numeric="068",name="Bolivia",isoname="Bolivia (Plurinational State of)"},
["BQ"] = {alpha3="BES",numeric="535",name="Caribbean Netherlands",isoname="Bonaire, Sint Eustatius and Saba"},
["BR"] = {alpha3="BRA",numeric="076",name="Brazil"},
["BS"] = {alpha3="BHS",numeric="044",name="Bahamas"},
["BT"] = {alpha3="BTN",numeric="064",name="Bhutan"},
["BV"] = {alpha3="BVT",numeric="074",name="Bouvet Island"},
["BW"] = {alpha3="BWA",numeric="072",name="Botswana"},
["BY"] = {alpha3="BLR",numeric="112",name="Belarus"},
["BZ"] = {alpha3="BLZ",numeric="084",name="Belize"},
["CA"] = {alpha3="CAN",numeric="124",name="Canada"},
["CC"] = {alpha3="CCK",numeric="166",name="Cocos (Keeling) Islands",altnames={"Cocos Islands","Keeling Islands"}},
["CD"] = {alpha3="COD",numeric="180",name="Democratic Republic of the Congo",isoname="Congo, Democratic Republic of the",altnames={"Congo-Kinshasa","DRC","DR Congo"}},
["CF"] = {alpha3="CAF",numeric="140",name="Central African Republic",altnames={"CAR"}},
["CG"] = {alpha3="COG",numeric="178",name="Republic of the Congo",isoname="Congo",altnames={"Congo-Brazzaville"}},
["CH"] = {alpha3="CHE",numeric="756",name="Switzerland"},
["CI"] = {alpha3="CIV",numeric="384",name="Côte d'Ivoire",altnames={"Ivory Coast"}},
["CK"] = {alpha3="COK",numeric="184",name="Cook Islands"},
["CL"] = {alpha3="CHL",numeric="152",name="Chile"},
["CM"] = {alpha3="CMR",numeric="120",name="Cameroon"},
["CN"] = {alpha3="CHN",numeric="156",name="China",altnames={"People's Republic of China","PRC"}},
["CO"] = {alpha3="COL",numeric="170",name="Colombia"},
["CR"] = {alpha3="CRI",numeric="188",name="Costa Rica"},
["CU"] = {alpha3="CUB",numeric="192",name="Cuba"},
["CV"] = {alpha3="CPV",numeric="132",name="Cabo Verde",altnames={"Cape Verde"}},
["CW"] = {alpha3="CUW",numeric="531",name="Curaçao",altnames={"Curacao"}},
["CX"] = {alpha3="CXR",numeric="162",name="Christmas Island"},
["CY"] = {alpha3="CYP",numeric="196",name="Cyprus"},
["CZ"] = {alpha3="CZE",numeric="203",name="Czech Republic",isoname="Czechia"},
["DE"] = {alpha3="DEU",numeric="276",name="Germany"},
["DJ"] = {alpha3="DJI",numeric="262",name="Djibouti"},
["DK"] = {alpha3="DNK",numeric="208",name="Denmark"},
["DM"] = {alpha3="DMA",numeric="212",name="Dominica"},
["DO"] = {alpha3="DOM",numeric="214",name="Dominican Republic"},
["DZ"] = {alpha3="DZA",numeric="012",name="Algeria"},
["EC"] = {alpha3="ECU",numeric="218",name="Ecuador"},
["EE"] = {alpha3="EST",numeric="233",name="Estonia"},
["EG"] = {alpha3="EGY",numeric="818",name="Egypt"},
["EH"] = {alpha3="ESH",numeric="732",name="Western Sahara"},
["ER"] = {alpha3="ERI",numeric="232",name="Eritrea"},
["ES"] = {alpha3="ESP",numeric="724",name="Spain"},
["ET"] = {alpha3="ETH",numeric="231",name="Ethiopia"},
["FI"] = {alpha3="FIN",numeric="246",name="Finland"},
["FJ"] = {alpha3="FJI",numeric="242",name="Fiji"},
["FK"] = {alpha3="FLK",numeric="238",name="Falkland Islands",isoname="Falkland Islands (Malvinas)",altnames={"Falklands","Islas Malvinas","Malvinas","Malvinas Islands"}},
["FM"] = {alpha3="FSM",numeric="583",name="Federated States of Micronesia",isoname="Micronesia (Federated States of)",altnames={"Micronesia"}},
["FO"] = {alpha3="FRO",numeric="234",name="Faroe Islands",altnames={"Faroer","Faeroer"}},
["FR"] = {alpha3="FRA",numeric="250",name="France"},
["GA"] = {alpha3="GAB",numeric="266",name="Gabon"},
["GB"] = {alpha3="GBR",numeric="826",name="United Kingdom",isoname="United Kingdom of Great Britain and Northern Ireland",altnames={"UK","Great Britain"}},
["GB-ENG"] = {alpha3="ENG",numeric="000",name="England"}, --Considered to be a country
["GB-NIR"] = {alpha3="NIR",numeric="000",name="Northern Ireland"}, --Considered to be a country
["GB-SCT"] = {alpha3="SCT",numeric="000",name="Scotland"}, --Considered to be a country
["GB-WLS"] = {alpha3="WLS",numeric="000",name="Wales"}, --Considered to be a country
["GB-EAW"] = {alpha3="EAW",numeric="000",name="England and Wales"}, --Considered to be a country
["GD"] = {alpha3="GRD",numeric="308",name="Grenada"},
["GE"] = {alpha3="GEO",numeric="268",name="Georgia"},
["GF"] = {alpha3="GUF",numeric="254",name="French Guiana"},
["GG"] = {alpha3="GGY",numeric="831",name="Guernsey"},
["GH"] = {alpha3="GHA",numeric="288",name="Ghana"},
["GI"] = {alpha3="GIB",numeric="292",name="Gibraltar"},
["GL"] = {alpha3="GRL",numeric="304",name="Greenland"},
["GM"] = {alpha3="GMB",numeric="270",name="Gambia"},
["GN"] = {alpha3="GIN",numeric="324",name="Guinea"},
["GP"] = {alpha3="GLP",numeric="312",name="Guadeloupe"},
["GQ"] = {alpha3="GNQ",numeric="226",name="Equatorial Guinea"},
["GR"] = {alpha3="GRC",numeric="300",name="Greece"},
["GS"] = {alpha3="SGS",numeric="239",name="South Georgia and the South Sandwich Islands"},
["GT"] = {alpha3="GTM",numeric="320",name="Guatemala"},
["GU"] = {alpha3="GUM",numeric="316",name="Guam"},
["GW"] = {alpha3="GNB",numeric="624",name="Guinea-Bissau"},
["GY"] = {alpha3="GUY",numeric="328",name="Guyana"},
["HK"] = {alpha3="HKG",numeric="344",name="Hong Kong",altnames={"Hong Kong SAR","HKSAR"}},
["HM"] = {alpha3="HMD",numeric="334",name="Heard Island and McDonald Islands",altnames={"Heard and McDonald Islands"}},
["HN"] = {alpha3="HND",numeric="340",name="Honduras"},
["HR"] = {alpha3="HRV",numeric="191",name="Croatia"},
["HT"] = {alpha3="HTI",numeric="332",name="Haiti"},
["HU"] = {alpha3="HUN",numeric="348",name="Hungary"},
["ID"] = {alpha3="IDN",numeric="360",name="Indonesia"},
["IE"] = {alpha3="IRL",numeric="372",name="Ireland",altnames={"Republic of Ireland"}},
["IL"] = {alpha3="ISR",numeric="376",name="Israel"},
["IM"] = {alpha3="IMN",numeric="833",name="Isle of Man"},
["IN"] = {alpha3="IND",numeric="356",name="India"},
["IO"] = {alpha3="IOT",numeric="086",name="British Indian Ocean Territory"},
["IQ"] = {alpha3="IRQ",numeric="368",name="Iraq"},
["IR"] = {alpha3="IRN",numeric="364",name="Iran",isoname="Iran (Islamic Republic of)"},
["IS"] = {alpha3="ISL",numeric="352",name="Iceland"},
["IT"] = {alpha3="ITA",numeric="380",name="Italy"},
["JE"] = {alpha3="JEY",numeric="832",name="Jersey"},
["JM"] = {alpha3="JAM",numeric="388",name="Jamaica"},
["JO"] = {alpha3="JOR",numeric="400",name="Jordan"},
["JP"] = {alpha3="JPN",numeric="392",name="Japan"},
["KE"] = {alpha3="KEN",numeric="404",name="Kenya"},
["KG"] = {alpha3="KGZ",numeric="417",name="Kyrgyzstan"},
["KH"] = {alpha3="KHM",numeric="116",name="Cambodia"},
["KI"] = {alpha3="KIR",numeric="296",name="Kiribati"},
["KM"] = {alpha3="COM",numeric="174",name="Comoros"},
["KN"] = {alpha3="KNA",numeric="659",name="Saint Kitts and Nevis",altnames={"St Kitts and Nevis"}},
["KP"] = {alpha3="PRK",numeric="408",name="North Korea",isoname="Korea (Democratic People's Republic of)",altnames={"Democratic People's Republic of Korea"}},
["KR"] = {alpha3="KOR",numeric="410",name="South Korea",isoname="Korea, Republic of",altnames={"Republic of Korea"}},
["KW"] = {alpha3="KWT",numeric="414",name="Kuwait"},
["KY"] = {alpha3="CYM",numeric="136",name="Cayman Islands"},
["KZ"] = {alpha3="KAZ",numeric="398",name="Kazakhstan"},
["LA"] = {alpha3="LAO",numeric="418",name="Laos",isoname="Lao People's Democratic Republic"},
["LB"] = {alpha3="LBN",numeric="422",name="Lebanon"},
["LC"] = {alpha3="LCA",numeric="662",name="Saint Lucia",altnames={"St Lucia"}},
["LI"] = {alpha3="LIE",numeric="438",name="Liechtenstein"},
["LK"] = {alpha3="LKA",numeric="144",name="Sri Lanka"},
["LR"] = {alpha3="LBR",numeric="430",name="Liberia"},
["LS"] = {alpha3="LSO",numeric="426",name="Lesotho"},
["LT"] = {alpha3="LTU",numeric="440",name="Lithuania"},
["LU"] = {alpha3="LUX",numeric="442",name="Luxembourg"},
["LV"] = {alpha3="LVA",numeric="428",name="Latvia"},
["LY"] = {alpha3="LBY",numeric="434",name="Libya"},
["MA"] = {alpha3="MAR",numeric="504",name="Morocco"},
["MC"] = {alpha3="MCO",numeric="492",name="Monaco"},
["MD"] = {alpha3="MDA",numeric="498",name="Moldova",isoname="Moldova, Republic of"},
["ME"] = {alpha3="MNE",numeric="499",name="Montenegro"},
["MF"] = {alpha3="MAF",numeric="663",name="Saint-Martin",isoname="Saint Martin (French part)",altnames={"St Martin","St Martin (French part)","Collectivity of Saint Martin","Collectivity of St Martin"}},
["MG"] = {alpha3="MDG",numeric="450",name="Madagascar"},
["MH"] = {alpha3="MHL",numeric="584",name="Marshall Islands"},
["MK"] = {alpha3="MKD",numeric="807",name="North Macedonia",altnames={"Republic of North Macedonia","Macedonia","Republic of Macedonia","Macedonia, the former Yugoslav Republic of"}},
["ML"] = {alpha3="MLI",numeric="466",name="Mali"},
["MM"] = {alpha3="MMR",numeric="104",name="Myanmar",altnames={"Burma"}},
["MN"] = {alpha3="MNG",numeric="496",name="Mongolia"},
["MO"] = {alpha3="MAC",numeric="446",name="Macau",isoname="Macao",altnames={"Macau SAR","Macao SAR"}},
["MP"] = {alpha3="MNP",numeric="580",name="Northern Mariana Islands"},
["MQ"] = {alpha3="MTQ",numeric="474",name="Martinique"},
["MR"] = {alpha3="MRT",numeric="478",name="Mauritania"},
["MS"] = {alpha3="MSR",numeric="500",name="Montserrat"},
["MT"] = {alpha3="MLT",numeric="470",name="Malta"},
["MU"] = {alpha3="MUS",numeric="480",name="Mauritius"},
["MV"] = {alpha3="MDV",numeric="462",name="Maldives"},
["MW"] = {alpha3="MWI",numeric="454",name="Malawi"},
["MX"] = {alpha3="MEX",numeric="484",name="Mexico"},
["MY"] = {alpha3="MYS",numeric="458",name="Malaysia"},
["MZ"] = {alpha3="MOZ",numeric="508",name="Mozambique"},
["NA"] = {alpha3="NAM",numeric="516",name="Namibia"},
["NC"] = {alpha3="NCL",numeric="540",name="New Caledonia"},
["NE"] = {alpha3="NER",numeric="562",name="Niger"},
["NF"] = {alpha3="NFK",numeric="574",name="Norfolk Island"},
["NG"] = {alpha3="NGA",numeric="566",name="Nigeria"},
["NI"] = {alpha3="NIC",numeric="558",name="Nicaragua"},
["NL"] = {alpha3="NLD",numeric="528",name="Netherlands"},
["NO"] = {alpha3="NOR",numeric="578",name="Norway"},
["NP"] = {alpha3="NPL",numeric="524",name="Nepal"},
["NR"] = {alpha3="NRU",numeric="520",name="Nauru"},
["NU"] = {alpha3="NIU",numeric="570",name="Niue"},
["NZ"] = {alpha3="NZL",numeric="554",name="New Zealand",altnames={"Aotearoa"}},
["OM"] = {alpha3="OMN",numeric="512",name="Oman"},
["PA"] = {alpha3="PAN",numeric="591",name="Panama"},
["PE"] = {alpha3="PER",numeric="604",name="Peru"},
["PF"] = {alpha3="PYF",numeric="258",name="French Polynesia"},
["PG"] = {alpha3="PNG",numeric="598",name="Papua New Guinea"},
["PH"] = {alpha3="PHL",numeric="608",name="Philippines"},
["PK"] = {alpha3="PAK",numeric="586",name="Pakistan"},
["PL"] = {alpha3="POL",numeric="616",name="Poland"},
["PM"] = {alpha3="SPM",numeric="666",name="Saint Pierre and Miquelon",altnames={"St Pierre and Miquelon"}},
["PN"] = {alpha3="PCN",numeric="612",name="Pitcairn"},
["PR"] = {alpha3="PRI",numeric="630",name="Puerto Rico"},
["PS"] = {alpha3="PSE",numeric="275",name="Palestine",isoname="Palestine, State of",altnames={"State of Palestine"}},
["PT"] = {alpha3="PRT",numeric="620",name="Portugal"},
["PW"] = {alpha3="PLW",numeric="585",name="Palau"},
["PY"] = {alpha3="PRY",numeric="600",name="Paraguay"},
["QA"] = {alpha3="QAT",numeric="634",name="Qatar"},
["RE"] = {alpha3="REU",numeric="638",name="Réunion"},
["RO"] = {alpha3="ROU",numeric="642",name="Romania"},
["RS"] = {alpha3="SRB",numeric="688",name="Serbia"},
["RU"] = {alpha3="RUS",numeric="643",name="Russia",isoname="Russian Federation"},
["RW"] = {alpha3="RWA",numeric="646",name="Rwanda"},
["SA"] = {alpha3="SAU",numeric="682",name="Saudi Arabia"},
["SB"] = {alpha3="SLB",numeric="090",name="Solomon Islands"},
["SC"] = {alpha3="SYC",numeric="690",name="Seychelles"},
["SD"] = {alpha3="SDN",numeric="729",name="Sudan"},
["SE"] = {alpha3="SWE",numeric="752",name="Sweden"},
["SG"] = {alpha3="SGP",numeric="702",name="Singapore"},
["SH"] = {alpha3="SHN",numeric="654",name="Saint Helena, Ascension and Tristan da Cunha"},
["SI"] = {alpha3="SVN",numeric="705",name="Slovenia"},
["SJ"] = {alpha3="SJM",numeric="744",name="Svalbard and Jan Mayen"},
["SK"] = {alpha3="SVK",numeric="703",name="Slovakia"},
["SL"] = {alpha3="SLE",numeric="694",name="Sierra Leone"},
["SM"] = {alpha3="SMR",numeric="674",name="San Marino"},
["SN"] = {alpha3="SEN",numeric="686",name="Senegal"},
["SO"] = {alpha3="SOM",numeric="706",name="Somalia"},
["SR"] = {alpha3="SUR",numeric="740",name="Suriname"},
["SS"] = {alpha3="SSD",numeric="728",name="South Sudan"},
["ST"] = {alpha3="STP",numeric="678",name="São Tomé and Príncipe",isoname="Sao Tome and Principe",altnames={"Democratic Republic of Sao Tome and Principe"}},
["SV"] = {alpha3="SLV",numeric="222",name="El Salvador"},
["SX"] = {alpha3="SXM",numeric="534",name="Sint Maarten",isoname="Sint Maarten (Dutch part)",altnames={"St Maarten","Saint Martin (Dutch part)","St Martin (Dutch part)"}},
["SY"] = {alpha3="SYR",numeric="760",name="Syria",isoname="Syrian Arab Republic"},
["SZ"] = {alpha3="SWZ",numeric="748",name="Eswatini",altnames={"Swaziland"}},
["TC"] = {alpha3="TCA",numeric="796",name="Turks and Caicos Islands"},
["TD"] = {alpha3="TCD",numeric="148",name="Chad"},
["TF"] = {alpha3="ATF",numeric="260",name="French Southern and Antarctic Lands",isoname="French Southern Territories"},
["TG"] = {alpha3="TGO",numeric="768",name="Togo"},
["TH"] = {alpha3="THA",numeric="764",name="Thailand"},
["TJ"] = {alpha3="TJK",numeric="762",name="Tajikistan"},
["TK"] = {alpha3="TKL",numeric="772",name="Tokelau"},
["TL"] = {alpha3="TLS",numeric="626",name="Timor-Leste",altnames={"East Timor"}},
["TM"] = {alpha3="TKM",numeric="795",name="Turkmenistan"},
["TN"] = {alpha3="TUN",numeric="788",name="Tunisia"},
["TO"] = {alpha3="TON",numeric="776",name="Tonga"},
["TR"] = {alpha3="TUR",numeric="792",name="Turkey",isoname="Türkiye"},
["TT"] = {alpha3="TTO",numeric="780",name="Trinidad and Tobago"},
["TV"] = {alpha3="TUV",numeric="798",name="Tuvalu"},
["TW"] = {alpha3="TWN",numeric="158",name="Taiwan",isoname="Taiwan, Province of China",altnames={"Republic of China"}},
["TZ"] = {alpha3="TZA",numeric="834",name="Tanzania",isoname="Tanzania, United Republic of"},
["UA"] = {alpha3="UKR",numeric="804",name="Ukraine"},
["UG"] = {alpha3="UGA",numeric="800",name="Uganda"},
["UM"] = {alpha3="UMI",numeric="581",name="United States Minor Outlying Islands"},
["US"] = {alpha3="USA",numeric="840",name="United States",isoname="United States of America",altnames={"US","USA","U.S."}},
["UY"] = {alpha3="URY",numeric="858",name="Uruguay"},
["UZ"] = {alpha3="UZB",numeric="860",name="Uzbekistan"},
["VA"] = {alpha3="VAT",numeric="336",name="Vatican City",isoname="Holy See",altnames={"Holy See (Vatican City State)","Vatican City State"}},
["VC"] = {alpha3="VCT",numeric="670",name="Saint Vincent and the Grenadines",altnames={"St Vincent and the Grenadines"}},
["VE"] = {alpha3="VEN",numeric="862",name="Venezuela",isoname="Venezuela (Bolivarian Republic of)"},
["VG"] = {alpha3="VGB",numeric="092",name="British Virgin Islands",isoname="Virgin Islands (British)",altnames={"UK Virgin Islands","BVI"}},
["VI"] = {alpha3="VIR",numeric="850",name="United States Virgin Islands",isoname="Virgin Islands (U.S.)",altnames={"US Virgin Islands","USVI"}},
["VN"] = {alpha3="VNM",numeric="704",name="Vietnam",isoname="Viet Nam"},
["VU"] = {alpha3="VUT",numeric="548",name="Vanuatu"},
["WF"] = {alpha3="WLF",numeric="876",name="Wallis and Futuna"},
["WS"] = {alpha3="WSM",numeric="882",name="Samoa"},
["YE"] = {alpha3="YEM",numeric="887",name="Yemen"},
["YT"] = {alpha3="MYT",numeric="175",name="Mayotte"},
["ZA"] = {alpha3="ZAF",numeric="710",name="South Africa"},
["ZM"] = {alpha3="ZMB",numeric="894",name="Zambia"},
["ZW"] = {alpha3="ZWE",numeric="716",name="Zimbabwe"}
}
1ae753fe1fa53ce062b0a008dbc9778d589666f0
Template:Country data Croatia
10
243
492
2022-07-31T23:45:06Z
Pppery
5
Per edit request
wikitext
text/x-wiki
{{ {{{1<noinclude>|country showdata</noinclude>}}}
| alias = Croatia
| flag alias = Flag of Croatia.svg
| flag alias-civil = Civil Ensign of Croatia.svg
| flag alias-1990 = Flag of Croatia (1990).svg
| flag alias-naval = Naval ensign of Croatia.svg
| link alias-naval = Croatian Navy
| flag alias-air force = Flag of the Croatian Air Force.svg
| link alias-air force = Croatian Air Force
| link alias-military = Armed Forces of Croatia
| flag alias-army = Flag of Croatian Army.svg
| link alias-army = Croatian Army
| flag alias-navy = Naval ensign of Croatia.svg
| link alias-navy = Croatian Navy
| size = {{{size|}}}
| name = {{{name|}}}
| altlink = {{{altlink|}}}
| variant = {{{variant|}}}
<noinclude>
| var1 = civil
| var2 = 1990
| redir1 = HRV
| redir2 = CRO
| related1 = Independent State of Croatia
| related2 = SR Croatia
| related3 = PR Croatia
| related4 = Kingdom of Croatia (Habsburg)
</noinclude>
}}
b48856d8f7becf31f9935ba8fce138f3283dc4ea
Template:ISO 3166 code
10
228
462
2022-08-09T02:50:13Z
[[w>Neveselbert
0
safesubst
wikitext
text/x-wiki
{{safesubst<noinclude/>:#invoke:ISO 3166|code|{{{1}}}|{{{2|}}}}}<noinclude>
{{Documentation|content={{ISO 3166 conversion template doc}}}}
</noinclude>
06f8325798ef5cb3ed4eb035d562ab9f8656cc6c
Template:Country data Denmark
10
261
528
2022-08-11T13:37:10Z
[[w>Skjoldbro
0
border-navy
wikitext
text/x-wiki
{{ {{{1<noinclude>|country showdata</noinclude>}}}
| alias = Denmark
| flag alias = Flag of Denmark.svg
| flag alias-state = Flag of Denmark (state).svg
| border-state =
| flag alias-naval = Naval Ensign of Denmark.svg
| link alias-naval = Royal Danish Navy
| link alias-army = Royal Danish Army
| flag alias-army = Flag of Denmark (state).svg
| link alias-air force = Royal Danish Air Force
| flag alias-air force = Flag of Denmark (state).svg
| flag alias-navy = Naval Ensign of Denmark.svg
| link alias-navy = Royal Danish Navy
| border-army =
| border-air force =
| border-naval =
| border-navy =
| size = {{{size|}}}
| name = {{{name|}}}
| altlink = {{{altlink|}}}
| variant = {{{variant|}}}
<noinclude>
| var1 = state
| redir1 = DNK
| redir2 = DEN
| redir3 = Kingdom of Denmark
</noinclude>
}}
5598dd9004bbdd8ead3c89bfede63f7ca49a6169
Template:Used in system
10
298
602
2022-08-20T15:58:28Z
[[w>Pppery
0
Not an improvement - there's already a well-established edit request process starting with clicking "view source" and we don't need a duplicative process for the specific set of templates that are used in system messages
wikitext
text/x-wiki
{{#invoke:High-use|main|1=|2={{{2|}}}|system={{#if:{{{1|}}}|{{{1}}}|in system messages}}<noinclude>|nocat=true</noinclude>}}<noinclude>
{{documentation}}<!-- Add categories and interwikis to the /doc subpage, not here! -->
</noinclude>
0abe278369db6cbbe319e7452d7644e27e11c532
Template:Collapse bottom
10
255
516
2022-08-21T18:03:39Z
[[w>MSGJ
0
Undid revision 1105766128 by [[Special:Contributions/MSGJ|MSGJ]] ([[User talk:MSGJ|talk]]) - did not work
wikitext
text/x-wiki
<includeonly>|}</div></includeonly><noinclude>
{{Documentation|Template:Collapse top/doc}}
<!-- PLEASE ADD THIS TEMPLATE'S CATEGORIES AND INTERWIKIS TO THE /doc SUBPAGE, THANKS -->
</noinclude>
64b210e8ab0882b262da50e9fbccf2132bc34fab
Module:Hatnote
828
42
88
2022-09-05T18:18:32Z
[[w>Nihiltres
0
Reordered helper functions (first by export status, then alphabetically) and migrated p.quote upstream from [[Module:Redirect hatnote]] (includes contributions by Tamzin and Nihiltres)
Scribunto
text/plain
--------------------------------------------------------------------------------
-- Module:Hatnote --
-- --
-- This module produces hatnote links and links to related articles. It --
-- implements the {{hatnote}} and {{format link}} meta-templates and includes --
-- helper functions for other Lua hatnote modules. --
--------------------------------------------------------------------------------
local libraryUtil = require('libraryUtil')
local checkType = libraryUtil.checkType
local checkTypeForNamedArg = libraryUtil.checkTypeForNamedArg
local mArguments -- lazily initialise [[Module:Arguments]]
local yesno -- lazily initialise [[Module:Yesno]]
local formatLink -- lazily initialise [[Module:Format link]] ._formatLink
local p = {}
--------------------------------------------------------------------------------
-- Helper functions
--------------------------------------------------------------------------------
local function getArgs(frame)
-- Fetches the arguments from the parent frame. Whitespace is trimmed and
-- blanks are removed.
mArguments = require('Module:Arguments')
return mArguments.getArgs(frame, {parentOnly = true})
end
local function removeInitialColon(s)
-- Removes the initial colon from a string, if present.
return s:match('^:?(.*)')
end
function p.defaultClasses(inline)
-- Provides the default hatnote classes as a space-separated string; useful
-- for hatnote-manipulation modules like [[Module:Hatnote group]].
return
(inline == 1 and 'hatnote-inline' or 'hatnote') .. ' ' ..
'navigation-not-searchable'
end
function p.disambiguate(page, disambiguator)
-- Formats a page title with a disambiguation parenthetical,
-- i.e. "Example" → "Example (disambiguation)".
checkType('disambiguate', 1, page, 'string')
checkType('disambiguate', 2, disambiguator, 'string', true)
disambiguator = disambiguator or 'disambiguation'
return mw.ustring.format('%s (%s)', page, disambiguator)
end
function p.findNamespaceId(link, removeColon)
-- Finds the namespace id (namespace number) of a link or a pagename. This
-- function will not work if the link is enclosed in double brackets. Colons
-- are trimmed from the start of the link by default. To skip colon
-- trimming, set the removeColon parameter to false.
checkType('findNamespaceId', 1, link, 'string')
checkType('findNamespaceId', 2, removeColon, 'boolean', true)
if removeColon ~= false then
link = removeInitialColon(link)
end
local namespace = link:match('^(.-):')
if namespace then
local nsTable = mw.site.namespaces[namespace]
if nsTable then
return nsTable.id
end
end
return 0
end
function p.makeWikitextError(msg, helpLink, addTrackingCategory, title)
-- Formats an error message to be returned to wikitext. If
-- addTrackingCategory is not false after being returned from
-- [[Module:Yesno]], and if we are not on a talk page, a tracking category
-- is added.
checkType('makeWikitextError', 1, msg, 'string')
checkType('makeWikitextError', 2, helpLink, 'string', true)
yesno = require('Module:Yesno')
title = title or mw.title.getCurrentTitle()
-- Make the help link text.
local helpText
if helpLink then
helpText = ' ([[' .. helpLink .. '|help]])'
else
helpText = ''
end
-- Make the category text.
local category
if not title.isTalkPage -- Don't categorise talk pages
and title.namespace ~= 2 -- Don't categorise userspace
and yesno(addTrackingCategory) ~= false -- Allow opting out
then
category = 'Hatnote templates with errors'
category = mw.ustring.format(
'[[%s:%s]]',
mw.site.namespaces[14].name,
category
)
else
category = ''
end
return mw.ustring.format(
'<strong class="error">Error: %s%s.</strong>%s',
msg,
helpText,
category
)
end
local curNs = mw.title.getCurrentTitle().namespace
p.missingTargetCat =
--Default missing target category, exported for use in related modules
((curNs == 0) or (curNs == 14)) and
'Articles with hatnote templates targeting a nonexistent page' or nil
function p.quote(title)
--Wraps titles in quotation marks. If the title starts/ends with a quotation
--mark, kerns that side as with {{-'}}
local quotationMarks = {
["'"]=true, ['"']=true, ['“']=true, ["‘"]=true, ['”']=true, ["’"]=true
}
local quoteLeft, quoteRight = -- Test if start/end are quotation marks
quotationMarks[string.sub(title, 1, 1)],
quotationMarks[string.sub(title, -1, -1)]
if quoteLeft or quoteRight then
title = mw.html.create("span"):wikitext(title)
end
if quoteLeft then title:css("padding-left", "0.15em") end
if quoteRight then title:css("padding-right", "0.15em") end
return '"' .. tostring(title) .. '"'
end
--------------------------------------------------------------------------------
-- Hatnote
--
-- Produces standard hatnote text. Implements the {{hatnote}} template.
--------------------------------------------------------------------------------
function p.hatnote(frame)
local args = getArgs(frame)
local s = args[1]
if not s then
return p.makeWikitextError(
'no text specified',
'Template:Hatnote#Errors',
args.category
)
end
return p._hatnote(s, {
extraclasses = args.extraclasses,
selfref = args.selfref
})
end
function p._hatnote(s, options)
checkType('_hatnote', 1, s, 'string')
checkType('_hatnote', 2, options, 'table', true)
options = options or {}
local inline = options.inline
local hatnote = mw.html.create(inline == 1 and 'span' or 'div')
local extraclasses
if type(options.extraclasses) == 'string' then
extraclasses = options.extraclasses
end
hatnote
:attr('role', 'note')
:addClass(p.defaultClasses(inline))
:addClass(extraclasses)
:addClass(options.selfref and 'selfref' or nil)
:wikitext(s)
return mw.getCurrentFrame():extensionTag{
name = 'templatestyles', args = { src = 'Module:Hatnote/styles.css' }
} .. tostring(hatnote)
end
return p
3ae1ed7094c5005ca0896395ec9a587287a0bef1
Module:URL
828
224
454
2022-09-11T18:55:11Z
[[w>Paine Ellsworth
0
per edit request on talk page - update
Scribunto
text/plain
--
-- This module implements {{URL}}
--
-- See unit tests at [[Module:URL/testcases]]
local p = {}
local function safeUri(s)
local success, uri = pcall(function()
return mw.uri.new(s)
end)
if success then
return uri
end
end
local function extractUrl(args)
for name, val in pairs(args) do
if name ~= 2 and name ~= "msg" then
local url = name .. "=" .. val;
url = mw.ustring.gsub(url, '^[Hh][Tt][Tt][Pp]([Ss]?):(/?)([^/])', 'http%1://%3')
local uri = safeUri(url);
if uri and uri.host then
return url
end
end
end
end
function p._url(url, text, msg)
url = mw.text.trim(url or '')
text = mw.text.trim(text or '')
local nomsg = (msg or ''):sub(1,1):lower() == "n" or msg == 'false' -- boolean: true if msg is "false" or starts with n or N
if url == '' then
if text == '' then
if nomsg then
return nil
else
return mw.getCurrentFrame():expandTemplate{ title = 'tlx', args = { 'URL', "''example.com''", "''optional display text''" } }
end
else
return text
end
end
-- If the URL contains any unencoded spaces, encode them, because MediaWiki will otherwise interpret a space as the end of the URL.
url = mw.ustring.gsub(url, '%s', function(s) return mw.uri.encode(s, 'PATH') end)
-- If there is an empty query string or fragment id, remove it as it will cause mw.uri.new to throw an error
url = mw.ustring.gsub(url, '#$', '')
url = mw.ustring.gsub(url, '%?$', '')
-- If it's an HTTP[S] URL without the double slash, fix it.
url = mw.ustring.gsub(url, '^[Hh][Tt][Tt][Pp]([Ss]?):(/?)([^/])', 'http%1://%3')
local uri = safeUri(url)
-- Handle URL's without a protocol and URL's that are protocol-relative,
-- e.g. www.example.com/foo or www.example.com:8080/foo, and //www.example.com/foo
if uri and (not uri.protocol or (uri.protocol and not uri.host)) and url:sub(1, 2) ~= '//' then
url = 'http://' .. url
uri = safeUri(url)
end
if text == '' then
if uri then
if uri.path == '/' then uri.path = '' end
local port = ''
if uri.port then port = ':' .. uri.port end
text = mw.ustring.lower(uri.host or '') .. port .. (uri.relativePath or '')
-- Add <wbr> before _/.-# sequences
text = mw.ustring.gsub(text,"(/+)","<wbr/>%1") -- This entry MUST be the first. "<wbr/>" has a "/" in it, you know.
text = mw.ustring.gsub(text,"(%.+)","<wbr/>%1")
-- text = mw.ustring.gsub(text,"(%-+)","<wbr/>%1") -- DISABLED for now
text = mw.ustring.gsub(text,"(%#+)","<wbr/>%1")
text = mw.ustring.gsub(text,"(_+)","<wbr/>%1")
else -- URL is badly-formed, so just display whatever was passed in
text = url
end
end
return mw.ustring.format('<span class="url">[%s %s]</span>', url, text)
end
--[[
The main entry point for calling from Template:URL.
--]]
function p.url(frame)
local templateArgs = frame.args
local parentArgs = frame:getParent().args
local url = templateArgs[1] or parentArgs[1]
local text = templateArgs[2] or parentArgs[2] or ''
local msg = templateArgs.msg or parentArgs.msg or ''
url = url or extractUrl(templateArgs) or extractUrl(parentArgs) or ''
return p._url(url, text, msg)
end
--[[
The entry point for calling from the forked Template:URL2.
This function returns no message by default.
It strips out wiki-link markup, html tags, and everything after a space.
--]]
function p.url2(frame)
local templateArgs = frame.args
local parentArgs = frame:getParent().args
local url = templateArgs[1] or parentArgs[1]
local text = templateArgs[2] or parentArgs[2] or ''
-- default to no message
local msg = templateArgs.msg or parentArgs.msg or 'no'
url = url or extractUrl(templateArgs) or extractUrl(parentArgs) or ''
-- if the url came from a Wikidata call, it might have a pen icon appended
-- we want to keep that and add it back at the end.
local u1, penicon = mw.ustring.match( url, "(.*)( <span class='penicon.*)" )
if penicon then url = u1 end
-- strip out html tags and [ ] from url
url = (url or ''):gsub("<[^>]*>", ""):gsub("[%[%]]", "")
-- truncate anything after a space
url = url:gsub("%%20", " "):gsub(" .*", "")
return (p._url(url, text, msg) or "") .. (penicon or "")
end
return p
8d7a4c6fe04a01815e940475cf64b28e1ef48cfb
Template:Parameter names example
10
74
152
2022-09-15T17:36:18Z
[[w>Aidan9382
0
Hatnote should ideally be moved into documentation as to allow users to edit it regardless of the protection on the main template
wikitext
text/x-wiki
<includeonly>{{#invoke:Parameter names example|main}}</includeonly><noinclude>
{{Documentation}}
</noinclude>
de1e29d6ebc113e9d1649ea6a976625885db8a2f
Template:Country data Germany
10
245
496
2022-09-17T07:38:32Z
[[w>Skjoldbro
0
wikitext
text/x-wiki
{{safesubst<noinclude />: {{{1<noinclude>|country showdata</noinclude>}}}
| alias = Germany
| flag alias = Flag of Germany.svg
| flag alias-1866 = Flag of the German Empire.svg
| link alias-1866 = German Empire
| flag alias-empire = Flag of the German Empire.svg
| link alias-empire = German Empire
| flag alias-1919 = Flag of Germany (3-2 aspect ratio).svg
| link alias-1919 = Weimar Republic
| flag alias-Weimar = Flag of Germany (3-2 aspect ratio).svg
| link alias-Weimar = Weimar Republic
| flag alias-1933 = Flag of Germany (1933-1935).svg
| flag alias-1935 = Flag of Germany (1935–1945).svg
| link alias-1935 = Nazi Germany
| flag alias-Nazi = Flag of Germany (1935–1945).svg
| link alias-Nazi = Nazi Germany
| flag alias-1946 = Merchant flag of Germany (1946–1949).svg
| border-1946 =
| flag alias-1949 = Flag of Germany.svg
| flag alias-EUA = German Olympic flag (1959-1968).svg
| flag alias-gold = Flag of West Germany; Flag of Germany (1990–1996).svg
| flag alias-state = Flag of Germany (state).svg
| flag alias-naval = Naval Ensign of Germany.svg
| border-naval =
| link alias-naval = German Navy
| flag alias-coast guard=German Federal Coast Guard racing stripe.svg
| border-coast guard=
| link alias-coast guard=German Federal Coast Guard
| flag alias-army = Colour of Germany.svg
| flag alias-air force =Flag of Germany (state).svg
| link alias-air force = German Air Force
| link alias-army = German Army
| flag alias-navy = Naval Ensign of Germany.svg
| link alias-navy = German Navy
| border-navy =
| border-army=
| size = {{{size|}}}
| name = {{{name|}}}
| altlink = {{{altlink|}}}
| variant = {{{variant|}}}
<noinclude>
| var1 = 1866
| var2 = empire
| var3 = 1919
| var4 = Weimar
| var5 = 1933
| var6 = 1935
| var7 = Nazi
| var8 = 1946
| var9 = 1949
| var10 = EUA
| var11 = gold
| var12 = state
| redir1 = DEU
| redir2 = GER
| related1 = German Empire
| related2 = Weimar Republic
| related3 = Nazi Germany
| related4 = Allied-occupied Germany
| related5 = East Germany
| related6 = West Germany
</noinclude>
}}
f8c90307d21fdadc176f684f3fc1be65db23f569
Template:Infobox country/imagetable
10
325
679
2022-09-29T14:58:37Z
[[]]>Elli
0
copy changes [[Template:Infobox country/imagetable/sandbox|from sandbox]]
wikitext
text/x-wiki
{{#if:{{both|{{{image1a|}}}{{{image1b|}}}|{{{image2|}}}}}|
<div class="noresize" style="display:table; width:100%;">
<div style="display:table-cell; vertical-align:middle; padding-left:5px;">
{{#if:{{{image1a|}}}|<div style="padding-bottom:3px;">{{{image1a|}}}</div>}}{{#if:{{{image1b|}}}|<div style="padding: 2px 0px 3px;">{{{image1b|}}}</div>}}
<div>{{{caption1|}}}</div>
</div>
<div style="display:table-cell; vertical-align:middle; padding: 0px 5px;">
<div style="padding-bottom:3px;">{{{image2|}}}</div>
<div>{{{caption2|}}}</div>
</div>
</div>
<!--else:-->|
{{#if:{{{image1a|}}}{{{image1b|}}}|
<div class="noresize" style="display:table; width:100%;">
{{#if:{{{image1a|}}}|<div style="display:table-cell; vertical-align:middle; padding: 0px 5px 3px;">{{{image1a|}}}</div>}}{{#if:{{{image1b|}}}|<div style="display:table-cell; vertical-align:middle; padding: 0px 5px 3px 0px;">{{{image1b|}}}</div>}}
</div>
<div>{{{caption1}}}</div>
}}
{{#if:{{{image2|}}}|
<div style="padding: 0px 5px;">
<div style="padding-bottom:3px;">{{{image2|}}}</div>
<div>{{{caption2}}}</div>
</div>
}}
}}<noinclude>
{{documentation|content=
This subtemplate is used to simplify the code of {{tl|infobox country}}. It should not be used directly.
}}</noinclude>
4094e7b538bb7456c09fbbfcdf9cf4e30e1b6b5b
Template:Tl
10
17
654
38
2022-09-30T01:09:19Z
[[cln>Pppery
0
Redirected page to [[Template:Template link]]
wikitext
text/x-wiki
#REDIRECT [[Template:Template link]]
fb9a6b420e13178e581af6e7d64274cd30a79017
Template:Template link
10
18
652
40
2022-09-30T01:10:00Z
[[cln>Pppery
0
46 revisions imported from [[:wikipedia:Template:Template_link]]
wikitext
text/x-wiki
{{[[Template:{{{1}}}|{{{1}}}]]}}<noinclude>{{documentation}}
<!-- Categories go on the /doc subpage and interwikis go on Wikidata. -->
</noinclude>
eabbec62efe3044a98ebb3ce9e7d4d43c222351d
Module:Arguments
828
16
644
36
2022-09-30T02:32:01Z
[[cln>Pppery
0
24 revisions imported from [[:wikipedia:Module:Arguments]]
Scribunto
text/plain
-- This module provides easy processing of arguments passed to Scribunto from
-- #invoke. It is intended for use by other Lua modules, and should not be
-- called from #invoke directly.
local libraryUtil = require('libraryUtil')
local checkType = libraryUtil.checkType
local arguments = {}
-- Generate four different tidyVal functions, so that we don't have to check the
-- options every time we call it.
local function tidyValDefault(key, val)
if type(val) == 'string' then
val = val:match('^%s*(.-)%s*$')
if val == '' then
return nil
else
return val
end
else
return val
end
end
local function tidyValTrimOnly(key, val)
if type(val) == 'string' then
return val:match('^%s*(.-)%s*$')
else
return val
end
end
local function tidyValRemoveBlanksOnly(key, val)
if type(val) == 'string' then
if val:find('%S') then
return val
else
return nil
end
else
return val
end
end
local function tidyValNoChange(key, val)
return val
end
local function matchesTitle(given, title)
local tp = type( given )
return (tp == 'string' or tp == 'number') and mw.title.new( given ).prefixedText == title
end
local translate_mt = { __index = function(t, k) return k end }
function arguments.getArgs(frame, options)
checkType('getArgs', 1, frame, 'table', true)
checkType('getArgs', 2, options, 'table', true)
frame = frame or {}
options = options or {}
--[[
-- Set up argument translation.
--]]
options.translate = options.translate or {}
if getmetatable(options.translate) == nil then
setmetatable(options.translate, translate_mt)
end
if options.backtranslate == nil then
options.backtranslate = {}
for k,v in pairs(options.translate) do
options.backtranslate[v] = k
end
end
if options.backtranslate and getmetatable(options.backtranslate) == nil then
setmetatable(options.backtranslate, {
__index = function(t, k)
if options.translate[k] ~= k then
return nil
else
return k
end
end
})
end
--[[
-- Get the argument tables. If we were passed a valid frame object, get the
-- frame arguments (fargs) and the parent frame arguments (pargs), depending
-- on the options set and on the parent frame's availability. If we weren't
-- passed a valid frame object, we are being called from another Lua module
-- or from the debug console, so assume that we were passed a table of args
-- directly, and assign it to a new variable (luaArgs).
--]]
local fargs, pargs, luaArgs
if type(frame.args) == 'table' and type(frame.getParent) == 'function' then
if options.wrappers then
--[[
-- The wrappers option makes Module:Arguments look up arguments in
-- either the frame argument table or the parent argument table, but
-- not both. This means that users can use either the #invoke syntax
-- or a wrapper template without the loss of performance associated
-- with looking arguments up in both the frame and the parent frame.
-- Module:Arguments will look up arguments in the parent frame
-- if it finds the parent frame's title in options.wrapper;
-- otherwise it will look up arguments in the frame object passed
-- to getArgs.
--]]
local parent = frame:getParent()
if not parent then
fargs = frame.args
else
local title = parent:getTitle():gsub('/sandbox$', '')
local found = false
if matchesTitle(options.wrappers, title) then
found = true
elseif type(options.wrappers) == 'table' then
for _,v in pairs(options.wrappers) do
if matchesTitle(v, title) then
found = true
break
end
end
end
-- We test for false specifically here so that nil (the default) acts like true.
if found or options.frameOnly == false then
pargs = parent.args
end
if not found or options.parentOnly == false then
fargs = frame.args
end
end
else
-- options.wrapper isn't set, so check the other options.
if not options.parentOnly then
fargs = frame.args
end
if not options.frameOnly then
local parent = frame:getParent()
pargs = parent and parent.args or nil
end
end
if options.parentFirst then
fargs, pargs = pargs, fargs
end
else
luaArgs = frame
end
-- Set the order of precedence of the argument tables. If the variables are
-- nil, nothing will be added to the table, which is how we avoid clashes
-- between the frame/parent args and the Lua args.
local argTables = {fargs}
argTables[#argTables + 1] = pargs
argTables[#argTables + 1] = luaArgs
--[[
-- Generate the tidyVal function. If it has been specified by the user, we
-- use that; if not, we choose one of four functions depending on the
-- options chosen. This is so that we don't have to call the options table
-- every time the function is called.
--]]
local tidyVal = options.valueFunc
if tidyVal then
if type(tidyVal) ~= 'function' then
error(
"bad value assigned to option 'valueFunc'"
.. '(function expected, got '
.. type(tidyVal)
.. ')',
2
)
end
elseif options.trim ~= false then
if options.removeBlanks ~= false then
tidyVal = tidyValDefault
else
tidyVal = tidyValTrimOnly
end
else
if options.removeBlanks ~= false then
tidyVal = tidyValRemoveBlanksOnly
else
tidyVal = tidyValNoChange
end
end
--[[
-- Set up the args, metaArgs and nilArgs tables. args will be the one
-- accessed from functions, and metaArgs will hold the actual arguments. Nil
-- arguments are memoized in nilArgs, and the metatable connects all of them
-- together.
--]]
local args, metaArgs, nilArgs, metatable = {}, {}, {}, {}
setmetatable(args, metatable)
local function mergeArgs(tables)
--[[
-- Accepts multiple tables as input and merges their keys and values
-- into one table. If a value is already present it is not overwritten;
-- tables listed earlier have precedence. We are also memoizing nil
-- values, which can be overwritten if they are 's' (soft).
--]]
for _, t in ipairs(tables) do
for key, val in pairs(t) do
if metaArgs[key] == nil and nilArgs[key] ~= 'h' then
local tidiedVal = tidyVal(key, val)
if tidiedVal == nil then
nilArgs[key] = 's'
else
metaArgs[key] = tidiedVal
end
end
end
end
end
--[[
-- Define metatable behaviour. Arguments are memoized in the metaArgs table,
-- and are only fetched from the argument tables once. Fetching arguments
-- from the argument tables is the most resource-intensive step in this
-- module, so we try and avoid it where possible. For this reason, nil
-- arguments are also memoized, in the nilArgs table. Also, we keep a record
-- in the metatable of when pairs and ipairs have been called, so we do not
-- run pairs and ipairs on the argument tables more than once. We also do
-- not run ipairs on fargs and pargs if pairs has already been run, as all
-- the arguments will already have been copied over.
--]]
metatable.__index = function (t, key)
--[[
-- Fetches an argument when the args table is indexed. First we check
-- to see if the value is memoized, and if not we try and fetch it from
-- the argument tables. When we check memoization, we need to check
-- metaArgs before nilArgs, as both can be non-nil at the same time.
-- If the argument is not present in metaArgs, we also check whether
-- pairs has been run yet. If pairs has already been run, we return nil.
-- This is because all the arguments will have already been copied into
-- metaArgs by the mergeArgs function, meaning that any other arguments
-- must be nil.
--]]
if type(key) == 'string' then
key = options.translate[key]
end
local val = metaArgs[key]
if val ~= nil then
return val
elseif metatable.donePairs or nilArgs[key] then
return nil
end
for _, argTable in ipairs(argTables) do
local argTableVal = tidyVal(key, argTable[key])
if argTableVal ~= nil then
metaArgs[key] = argTableVal
return argTableVal
end
end
nilArgs[key] = 'h'
return nil
end
metatable.__newindex = function (t, key, val)
-- This function is called when a module tries to add a new value to the
-- args table, or tries to change an existing value.
if type(key) == 'string' then
key = options.translate[key]
end
if options.readOnly then
error(
'could not write to argument table key "'
.. tostring(key)
.. '"; the table is read-only',
2
)
elseif options.noOverwrite and args[key] ~= nil then
error(
'could not write to argument table key "'
.. tostring(key)
.. '"; overwriting existing arguments is not permitted',
2
)
elseif val == nil then
--[[
-- If the argument is to be overwritten with nil, we need to erase
-- the value in metaArgs, so that __index, __pairs and __ipairs do
-- not use a previous existing value, if present; and we also need
-- to memoize the nil in nilArgs, so that the value isn't looked
-- up in the argument tables if it is accessed again.
--]]
metaArgs[key] = nil
nilArgs[key] = 'h'
else
metaArgs[key] = val
end
end
local function translatenext(invariant)
local k, v = next(invariant.t, invariant.k)
invariant.k = k
if k == nil then
return nil
elseif type(k) ~= 'string' or not options.backtranslate then
return k, v
else
local backtranslate = options.backtranslate[k]
if backtranslate == nil then
-- Skip this one. This is a tail call, so this won't cause stack overflow
return translatenext(invariant)
else
return backtranslate, v
end
end
end
metatable.__pairs = function ()
-- Called when pairs is run on the args table.
if not metatable.donePairs then
mergeArgs(argTables)
metatable.donePairs = true
end
return translatenext, { t = metaArgs }
end
local function inext(t, i)
-- This uses our __index metamethod
local v = t[i + 1]
if v ~= nil then
return i + 1, v
end
end
metatable.__ipairs = function (t)
-- Called when ipairs is run on the args table.
return inext, t, 0
end
return args
end
return arguments
3134ecce8429b810d445e29eae115e2ae4c36c53
Module:Documentation
828
59
646
2022-09-30T02:36:08Z
[[cln>Pppery
0
Pppery moved page [[Module:Documentation/2]] to [[Module:Documentation]] without leaving a redirect
Scribunto
text/plain
-- This module implements {{documentation}}.
-- Get required modules.
local getArgs = require('Module:Arguments').getArgs
-- Get the config table.
local cfg = mw.loadData('Module:Documentation/config')
local p = {}
-- Often-used functions.
local ugsub = mw.ustring.gsub
----------------------------------------------------------------------------
-- Helper functions
--
-- These are defined as local functions, but are made available in the p
-- table for testing purposes.
----------------------------------------------------------------------------
local function message(cfgKey, valArray, expectType)
--[[
-- Gets a message from the cfg table and formats it if appropriate.
-- The function raises an error if the value from the cfg table is not
-- of the type expectType. The default type for expectType is 'string'.
-- If the table valArray is present, strings such as $1, $2 etc. in the
-- message are substituted with values from the table keys [1], [2] etc.
-- For example, if the message "foo-message" had the value 'Foo $2 bar $1.',
-- message('foo-message', {'baz', 'qux'}) would return "Foo qux bar baz."
--]]
local msg = cfg[cfgKey]
expectType = expectType or 'string'
if type(msg) ~= expectType then
error('message: type error in message cfg.' .. cfgKey .. ' (' .. expectType .. ' expected, got ' .. type(msg) .. ')', 2)
end
if not valArray then
return msg
end
local function getMessageVal(match)
match = tonumber(match)
return valArray[match] or error('message: no value found for key $' .. match .. ' in message cfg.' .. cfgKey, 4)
end
return ugsub(msg, '$([1-9][0-9]*)', getMessageVal)
end
p.message = message
local function makeWikilink(page, display)
if display then
return mw.ustring.format('[[%s|%s]]', page, display)
else
return mw.ustring.format('[[%s]]', page)
end
end
p.makeWikilink = makeWikilink
local function makeCategoryLink(cat, sort)
local catns = mw.site.namespaces[14].name
return makeWikilink(catns .. ':' .. cat, sort)
end
p.makeCategoryLink = makeCategoryLink
local function makeUrlLink(url, display)
return mw.ustring.format('[%s %s]', url, display)
end
p.makeUrlLink = makeUrlLink
local function makeToolbar(...)
local ret = {}
local lim = select('#', ...)
if lim < 1 then
return nil
end
for i = 1, lim do
ret[#ret + 1] = select(i, ...)
end
-- 'documentation-toolbar'
return '<span class="' .. message('toolbar-class') .. '">('
.. table.concat(ret, ' | ') .. ')</span>'
end
p.makeToolbar = makeToolbar
----------------------------------------------------------------------------
-- Argument processing
----------------------------------------------------------------------------
local function makeInvokeFunc(funcName)
return function (frame)
local args = getArgs(frame, {
valueFunc = function (key, value)
if type(value) == 'string' then
value = value:match('^%s*(.-)%s*$') -- Remove whitespace.
if key == 'heading' or value ~= '' then
return value
else
return nil
end
else
return value
end
end
})
return p[funcName](args)
end
end
----------------------------------------------------------------------------
-- Entry points
----------------------------------------------------------------------------
function p.nonexistent(frame)
if mw.title.getCurrentTitle().subpageText == 'testcases' then
return frame:expandTemplate{title = 'module test cases notice'}
else
return p.main(frame)
end
end
p.main = makeInvokeFunc('_main')
function p._main(args)
--[[
-- This function defines logic flow for the module.
-- @args - table of arguments passed by the user
--]]
local env = p.getEnvironment(args)
local root = mw.html.create()
root
:tag('div')
-- 'documentation-container'
:addClass(message('container'))
:attr('role', 'complementary')
:attr('aria-labelledby', args.heading ~= '' and 'documentation-heading' or nil)
:attr('aria-label', args.heading == '' and 'Documentation' or nil)
:newline()
:tag('div')
-- 'documentation'
:addClass(message('main-div-classes'))
:newline()
:wikitext(p._startBox(args, env))
:wikitext(p._content(args, env))
:tag('div')
-- 'documentation-clear'
:addClass(message('clear'))
:done()
:newline()
:done()
:wikitext(p._endBox(args, env))
:done()
:wikitext(p.addTrackingCategories(env))
-- 'Module:Documentation/styles.css'
return mw.getCurrentFrame():extensionTag (
'templatestyles', '', {src=cfg['templatestyles']
}) .. tostring(root)
end
----------------------------------------------------------------------------
-- Environment settings
----------------------------------------------------------------------------
function p.getEnvironment(args)
--[[
-- Returns a table with information about the environment, including title
-- objects and other namespace- or path-related data.
-- @args - table of arguments passed by the user
--
-- Title objects include:
-- env.title - the page we are making documentation for (usually the current title)
-- env.templateTitle - the template (or module, file, etc.)
-- env.docTitle - the /doc subpage.
-- env.sandboxTitle - the /sandbox subpage.
-- env.testcasesTitle - the /testcases subpage.
--
-- Data includes:
-- env.subjectSpace - the number of the title's subject namespace.
-- env.docSpace - the number of the namespace the title puts its documentation in.
-- env.docpageBase - the text of the base page of the /doc, /sandbox and /testcases pages, with namespace.
-- env.compareUrl - URL of the Special:ComparePages page comparing the sandbox with the template.
--
-- All table lookups are passed through pcall so that errors are caught. If an error occurs, the value
-- returned will be nil.
--]]
local env, envFuncs = {}, {}
-- Set up the metatable. If triggered we call the corresponding function in the envFuncs table. The value
-- returned by that function is memoized in the env table so that we don't call any of the functions
-- more than once. (Nils won't be memoized.)
setmetatable(env, {
__index = function (t, key)
local envFunc = envFuncs[key]
if envFunc then
local success, val = pcall(envFunc)
if success then
env[key] = val -- Memoise the value.
return val
end
end
return nil
end
})
function envFuncs.title()
-- The title object for the current page, or a test page passed with args.page.
local title
local titleArg = args.page
if titleArg then
title = mw.title.new(titleArg)
else
title = mw.title.getCurrentTitle()
end
return title
end
function envFuncs.templateTitle()
--[[
-- The template (or module, etc.) title object.
-- Messages:
-- 'sandbox-subpage' --> 'sandbox'
-- 'testcases-subpage' --> 'testcases'
--]]
local subjectSpace = env.subjectSpace
local title = env.title
local subpage = title.subpageText
if subpage == message('sandbox-subpage') or subpage == message('testcases-subpage') then
return mw.title.makeTitle(subjectSpace, title.baseText)
else
return mw.title.makeTitle(subjectSpace, title.text)
end
end
function envFuncs.docTitle()
--[[
-- Title object of the /doc subpage.
-- Messages:
-- 'doc-subpage' --> 'doc'
--]]
local title = env.title
local docname = args[1] -- User-specified doc page.
local docpage
if docname then
docpage = docname
else
docpage = env.docpageBase .. '/' .. message('doc-subpage')
end
return mw.title.new(docpage)
end
function envFuncs.sandboxTitle()
--[[
-- Title object for the /sandbox subpage.
-- Messages:
-- 'sandbox-subpage' --> 'sandbox'
--]]
return mw.title.new(env.docpageBase .. '/' .. message('sandbox-subpage'))
end
function envFuncs.testcasesTitle()
--[[
-- Title object for the /testcases subpage.
-- Messages:
-- 'testcases-subpage' --> 'testcases'
--]]
return mw.title.new(env.docpageBase .. '/' .. message('testcases-subpage'))
end
function envFuncs.subjectSpace()
-- The subject namespace number.
return mw.site.namespaces[env.title.namespace].subject.id
end
function envFuncs.docSpace()
-- The documentation namespace number. For most namespaces this is the
-- same as the subject namespace. However, pages in the Article, File,
-- MediaWiki or Category namespaces must have their /doc, /sandbox and
-- /testcases pages in talk space.
local subjectSpace = env.subjectSpace
if subjectSpace == 0 or subjectSpace == 6 or subjectSpace == 8 or subjectSpace == 14 then
return subjectSpace + 1
else
return subjectSpace
end
end
function envFuncs.docpageBase()
-- The base page of the /doc, /sandbox, and /testcases subpages.
-- For some namespaces this is the talk page, rather than the template page.
local templateTitle = env.templateTitle
local docSpace = env.docSpace
local docSpaceText = mw.site.namespaces[docSpace].name
-- Assemble the link. docSpace is never the main namespace, so we can hardcode the colon.
return docSpaceText .. ':' .. templateTitle.text
end
function envFuncs.compareUrl()
-- Diff link between the sandbox and the main template using [[Special:ComparePages]].
local templateTitle = env.templateTitle
local sandboxTitle = env.sandboxTitle
if templateTitle.exists and sandboxTitle.exists then
local compareUrl = mw.uri.fullUrl(
'Special:ComparePages',
{ page1 = templateTitle.prefixedText, page2 = sandboxTitle.prefixedText}
)
return tostring(compareUrl)
else
return nil
end
end
return env
end
----------------------------------------------------------------------------
-- Start box
----------------------------------------------------------------------------
p.startBox = makeInvokeFunc('_startBox')
function p._startBox(args, env)
--[[
-- This function generates the start box.
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
--
-- The actual work is done by p.makeStartBoxLinksData and p.renderStartBoxLinks which make
-- the [view] [edit] [history] [purge] links, and by p.makeStartBoxData and p.renderStartBox
-- which generate the box HTML.
--]]
env = env or p.getEnvironment(args)
local links
local content = args.content
if not content or args[1] then
-- No need to include the links if the documentation is on the template page itself.
local linksData = p.makeStartBoxLinksData(args, env)
if linksData then
links = p.renderStartBoxLinks(linksData)
end
end
-- Generate the start box html.
local data = p.makeStartBoxData(args, env, links)
if data then
return p.renderStartBox(data)
else
-- User specified no heading.
return nil
end
end
function p.makeStartBoxLinksData(args, env)
--[[
-- Does initial processing of data to make the [view] [edit] [history] [purge] links.
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
--
-- Messages:
-- 'view-link-display' --> 'view'
-- 'edit-link-display' --> 'edit'
-- 'history-link-display' --> 'history'
-- 'purge-link-display' --> 'purge'
-- 'module-preload' --> 'Template:Documentation/preload-module-doc'
-- 'docpage-preload' --> 'Template:Documentation/preload'
-- 'create-link-display' --> 'create'
--]]
local subjectSpace = env.subjectSpace
local title = env.title
local docTitle = env.docTitle
if not title or not docTitle then
return nil
end
if docTitle.isRedirect then
docTitle = docTitle.redirectTarget
end
local data = {}
data.title = title
data.docTitle = docTitle
-- View, display, edit, and purge links if /doc exists.
data.viewLinkDisplay = message('view-link-display')
data.editLinkDisplay = message('edit-link-display')
data.historyLinkDisplay = message('history-link-display')
data.purgeLinkDisplay = message('purge-link-display')
-- Create link if /doc doesn't exist.
local preload = args.preload
if not preload then
if subjectSpace == 828 then -- Module namespace
preload = message('module-preload')
else
preload = message('docpage-preload')
end
end
data.preload = preload
data.createLinkDisplay = message('create-link-display')
return data
end
function p.renderStartBoxLinks(data)
--[[
-- Generates the [view][edit][history][purge] or [create][purge] links from the data table.
-- @data - a table of data generated by p.makeStartBoxLinksData
--]]
local function escapeBrackets(s)
-- Escapes square brackets with HTML entities.
s = s:gsub('%[', '[') -- Replace square brackets with HTML entities.
s = s:gsub('%]', ']')
return s
end
local ret
local docTitle = data.docTitle
local title = data.title
local purgeLink = makeUrlLink(title:fullUrl{action = 'purge'}, data.purgeLinkDisplay)
if docTitle.exists then
local viewLink = makeWikilink(docTitle.prefixedText, data.viewLinkDisplay)
local editLink = makeUrlLink(docTitle:fullUrl{action = 'edit'}, data.editLinkDisplay)
local historyLink = makeUrlLink(docTitle:fullUrl{action = 'history'}, data.historyLinkDisplay)
ret = '[%s] [%s] [%s] [%s]'
ret = escapeBrackets(ret)
ret = mw.ustring.format(ret, viewLink, editLink, historyLink, purgeLink)
else
local createLink = makeUrlLink(docTitle:fullUrl{action = 'edit', preload = data.preload}, data.createLinkDisplay)
ret = '[%s] [%s]'
ret = escapeBrackets(ret)
ret = mw.ustring.format(ret, createLink, purgeLink)
end
return ret
end
function p.makeStartBoxData(args, env, links)
--[=[
-- Does initial processing of data to pass to the start-box render function, p.renderStartBox.
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
-- @links - a string containing the [view][edit][history][purge] links - could be nil if there's an error.
--
-- Messages:
-- 'documentation-icon-wikitext' --> '[[File:Test Template Info-Icon - Version (2).svg|50px|link=|alt=]]'
-- 'template-namespace-heading' --> 'Template documentation'
-- 'module-namespace-heading' --> 'Module documentation'
-- 'file-namespace-heading' --> 'Summary'
-- 'other-namespaces-heading' --> 'Documentation'
-- 'testcases-create-link-display' --> 'create'
--]=]
local subjectSpace = env.subjectSpace
if not subjectSpace then
-- Default to an "other namespaces" namespace, so that we get at least some output
-- if an error occurs.
subjectSpace = 2
end
local data = {}
-- Heading
local heading = args.heading -- Blank values are not removed.
if heading == '' then
-- Don't display the start box if the heading arg is defined but blank.
return nil
end
if heading then
data.heading = heading
elseif subjectSpace == 10 then -- Template namespace
data.heading = message('documentation-icon-wikitext') .. ' ' .. message('template-namespace-heading')
elseif subjectSpace == 828 then -- Module namespace
data.heading = message('documentation-icon-wikitext') .. ' ' .. message('module-namespace-heading')
elseif subjectSpace == 6 then -- File namespace
data.heading = message('file-namespace-heading')
else
data.heading = message('other-namespaces-heading')
end
-- Heading CSS
local headingStyle = args['heading-style']
if headingStyle then
data.headingStyleText = headingStyle
else
-- 'documentation-heading'
data.headingClass = message('main-div-heading-class')
end
-- Data for the [view][edit][history][purge] or [create] links.
if links then
-- 'mw-editsection-like plainlinks'
data.linksClass = message('start-box-link-classes')
data.links = links
end
return data
end
function p.renderStartBox(data)
-- Renders the start box html.
-- @data - a table of data generated by p.makeStartBoxData.
local sbox = mw.html.create('div')
sbox
-- 'documentation-startbox'
:addClass(message('start-box-class'))
:newline()
:tag('span')
:addClass(data.headingClass)
:attr('id', 'documentation-heading')
:cssText(data.headingStyleText)
:wikitext(data.heading)
local links = data.links
if links then
sbox:tag('span')
:addClass(data.linksClass)
:attr('id', data.linksId)
:wikitext(links)
end
return tostring(sbox)
end
----------------------------------------------------------------------------
-- Documentation content
----------------------------------------------------------------------------
p.content = makeInvokeFunc('_content')
function p._content(args, env)
-- Displays the documentation contents
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
env = env or p.getEnvironment(args)
local docTitle = env.docTitle
local content = args.content
if not content and docTitle and docTitle.exists then
content = args._content or mw.getCurrentFrame():expandTemplate{title = docTitle.prefixedText}
end
-- The line breaks below are necessary so that "=== Headings ===" at the start and end
-- of docs are interpreted correctly.
return '\n' .. (content or '') .. '\n'
end
p.contentTitle = makeInvokeFunc('_contentTitle')
function p._contentTitle(args, env)
env = env or p.getEnvironment(args)
local docTitle = env.docTitle
if not args.content and docTitle and docTitle.exists then
return docTitle.prefixedText
else
return ''
end
end
----------------------------------------------------------------------------
-- End box
----------------------------------------------------------------------------
p.endBox = makeInvokeFunc('_endBox')
function p._endBox(args, env)
--[=[
-- This function generates the end box (also known as the link box).
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
--
--]=]
-- Get environment data.
env = env or p.getEnvironment(args)
local subjectSpace = env.subjectSpace
local docTitle = env.docTitle
if not subjectSpace or not docTitle then
return nil
end
-- Check whether we should output the end box at all. Add the end
-- box by default if the documentation exists or if we are in the
-- user, module or template namespaces.
local linkBox = args['link box']
if linkBox == 'off'
or not (
docTitle.exists
or subjectSpace == 2
or subjectSpace == 828
or subjectSpace == 10
)
then
return nil
end
-- Assemble the link box.
local text = ''
if linkBox then
text = text .. linkBox
else
text = text .. (p.makeDocPageBlurb(args, env) or '') -- "This documentation is transcluded from [[Foo]]."
if subjectSpace == 2 or subjectSpace == 10 or subjectSpace == 828 then
-- We are in the user, template or module namespaces.
-- Add sandbox and testcases links.
-- "Editors can experiment in this template's sandbox and testcases pages."
text = text .. (p.makeExperimentBlurb(args, env) or '') .. '<br />'
if not args.content and not args[1] then
-- "Please add categories to the /doc subpage."
-- Don't show this message with inline docs or with an explicitly specified doc page,
-- as then it is unclear where to add the categories.
text = text .. (p.makeCategoriesBlurb(args, env) or '')
end
text = text .. ' ' .. (p.makeSubpagesBlurb(args, env) or '') --"Subpages of this template"
end
end
local box = mw.html.create('div')
-- 'documentation-metadata'
box:attr('role', 'note')
:addClass(message('end-box-class'))
-- 'plainlinks'
:addClass(message('end-box-plainlinks'))
:wikitext(text)
:done()
return '\n' .. tostring(box)
end
function p.makeDocPageBlurb(args, env)
--[=[
-- Makes the blurb "This documentation is transcluded from [[Template:Foo]] (edit, history)".
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
--
-- Messages:
-- 'edit-link-display' --> 'edit'
-- 'history-link-display' --> 'history'
-- 'transcluded-from-blurb' -->
-- 'The above [[Wikipedia:Template documentation|documentation]]
-- is [[Help:Transclusion|transcluded]] from $1.'
-- 'module-preload' --> 'Template:Documentation/preload-module-doc'
-- 'create-link-display' --> 'create'
-- 'create-module-doc-blurb' -->
-- 'You might want to $1 a documentation page for this [[Wikipedia:Lua|Scribunto module]].'
--]=]
local docTitle = env.docTitle
if not docTitle then
return nil
end
local ret
if docTitle.exists then
-- /doc exists; link to it.
local docLink = makeWikilink(docTitle.prefixedText)
local editUrl = docTitle:fullUrl{action = 'edit'}
local editDisplay = message('edit-link-display')
local editLink = makeUrlLink(editUrl, editDisplay)
local historyUrl = docTitle:fullUrl{action = 'history'}
local historyDisplay = message('history-link-display')
local historyLink = makeUrlLink(historyUrl, historyDisplay)
ret = message('transcluded-from-blurb', {docLink})
.. ' '
.. makeToolbar(editLink, historyLink)
.. '<br />'
elseif env.subjectSpace == 828 then
-- /doc does not exist; ask to create it.
local createUrl = docTitle:fullUrl{action = 'edit', preload = message('module-preload')}
local createDisplay = message('create-link-display')
local createLink = makeUrlLink(createUrl, createDisplay)
ret = message('create-module-doc-blurb', {createLink})
.. '<br />'
end
return ret
end
function p.makeExperimentBlurb(args, env)
--[[
-- Renders the text "Editors can experiment in this template's sandbox (edit | diff) and testcases (edit) pages."
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
--
-- Messages:
-- 'sandbox-link-display' --> 'sandbox'
-- 'sandbox-edit-link-display' --> 'edit'
-- 'compare-link-display' --> 'diff'
-- 'module-sandbox-preload' --> 'Template:Documentation/preload-module-sandbox'
-- 'template-sandbox-preload' --> 'Template:Documentation/preload-sandbox'
-- 'sandbox-create-link-display' --> 'create'
-- 'mirror-edit-summary' --> 'Create sandbox version of $1'
-- 'mirror-link-display' --> 'mirror'
-- 'mirror-link-preload' --> 'Template:Documentation/mirror'
-- 'sandbox-link-display' --> 'sandbox'
-- 'testcases-link-display' --> 'testcases'
-- 'testcases-edit-link-display'--> 'edit'
-- 'template-sandbox-preload' --> 'Template:Documentation/preload-sandbox'
-- 'testcases-create-link-display' --> 'create'
-- 'testcases-link-display' --> 'testcases'
-- 'testcases-edit-link-display' --> 'edit'
-- 'module-testcases-preload' --> 'Template:Documentation/preload-module-testcases'
-- 'template-testcases-preload' --> 'Template:Documentation/preload-testcases'
-- 'experiment-blurb-module' --> 'Editors can experiment in this module's $1 and $2 pages.'
-- 'experiment-blurb-template' --> 'Editors can experiment in this template's $1 and $2 pages.'
--]]
local subjectSpace = env.subjectSpace
local templateTitle = env.templateTitle
local sandboxTitle = env.sandboxTitle
local testcasesTitle = env.testcasesTitle
local templatePage = templateTitle.prefixedText
if not subjectSpace or not templateTitle or not sandboxTitle or not testcasesTitle then
return nil
end
-- Make links.
local sandboxLinks, testcasesLinks
if sandboxTitle.exists then
local sandboxPage = sandboxTitle.prefixedText
local sandboxDisplay = message('sandbox-link-display')
local sandboxLink = makeWikilink(sandboxPage, sandboxDisplay)
local sandboxEditUrl = sandboxTitle:fullUrl{action = 'edit'}
local sandboxEditDisplay = message('sandbox-edit-link-display')
local sandboxEditLink = makeUrlLink(sandboxEditUrl, sandboxEditDisplay)
local compareUrl = env.compareUrl
local compareLink
if compareUrl then
local compareDisplay = message('compare-link-display')
compareLink = makeUrlLink(compareUrl, compareDisplay)
end
sandboxLinks = sandboxLink .. ' ' .. makeToolbar(sandboxEditLink, compareLink)
else
local sandboxPreload
if subjectSpace == 828 then
sandboxPreload = message('module-sandbox-preload')
else
sandboxPreload = message('template-sandbox-preload')
end
local sandboxCreateUrl = sandboxTitle:fullUrl{action = 'edit', preload = sandboxPreload}
local sandboxCreateDisplay = message('sandbox-create-link-display')
local sandboxCreateLink = makeUrlLink(sandboxCreateUrl, sandboxCreateDisplay)
local mirrorSummary = message('mirror-edit-summary', {makeWikilink(templatePage)})
local mirrorPreload = message('mirror-link-preload')
local mirrorUrl = sandboxTitle:fullUrl{action = 'edit', preload = mirrorPreload, summary = mirrorSummary}
if subjectSpace == 828 then
mirrorUrl = sandboxTitle:fullUrl{action = 'edit', preload = templateTitle.prefixedText, summary = mirrorSummary}
end
local mirrorDisplay = message('mirror-link-display')
local mirrorLink = makeUrlLink(mirrorUrl, mirrorDisplay)
sandboxLinks = message('sandbox-link-display') .. ' ' .. makeToolbar(sandboxCreateLink, mirrorLink)
end
if testcasesTitle.exists then
local testcasesPage = testcasesTitle.prefixedText
local testcasesDisplay = message('testcases-link-display')
local testcasesLink = makeWikilink(testcasesPage, testcasesDisplay)
local testcasesEditUrl = testcasesTitle:fullUrl{action = 'edit'}
local testcasesEditDisplay = message('testcases-edit-link-display')
local testcasesEditLink = makeUrlLink(testcasesEditUrl, testcasesEditDisplay)
-- for Modules, add testcases run link if exists
if testcasesTitle.contentModel == "Scribunto" and testcasesTitle.talkPageTitle and testcasesTitle.talkPageTitle.exists then
local testcasesRunLinkDisplay = message('testcases-run-link-display')
local testcasesRunLink = makeWikilink(testcasesTitle.talkPageTitle.prefixedText, testcasesRunLinkDisplay)
testcasesLinks = testcasesLink .. ' ' .. makeToolbar(testcasesEditLink, testcasesRunLink)
else
testcasesLinks = testcasesLink .. ' ' .. makeToolbar(testcasesEditLink)
end
else
local testcasesPreload
if subjectSpace == 828 then
testcasesPreload = message('module-testcases-preload')
else
testcasesPreload = message('template-testcases-preload')
end
local testcasesCreateUrl = testcasesTitle:fullUrl{action = 'edit', preload = testcasesPreload}
local testcasesCreateDisplay = message('testcases-create-link-display')
local testcasesCreateLink = makeUrlLink(testcasesCreateUrl, testcasesCreateDisplay)
testcasesLinks = message('testcases-link-display') .. ' ' .. makeToolbar(testcasesCreateLink)
end
local messageName
if subjectSpace == 828 then
messageName = 'experiment-blurb-module'
else
messageName = 'experiment-blurb-template'
end
return message(messageName, {sandboxLinks, testcasesLinks})
end
function p.makeCategoriesBlurb(args, env)
--[[
-- Generates the text "Please add categories to the /doc subpage."
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
-- Messages:
-- 'doc-link-display' --> '/doc'
-- 'add-categories-blurb' --> 'Please add categories to the $1 subpage.'
--]]
local docTitle = env.docTitle
if not docTitle then
return nil
end
local docPathLink = makeWikilink(docTitle.prefixedText, message('doc-link-display'))
return message('add-categories-blurb', {docPathLink})
end
function p.makeSubpagesBlurb(args, env)
--[[
-- Generates the "Subpages of this template" link.
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
-- Messages:
-- 'template-pagetype' --> 'template'
-- 'module-pagetype' --> 'module'
-- 'default-pagetype' --> 'page'
-- 'subpages-link-display' --> 'Subpages of this $1'
--]]
local subjectSpace = env.subjectSpace
local templateTitle = env.templateTitle
if not subjectSpace or not templateTitle then
return nil
end
local pagetype
if subjectSpace == 10 then
pagetype = message('template-pagetype')
elseif subjectSpace == 828 then
pagetype = message('module-pagetype')
else
pagetype = message('default-pagetype')
end
local subpagesLink = makeWikilink(
'Special:PrefixIndex/' .. templateTitle.prefixedText .. '/',
message('subpages-link-display', {pagetype})
)
return message('subpages-blurb', {subpagesLink})
end
----------------------------------------------------------------------------
-- Tracking categories
----------------------------------------------------------------------------
function p.addTrackingCategories(env)
--[[
-- Check if {{documentation}} is transcluded on a /doc or /testcases page.
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
-- Messages:
-- 'display-strange-usage-category' --> true
-- 'doc-subpage' --> 'doc'
-- 'testcases-subpage' --> 'testcases'
-- 'strange-usage-category' --> 'Wikipedia pages with strange ((documentation)) usage'
--
-- /testcases pages in the module namespace are not categorised, as they may have
-- {{documentation}} transcluded automatically.
--]]
local title = env.title
local subjectSpace = env.subjectSpace
if not title or not subjectSpace then
return nil
end
local subpage = title.subpageText
local ret = ''
if message('display-strange-usage-category', nil, 'boolean')
and (
subpage == message('doc-subpage')
or subjectSpace ~= 828 and subpage == message('testcases-subpage')
)
then
ret = ret .. makeCategoryLink(message('strange-usage-category'))
end
return ret
end
return p
78cc3a78f2b5dbb267fa16027c0800a22dbd3c42
Template:Infobox
10
316
636
2022-09-30T14:45:57Z
[[cln>Pppery
0
Copy from Wikipedia
wikitext
text/x-wiki
{{#invoke:Infobox|infobox}}<noinclude>
{{documentation}}
</noinclude>
627ee6fcf4d4f108fe054b5c476201cad0ed7717
Module:Infobox
828
14
638
2022-09-30T14:52:23Z
[[cln>Pppery
0
Scribunto
text/plain
--
-- This module implements {{Infobox}}
--
local p = {}
local args = {}
local origArgs = {}
local root
local function notempty( s ) return s and s:match( '%S' ) end
local function fixChildBoxes(sval, tt)
if notempty(sval) then
local marker = '<span class=special_infobox_marker>'
local s = sval
s = mw.ustring.gsub(s, '(<%s*[Tt][Rr])', marker .. '%1')
s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>)', '%1' .. marker)
if s:match(marker) then
s = mw.ustring.gsub(s, marker .. '%s*' .. marker, '')
s = mw.ustring.gsub(s, '([\r\n]|-[^\r\n]*[\r\n])%s*' .. marker, '%1')
s = mw.ustring.gsub(s, marker .. '%s*([\r\n]|-)', '%1')
s = mw.ustring.gsub(s, '(</[Cc][Aa][Pp][Tt][Ii][Oo][Nn]%s*>%s*)' .. marker, '%1')
s = mw.ustring.gsub(s, '(<%s*[Tt][Aa][Bb][Ll][Ee][^<>]*>%s*)' .. marker, '%1')
s = mw.ustring.gsub(s, '^(%{|[^\r\n]*[\r\n]%s*)' .. marker, '%1')
s = mw.ustring.gsub(s, '([\r\n]%{|[^\r\n]*[\r\n]%s*)' .. marker, '%1')
s = mw.ustring.gsub(s, marker .. '(%s*</[Tt][Aa][Bb][Ll][Ee]%s*>)', '%1')
s = mw.ustring.gsub(s, marker .. '(%s*\n|%})', '%1')
end
if s:match(marker) then
local subcells = mw.text.split(s, marker)
s = ''
for k = 1, #subcells do
if k == 1 then
s = s .. subcells[k] .. '</' .. tt .. '></tr>'
elseif k == #subcells then
local rowstyle = ' style="display:none"'
if notempty(subcells[k]) then rowstyle = '' end
s = s .. '<tr' .. rowstyle ..'><' .. tt .. ' colspan=2>\n' .. subcells[k]
elseif notempty(subcells[k]) then
if (k % 2) == 0 then
s = s .. subcells[k]
else
s = s .. '<tr><' .. tt .. ' colspan=2>\n' .. subcells[k] .. '</' .. tt .. '></tr>'
end
end
end
end
-- the next two lines add a newline at the end of lists for the PHP parser
-- https://en.wikipedia.org/w/index.php?title=Template_talk:Infobox_musical_artist&oldid=849054481
-- remove when [[:phab:T191516]] is fixed or OBE
s = mw.ustring.gsub(s, '([\r\n][%*#;:][^\r\n]*)$', '%1\n')
s = mw.ustring.gsub(s, '^([%*#;:][^\r\n]*)$', '%1\n')
s = mw.ustring.gsub(s, '^([%*#;:])', '\n%1')
s = mw.ustring.gsub(s, '^(%{%|)', '\n%1')
return s
else
return sval
end
end
local function union(t1, t2)
-- Returns the union of the values of two tables, as a sequence.
local vals = {}
for k, v in pairs(t1) do
vals[v] = true
end
for k, v in pairs(t2) do
vals[v] = true
end
local ret = {}
for k, v in pairs(vals) do
table.insert(ret, k)
end
return ret
end
local function getArgNums(prefix)
-- Returns a table containing the numbers of the arguments that exist
-- for the specified prefix. For example, if the prefix was 'data', and
-- 'data1', 'data2', and 'data5' exist, it would return {1, 2, 5}.
local nums = {}
for k, v in pairs(args) do
local num = tostring(k):match('^' .. prefix .. '([1-9]%d*)$')
if num then table.insert(nums, tonumber(num)) end
end
table.sort(nums)
return nums
end
local function addRow(rowArgs)
-- Adds a row to the infobox, with either a header cell
-- or a label/data cell combination.
if rowArgs.header and rowArgs.header ~= '_BLANK_' then
root
:tag('tr')
:addClass(rowArgs.rowclass)
:cssText(rowArgs.rowstyle)
:attr('id', rowArgs.rowid)
:tag('th')
:attr('colspan', 2)
:attr('id', rowArgs.headerid)
:addClass(rowArgs.class)
:addClass(args.headerclass)
:css('text-align', 'center')
:cssText(args.headerstyle)
:cssText(rowArgs.rowcellstyle)
:wikitext(fixChildBoxes(rowArgs.header, 'th'))
elseif rowArgs.data then
if not rowArgs.data:gsub('%[%[%s*[Cc][Aa][Tt][Ee][Gg][Oo][Rr][Yy]%s*:[^]]*]]', ''):match('^%S') then
rowArgs.rowstyle = 'display:none'
end
local row = root:tag('tr')
row:addClass(rowArgs.rowclass)
row:cssText(rowArgs.rowstyle)
row:attr('id', rowArgs.rowid)
if rowArgs.label then
row
:tag('th')
:attr('scope', 'row')
:attr('id', rowArgs.labelid)
:cssText(args.labelstyle)
:cssText(rowArgs.rowcellstyle)
:wikitext(rowArgs.label)
:done()
end
local dataCell = row:tag('td')
if not rowArgs.label then
dataCell
:attr('colspan', 2)
:css('text-align', 'center')
end
dataCell
:attr('id', rowArgs.dataid)
:addClass(rowArgs.class)
:cssText(rowArgs.datastyle)
:cssText(rowArgs.rowcellstyle)
:wikitext(fixChildBoxes(rowArgs.data, 'td'))
end
end
local function renderTitle()
if not args.title then return end
root
:tag('caption')
:addClass(args.titleclass)
:cssText(args.titlestyle)
:wikitext(args.title)
end
local function renderAboveRow()
if not args.above then return end
root
:tag('tr')
:tag('th')
:attr('colspan', 2)
:addClass(args.aboveclass)
:css('text-align', 'center')
:css('font-size', '125%')
:css('font-weight', 'bold')
:cssText(args.abovestyle)
:wikitext(fixChildBoxes(args.above,'th'))
end
local function renderBelowRow()
if not args.below then return end
root
:tag('tr')
:tag('td')
:attr('colspan', '2')
:addClass(args.belowclass)
:css('text-align', 'center')
:cssText(args.belowstyle)
:wikitext(fixChildBoxes(args.below,'td'))
end
local function renderSubheaders()
if args.subheader then
args.subheader1 = args.subheader
end
if args.subheaderrowclass then
args.subheaderrowclass1 = args.subheaderrowclass
end
local subheadernums = getArgNums('subheader')
for k, num in ipairs(subheadernums) do
addRow({
data = args['subheader' .. tostring(num)],
datastyle = args.subheaderstyle,
rowcellstyle = args['subheaderstyle' .. tostring(num)],
class = args.subheaderclass,
rowclass = args['subheaderrowclass' .. tostring(num)]
})
end
end
local function renderImages()
if args.image then
args.image1 = args.image
end
if args.caption then
args.caption1 = args.caption
end
local imagenums = getArgNums('image')
for k, num in ipairs(imagenums) do
local caption = args['caption' .. tostring(num)]
local data = mw.html.create():wikitext(args['image' .. tostring(num)])
if caption then
data
:tag('div')
:cssText(args.captionstyle)
:wikitext(caption)
end
addRow({
data = tostring(data),
datastyle = args.imagestyle,
class = args.imageclass,
rowclass = args['imagerowclass' .. tostring(num)]
})
end
end
local function preprocessRows()
-- Gets the union of the header and data argument numbers,
-- and renders them all in order using addRow.
local rownums = union(getArgNums('header'), getArgNums('data'))
table.sort(rownums)
local lastheader
for k, num in ipairs(rownums) do
if args['header' .. tostring(num)] then
if lastheader then
args['header' .. tostring(lastheader)] = nil
end
lastheader = num
elseif args['data' .. tostring(num)] and args['data' .. tostring(num)]:gsub('%[%[%s*[Cc][Aa][Tt][Ee][Gg][Oo][Rr][Yy]%s*:[^]]*]]', ''):match('^%S') then
local data = args['data' .. tostring(num)]
if data:gsub('%[%[%s*[Cc][Aa][Tt][Ee][Gg][Oo][Rr][Yy]%s*:[^]]*]]', ''):match('%S') then
lastheader = nil
end
end
end
if lastheader then
args['header' .. tostring(lastheader)] = nil
end
end
local function renderRows()
-- Gets the union of the header and data argument numbers,
-- and renders them all in order using addRow.
local rownums = union(getArgNums('header'), getArgNums('data'))
table.sort(rownums)
for k, num in ipairs(rownums) do
addRow({
header = args['header' .. tostring(num)],
label = args['label' .. tostring(num)],
data = args['data' .. tostring(num)],
datastyle = args.datastyle,
class = args['class' .. tostring(num)],
rowclass = args['rowclass' .. tostring(num)],
rowstyle = args['rowstyle' .. tostring(num)],
rowcellstyle = args['rowcellstyle' .. tostring(num)],
dataid = args['dataid' .. tostring(num)],
labelid = args['labelid' .. tostring(num)],
headerid = args['headerid' .. tostring(num)],
rowid = args['rowid' .. tostring(num)]
})
end
end
local function renderItalicTitle()
local italicTitle = args['italic title'] and mw.ustring.lower(args['italic title'])
if italicTitle == '' or italicTitle == 'force' or italicTitle == 'yes' then
root:wikitext(mw.getCurrentFrame():expandTemplate({title = 'italic title'}))
end
end
local function _infobox()
-- Specify the overall layout of the infobox, with special settings
-- if the infobox is used as a 'child' inside another infobox.
if args.child ~= 'yes' then
root = mw.html.create('table')
root
:addClass((args.subbox ~= 'yes') and 'infobox' or nil)
:addClass(args.bodyclass)
if args.subbox == 'yes' then
root
:css('padding', '0')
:css('border', 'none')
:css('margin', '-3px')
:css('width', 'auto')
:css('min-width', '100%')
:css('font-size', '100%')
:css('clear', 'none')
:css('float', 'none')
:css('background-color', 'transparent')
else
root
:css('width', '22em')
end
root
:cssText(args.bodystyle)
renderTitle()
renderAboveRow()
else
root = mw.html.create()
root
:wikitext(args.title)
end
renderSubheaders()
renderImages()
if args.autoheaders then
preprocessRows()
end
renderRows()
renderBelowRow()
renderItalicTitle()
return tostring(root)
end
local function preprocessSingleArg(argName)
-- If the argument exists and isn't blank, add it to the argument table.
-- Blank arguments are treated as nil to match the behaviour of ParserFunctions.
if origArgs[argName] and origArgs[argName] ~= '' then
args[argName] = origArgs[argName]
end
end
local function preprocessArgs(prefixTable, step)
-- Assign the parameters with the given prefixes to the args table, in order, in batches
-- of the step size specified. This is to prevent references etc. from appearing in the
-- wrong order. The prefixTable should be an array containing tables, each of which has
-- two possible fields, a "prefix" string and a "depend" table. The function always parses
-- parameters containing the "prefix" string, but only parses parameters in the "depend"
-- table if the prefix parameter is present and non-blank.
if type(prefixTable) ~= 'table' then
error("Non-table value detected for the prefix table", 2)
end
if type(step) ~= 'number' then
error("Invalid step value detected", 2)
end
-- Get arguments without a number suffix, and check for bad input.
for i,v in ipairs(prefixTable) do
if type(v) ~= 'table' or type(v.prefix) ~= "string" or (v.depend and type(v.depend) ~= 'table') then
error('Invalid input detected to preprocessArgs prefix table', 2)
end
preprocessSingleArg(v.prefix)
-- Only parse the depend parameter if the prefix parameter is present and not blank.
if args[v.prefix] and v.depend then
for j, dependValue in ipairs(v.depend) do
if type(dependValue) ~= 'string' then
error('Invalid "depend" parameter value detected in preprocessArgs')
end
preprocessSingleArg(dependValue)
end
end
end
-- Get arguments with number suffixes.
local a = 1 -- Counter variable.
local moreArgumentsExist = true
while moreArgumentsExist == true do
moreArgumentsExist = false
for i = a, a + step - 1 do
for j,v in ipairs(prefixTable) do
local prefixArgName = v.prefix .. tostring(i)
if origArgs[prefixArgName] then
moreArgumentsExist = true -- Do another loop if any arguments are found, even blank ones.
preprocessSingleArg(prefixArgName)
end
-- Process the depend table if the prefix argument is present and not blank, or
-- we are processing "prefix1" and "prefix" is present and not blank, and
-- if the depend table is present.
if v.depend and (args[prefixArgName] or (i == 1 and args[v.prefix])) then
for j,dependValue in ipairs(v.depend) do
local dependArgName = dependValue .. tostring(i)
preprocessSingleArg(dependArgName)
end
end
end
end
a = a + step
end
end
local function parseDataParameters()
-- Parse the data parameters in the same order that the old {{infobox}} did, so that
-- references etc. will display in the expected places. Parameters that depend on
-- another parameter are only processed if that parameter is present, to avoid
-- phantom references appearing in article reference lists.
preprocessSingleArg('autoheaders')
preprocessSingleArg('child')
preprocessSingleArg('bodyclass')
preprocessSingleArg('subbox')
preprocessSingleArg('bodystyle')
preprocessSingleArg('title')
preprocessSingleArg('titleclass')
preprocessSingleArg('titlestyle')
preprocessSingleArg('above')
preprocessSingleArg('aboveclass')
preprocessSingleArg('abovestyle')
preprocessArgs({
{prefix = 'subheader', depend = {'subheaderstyle', 'subheaderrowclass'}}
}, 10)
preprocessSingleArg('subheaderstyle')
preprocessSingleArg('subheaderclass')
preprocessArgs({
{prefix = 'image', depend = {'caption', 'imagerowclass'}}
}, 10)
preprocessSingleArg('captionstyle')
preprocessSingleArg('imagestyle')
preprocessSingleArg('imageclass')
preprocessArgs({
{prefix = 'header'},
{prefix = 'data', depend = {'label'}},
{prefix = 'rowclass'},
{prefix = 'rowstyle'},
{prefix = 'rowcellstyle'},
{prefix = 'class'},
{prefix = 'dataid'},
{prefix = 'labelid'},
{prefix = 'headerid'},
{prefix = 'rowid'}
}, 50)
preprocessSingleArg('headerclass')
preprocessSingleArg('headerstyle')
preprocessSingleArg('labelstyle')
preprocessSingleArg('datastyle')
preprocessSingleArg('below')
preprocessSingleArg('belowclass')
preprocessSingleArg('belowstyle')
preprocessSingleArg('name')
args['italic title'] = origArgs['italic title'] -- different behaviour if blank or absent
preprocessSingleArg('decat')
end
function p.infobox(frame)
-- If called via #invoke, use the args passed into the invoking template.
-- Otherwise, for testing purposes, assume args are being passed directly in.
if frame == mw.getCurrentFrame() then
origArgs = frame:getParent().args
else
origArgs = frame
end
parseDataParameters()
return _infobox()
end
function p.infoboxTemplate(frame)
-- For calling via #invoke within a template
origArgs = {}
for k,v in pairs(frame.args) do origArgs[k] = mw.text.trim(v) end
parseDataParameters()
return _infobox()
end
return p
c6ac51f9e2faf9c2f3aba1fb8c05af98db47f4d4
Template:Infobox/doc
10
79
658
2022-09-30T19:09:06Z
[[cln>Pppery
0
wikitext
text/x-wiki
{{Documentation subpage}}
This template is intended as a meta template: a template used for constructing other templates. '''Note''': In general, it is not meant for use directly in an article, but can be used on a one-off basis if required. [[w:Help:Infobox]] contains an introduction about the recommended content and design of infoboxes.
== Usage ==
Usage is similar to {{tl|navbox}}, but with an additional distinction. Each row on the table can contain either a header, or a label/data pair, or just a data cell. These are mutually exclusive states so if you define a row with both a header and a label/data pair, the label/data pair is ignored.
To insert an image somewhere other than at the top of the infobox, or to insert freeform data, use a row with only a data field.
== Optional control parameters ==
; name : If this parameter is present, "view/talk/edit" links will be added to the bottom of the infobox, pointing to the named page. You may use the value <nowiki>{{subst:PAGENAME}}</nowiki>; however this is rarely what you want, because it will send users clicking these links in an infobox in an article to the template code rather than the data in the infobox that they probably want to change.
; child : See the [[#Embedding|Embedding]] section for details. If this is set to "yes", this child infobox should be titled but have no name parameter. This parameter is empty by default, set it to "yes" to activate it.
; subbox : See the [[#Subboxes|Subboxes]] section for details. If this is set to "yes", this subbox should be titled but have no name parameter. This parameter is empty by default, set to "yes" to activate it. It has no effect if the '''child''' parameter is also set to "yes".
; decat : If this is set to "yes", the current page will not be autocategorized in a maintenance category when the generated infobox has some problems or no visible data section. Leave empty by default or set to "yes" to activate it.
== Content parameters ==
=== Title ===
There are two different ways to put a title on an infobox. One contains the title inside the infobox's border in the uppermost cell of the table, the other puts as a caption it on top of the table. You can use both of them together if you like, or just one or the other, or even neither (though this is not recommended):
; title : Text to put in the caption over the top of the table (or as section header before the whole content of this table, if this is a child infobox). For accessibility reasons, this is the most recommended alternative.
; above : Text to put within the uppermost cell of the table.
; subheader(n) : additional title fields which fit below {{{title}}} and {{{above}}}, but before images.
Examples:
{{Infobox
| name = Infobox/doc
| title = Text in caption over infobox
| subheader = Subheader of the infobox
| header = (the rest of the infobox goes here)
}}
<pre style="overflow:auto">
{{Infobox
| name = {{subst:PAGENAME}}
| title = Text in caption over infobox
| subheader = Subheader of the infobox
| header = (the rest of the infobox goes here)
}}
</pre>{{clear}}
{{Infobox
| name = Infobox/doc
| above = Text in uppermost cell of infobox
| subheader = Subheader of the infobox
| subheader2 = Second subheader of the infobox
| header = (the rest of the infobox goes here)
}}
<pre style="overflow:auto">
{{Infobox
| name = {{subst:PAGENAME}}
| above = Text in uppermost cell of infobox
| subheader = Subheader of the infobox
| subheader2 = Second subheader of the infobox
| header = (the rest of the infobox goes here)
}}
</pre>{{clear}}
=== Illustration images ===
; image(n) : images to display at the top of the template. Use full image syntax, for example <nowiki>[[File:example.png|200px|alt=Example alt text]]</nowiki>. Image is centered by default.
; caption(n) : Text to put underneath the images.
=== Main data ===
; header(n) : Text to use as a header in row n.
; label(n) : Text to use as a label in row n.
; data(n) : Text to display as data in row n.
Note: for any given value for (n), not all combinations of parameters are permitted. The presence of a header''(n)'' parameter will cause the corresponding data''(n)'' (and rowclass''(n)'' label''(n)'', see below) parameters to be ignored; the absence of a data''(n)'' parameters will cause the corresponding label''(n)'' parameters to be ignored. Valid combinations for any single row are:
* |class''(n)''= |header''(n)''=
* |rowclass''(n)'= |class''(n)''= |data''(n)''=
* |rowclass''(n)''= |label''(n)''= |class''(n)''= data''(n)''=
See the rendering of header4, label4, and data4 in the [[#Examples|Examples]] section below.
==== Number ranges ====
To allow flexibility when the layout of an infobox is changed, it may be helpful when developing an infobox to use non-contiguous numbers for header and label/data rows. Parameters for new rows can then be inserted in future without having to renumber existing parameters. For example:
<pre style="overflow:auto">
| header3 = Section 1
| label5 = Label A
| data5 = Data A
| label7 = Label C
| data7 = Data C
| header10 = Section 2
| label12 = Label D
| data12 = Data D
</pre>{{clear}}
==== Making data fields optional ====
A row with a label but no data is not displayed. This allows for the easy creation of optional infobox content rows. To make a row optional use a parameter that defaults to an empty string, like so:
<pre style="overflow:auto">
| label5 = Population
| data5 = {{{population|}}}
</pre>{{clear}}
This way if an article doesn't define the population parameter in its infobox the row won't be displayed.
For more complex fields with pre-formatted contents that would still be present even if the parameter wasn't set, you can wrap it all in an "#if" statement to make the whole thing vanish when the parameter is not used. For instance, the "#if" statement in the following example reads "#if:the parameter ''mass'' has been supplied |then display it, followed by 'kg'":
<pre style="overflow:auto">
| label6 = Mass
| data6 = {{ #if: {{{mass|}}} | {{{mass}}} kg }}
</pre>{{clear}}
For more on #if, see [[mw:Help:Extension:ParserFunctions##if|here]].
==== Hiding headers when all data fields are hidden ====
You can also make headers optional in a similar way. Consider this example:
{{Infobox
| title = Example of an undesirable header
| header1 = Undesirable header
| label2 = Item 1 | data2 =
| label3 = Item 2 | data3 =
| label4 = Item 3 | data4 =
| header5 = Static header
| label6 = Static item | data6 = Static value
}}
<pre style="overflow:auto">
{{Infobox
| title = Example of an undesirable header
| header1 = Undesirable header
| label2 = Item 1 | data2 =
| label3 = Item 2 | data3 =
| label4 = Item 3 | data4 =
| header5 = Static header
| label6 = Static item | data6 = Static value
}}
</pre>{{clear}}
If you want the first header to appear only if one or more of the data fields that fall under it are filled, one could use the following pattern as an example of how to do it:
{{Infobox
| title = Example of an optional header
| header1 = {{ #if: {{{item1|}}}{{{item2|}}}{{{item3|}}} | Optional header }}
| label2 = Item 1 | data2 = {{{item1|}}}
| label3 = Item 2 | data3 = {{{item2|}}}
| label4 = Item 3 | data4 = {{{item3|}}}
| header5 = Static header
| label6 = Static item | data6 = Static value
}}
<pre style="overflow:auto">
{{Infobox
| title = Example of an optional header
| header1 = {{ #if: {{{item1|}}}{{{item2|}}}{{{item3|}}} | Optional header }}
| label2 = Item 1 | data2 = {{{item1|}}}
| label3 = Item 2 | data3 = {{{item2|}}}
| label4 = Item 3 | data4 = {{{item3|}}}
| header5 = Static header
| label6 = Static item | data6 = Static value
}}
</pre>{{clear}}
header1 will be shown if any of item1, item2, or item3 is defined. If none of the three parameters are defined the header won't be shown and no empty row appears before the next static content. The trick to this is that the "#if" returns false only if there is nothing whatsoever in the conditional section, so only if all three of item1, item2 and item3 are undefined will the if statement fail.
Note that such trick may be sometimes very complex to test if there are many data items whose value depends on complex tests (or when a data row is generated by a recursive invocation of this template as a [[#Subboxes|subbox]]). Ideally, the Lua module supporting this template should now support a new way to make each header row autohideable by detecting if there is at least one non-empty data row after that header row (a parameter like "autohide header1 = yes", for example, would remove the need to perform the "#if" test so that we can just to define "header1 = Optional header"),
=== Footer ===
; below : Text to put in the bottom cell. The bottom cell is intended for footnotes, see-also, and other such information.
== Presentation parameters ==
=== Italic titles ===
Titles of articles with infoboxes may be made italic by passing the <code>italic title</code> parameter.
* Turn on italic titles by passing |italic title=<nowiki>{{{italic title|}}}</nowiki> from the infobox.
* Turn off by default (notably because only Latin script may be safely rendered in this style and italic may be needed to distinguish foreign language from local English language only in that script, but would be difficult to read for other scripts) but allow some instances to be made italic by passing |italic title=<nowiki>{{{italic title|no}}}</nowiki>
* Do not make any titles italic by not passing the parameter at all.
=== CSS styling ===
; bodystyle : Applies to the infobox table as a whole
; titlestyle : Applies only to the title caption. Adding a background color is usually inadvisable since the text is rendered "outside" the infobox.
; abovestyle : Applies only to the "above" cell at the top. The default style has font-size:125%; since this cell is usually used for a title, if you want to use the above cell for regular-sized text include "font-size:100%;" in the abovestyle.
; imagestyle : Applies to the cell the image is in. This includes the text of the image caption, but you should set text properties with captionstyle instead of imagestyle in case the caption is moved out of this cell in the future.
; captionstyle : Applies to the text of the image caption.
; rowstyle(n) : This parameter is inserted into the <code>style</code> attribute for the specified row.
; headerstyle : Applies to all header cells
; labelstyle : Applies to all label cells
; datastyle : Applies to all data cells
; belowstyle : Applies only to the below cell
=== HTML classes and microformats ===
; bodyclass : This parameter is inserted into the <code>class</code> attribute for the infobox as a whole.
; titleclass : This parameter is inserted into the <code>class</code> attribute for the infobox's '''title''' caption.
<!-- currently not implemented in Lua module
; aboverowclass : This parameter is inserted into the <code>class</code> attribute for the complete table row the '''above''' cell is on.
-->
; aboveclass : This parameter is inserted into the <code>class</code> attribute for the infobox's '''above''' cell.
; subheaderrowclass(n) : This parameter is inserted into the <code>class</code> attribute for the complete table row the '''subheader''' is on.
; subheaderclass(n) : This parameter is inserted into the <code>class</code> attribute for the infobox's '''subheader'''.
; imagerowclass(n) : These parameters are inserted into the <code>class</code> attribute for the complete table row their respective '''image''' is on.
; imageclass : This parameter is inserted into the <code>class</code> attribute for the '''image'''.
; rowclass(n) : This parameter is inserted into the <code>class</code> attribute for the specified row including the '''label''' and '''data''' cells.
; class(n) : This parameter is inserted into the <code>class</code> attribute for the '''data''' cell of the specified row. If there's no '''data''' cell it has no effect.
<!-- currently not implemented in Lua module
; belowrowclass : This parameter is inserted into the <code>class</code> attribute for the complete table row the '''below''' cell is on.
-->
; belowclass : This parameter is inserted into the <code>class</code> attribute for the infobox's '''below''' cell.
This template supports the addition of microformat information. This is done by adding "class" attributes to various data cells, indicating what kind of information is contained within. Multiple class names may be specified, separated by spaces, some of them being used as selectors for custom styling according to a project policy or to the skin selected in user preferences, others beig used for microformats.
To flag an infobox as containing [[w:hCard|hCard]] information, for example, add the following parameter:
<pre style="overflow:auto">
| bodyclass = vcard
</pre>{{clear}}
And for each row containing a data cell that's part of the vcard, add a corresponding class parameter:
<pre style="overflow:auto">
| class1 = fn
| class2 = org
| class3 = tel
</pre>{{clear}}
...and so forth. "above" and "title" can also be given classes, since these are usually used to display the name of the subject of the infobox.
See [[w:microformat]] for more information on microformats in general.
== Examples ==
Notice how the row doesn't appear in the displayed infobox when a '''label''' is defined without an accompanying '''data''' cell, and how all of them are displayed when a '''header''' is defined on the same row as a '''data''' cell. Also notice that '''subheaders''' are not bold by default like the '''headers''' used to split the main data section, because this role is meant to be for the '''above''' cell :
{{Infobox
|name = Infobox/doc
|bodystyle =
|titlestyle =
|abovestyle = background:#cfc;
|subheaderstyle =
|title = Test Infobox
|above = Above text
|subheader = Subheader above image
|subheader2 = Second subheader
|imagestyle =
|captionstyle =
|image = [[File:Example-serious.jpg|200px|alt=Example alt text]]
|caption = Caption displayed below File:Example-serious.jpg
|headerstyle = background:#ccf;
|labelstyle = background:#ddf;
|datastyle =
|header1 = Header defined alone
| label1 =
| data1 =
|header2 =
| label2 = Label defined alone does not display (needs data, or is suppressed)
| data2 =
|header3 =
| label3 =
| data3 = Data defined alone
|header4 = All three defined (header, label, data, all with same number)
| label4 = does not display (same number as a header)
| data4 = does not display (same number as a header)
|header5 =
| label5 = Label and data defined (label)
| data5 = Label and data defined (data)
|belowstyle = background:#ddf;
|below = Below text
}}
<pre style="overflow:auto">
{{Infobox
|name = {{subst:PAGENAME}}
|bodystyle =
|titlestyle =
|abovestyle = background:#cfc;
|subheaderstyle =
|title = Test Infobox
|above = Above text
|subheader = Subheader above image
|subheader2 = Second subheader
|imagestyle =
|captionstyle =
| image = [[File:Example-serious.jpg|200px|alt=Example alt text]]
|caption = Caption displayed below Example-serious.jpg
|headerstyle = background:#ccf;
|labelstyle = background:#ddf;
|datastyle =
|header1 = Header defined alone
| label1 =
| data1 =
|header2 =
| label2 = Label defined alone does not display (needs data, or is suppressed)
| data2 =
|header3 =
| label3 =
| data3 = Data defined alone
|header4 = All three defined (header, label, data, all with same number)
| label4 = does not display (same number as a header)
| data4 = does not display (same number as a header)
|header5 =
| label5 = Label and data defined (label)
| data5 = Label and data defined (data)
|belowstyle = background:#ddf;
|below = Below text
}}
</pre>{{clear}}
For this example, the '''bodystyle''' and '''labelstyle''' parameters are used to adjust the infobox width and define a default width for the column of labels:
{{Infobox
|name = Infobox/doc
|bodystyle = width:20em
|titlestyle =
|title = Test Infobox
|headerstyle =
|labelstyle = width:33%
|datastyle =
|header1 =
| label1 = Label 1
| data1 = Data 1
|header2 =
| label2 = Label 2
| data2 = Data 2
|header3 =
| label3 = Label 3
| data3 = Data 3
|header4 = Header 4
| label4 =
| data4 =
|header5 =
| label5 = Label 5
| data5 = Data 5: Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
|belowstyle =
|below = Below text
}}
<pre style="overflow: auto">
{{Infobox
|name = {{subst:PAGENAME}}
|bodystyle = width:20em
|titlestyle =
|title = Test Infobox
|headerstyle =
|labelstyle = width:33%
|datastyle =
|header1 =
| label1 = Label 1
| data1 = Data 1
|header2 =
| label2 = Label 2
| data2 = Data 2
|header3 =
| label3 = Label 3
| data3 = Data 3
|header4 = Header 4
| label4 =
| data4 =
|header5 =
| label5 = Label 5
| data5 = Data 5: Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
|belowstyle =
|below = Below text
}}
</pre>{{clear}}
== Embedding ==
One infobox template can be embedded into another using the |child= parameter or the |embed= parameter. This feature can be used to create a modular infobox, or to create better-defined logical sections. Long ago, it was necessary to use embedding in order to create infoboxes with more than 99 rows; but nowadays there's no limit to the number of rows that can be defined in a single instance of <code><nowiki>{{infobox}}</nowiki></code>.
{{Infobox
| title = Top level title
| data1 = {{Infobox | decat = yes | child = yes
| title = First subsection
| label1= Label 1.1
| data1 = Data 1.1
}}
| data2 = {{Infobox | decat = yes | child = yes
|title = Second subsection
| label1= Label 2.1
| data1 = Data 2.1
}}
| belowstyle =
| below = Below text
}}
<pre style="overflow:auto">
{{Infobox
| title = Top level title
| data1 = {{Infobox | decat = yes | child = yes
| title = First subsection
| label1= Label 1.1
| data1 = Data 1.1
}}
| data2 = {{Infobox | decat = yes | child = yes
|title = Second subsection
| label1= Label 2.1
| data1 = Data 2.1
}}
| belowstyle =
| below = Below text
}}
</pre>{{clear}}
Note, in the examples above, the child infobox is placed in a <code>data</code> field, not a <code>header</code> field. Notice that the section subheadings are not in bold font if bolding is not explicitly specified. To obtain bold section headings, place the child infobox in a '''header''' field (but not in a '''label''' field because it would not be displayed!), either using
{{Infobox
| title = Top level title
| header1 = {{Infobox | decat = yes | child = yes
| title = First subsection
| label1= Label 1.1
| data1 = Data 1.1
}}
| header2 = {{Infobox | decat = yes | child = yes
| title = Second subsection
| label1= Label 2.1
| data1 = Data 2.1
}}
| belowstyle =
| below = Below text
}}
<pre style="overflow:auto">
{{Infobox
| title = Top level title
| header1 = {{Infobox | decat = yes | child = yes
| title = First subsection
| label1= Label 1.1
| data1 = Data 1.1
}}
| header2 = {{Infobox | decat = yes | child = yes
| title = Second subsection
| label1= Label 2.1
| data1 = Data 2.1
}}
| belowstyle =
| below = Below text
}}
</pre>{{clear}}
or,
{{Infobox
| title = Top level title
| header1 = First subsection
{{Infobox | decat = yes | child = yes
| label1 = Label 1.1
| data1 = Data 1.1
}}
| header2 = Second subsection
{{Infobox | decat = yes | child = yes
| label1 = Label 2.1
| data1 = Data 2.1
}}
| belowstyle =
| below = Below text
}}
<pre style="overflow:auto">
{{Infobox
| title = Top level title
| header1 = First subsection
{{Infobox | decat = yes | child = yes
| label1 = Label 1.1
| data1 = Data 1.1
}}
| header2 = Second subsection
{{Infobox | decat = yes | child = yes
| label1 = Label 2.1
| data1 = Data 2.1
}}
| belowstyle =
| below = Below text
}}
</pre>{{clear}}
Note that omitting the |title= parameter, and not including any text preceding the embedded infobox, may result in spurious blank table rows, creating gaps in the visual presentation.
== Subboxes ==
An alternative method for embedding is to use |subbox=yes, which removes the outer border from the infobox, but preserves the interior structure. One feature of this approach is that the parent and child boxes need not have the same structure, and the label and data fields are not aligned between the parent and child boxes because they are not in the same parent table.
{{Infobox
| headerstyle = background-color:#eee;
| labelstyle = background-color:#eee;
| header1 = Main 1
| header2 = Main 2
| data3 = {{Infobox | subbox = yes
| headerstyle = background-color:#ccc;
| labelstyle = background-color:#ddd;
| header1 = Sub 3-1
| header2 = Sub 3-2
| label3 = Label 3-3 | data3 = Data 3-3
}}
| data4 = {{Infobox | subbox = yes
| labelstyle = background-color:#ccc;
| label1 = Label 4-1 | data1 = Data 4-1
}}
| label5 = Label 5 | data5 = Data 5
| header6 = Main 6
}}
<source lang="sass" style="overflow:auto">
{{Infobox
| headerstyle = background-color:#eee;
| labelstyle = background-color:#eee;
| header1 = Main 1
| header2 = Main 2
| data3 = {{Infobox | subbox = yes
| headerstyle = background-color:#ccc;
| labelstyle = background-color:#ddd;
| header1 = Sub 3-1
| header2 = Sub 3-2
| label3 = Label 3-3 | data3 = Data 3-3
}}
| data4 = {{Infobox | subbox = yes
| labelstyle = background-color:#ccc;
| label1 = Label 4-1 | data1 = Data 4-1
}}
| label5 = Label 5 | data5 = Data 5
| header6 = Main 6
}}
</source>{{clear}}
Note that the default padding of the parent data cell containing each subbox is still visible, so the subboxes are slightly narrower than the parent box and there's a higher vertical spacing between standard cells of the parent box than between cells of distinct subboxes.
== Full blank syntax ==
(Note: there is no limit to the number of possible rows; only 20 are given below since infoboxes larger than that will be relatively rare. Just extend the numbering as needed. The microformat "class" parameters are also omitted as they are not commonly used.)
<pre style="overflow:auto">
{{Infobox
| name = {{subst:PAGENAME}}
| child = {{{child|}}}
| subbox = {{{subbox|}}}
| italic title = {{{italic title|no}}}
| bodystyle =
| titlestyle =
| abovestyle =
| subheaderstyle =
| title =
| above =
| subheader =
| imagestyle =
| captionstyle =
| image =
| caption =
| image2 =
| caption2 =
| headerstyle =
| labelstyle =
| datastyle =
| header1 =
| label1 =
| data1 =
| header2 =
| label2 =
| data2 =
| header3 =
| label3 =
| data3 =
| header4 =
| label4 =
| data4 =
| header5 =
| label5 =
| data5 =
| header6 =
| label6 =
| data6 =
| header7 =
| label7 =
| data7 =
| header8 =
| label8 =
| data8 =
| header9 =
| label9 =
| data9 =
| header10 =
| label10 =
| data10 =
| header11 =
| label11 =
| data11 =
| header12 =
| label12 =
| data12 =
| header13 =
| label13 =
| data13 =
| header14 =
| label14 =
| data14 =
| header15 =
| label15 =
| data15 =
| header16 =
| label16 =
| data16 =
| header17 =
| label17 =
| data17 =
| header18 =
| label18 =
| data18 =
| header19 =
| label19 =
| data19 =
| header20 =
| label20 =
| data20 =
| belowstyle =
| below =
}}
</pre>{{clear}}
==See also==
* [[Module:Infobox]], the [[mw:Lua/Overview|Lua]] module on which this template is based
* [[w:Wikipedia:List of infoboxes|List of infoboxes]]
38686ab37d436b2158042649ea6e552897fbcfa5
Module:Documentation/config
828
60
648
124
2022-10-01T17:37:53Z
[[cln>Pppery
0
Pppery moved page [[Module:Documentation/config/2]] to [[Module:Documentation/config]] without leaving a redirect
Scribunto
text/plain
----------------------------------------------------------------------------------------------------
--
-- Configuration for Module:Documentation
--
-- Here you can set the values of the parameters and messages used in Module:Documentation to
-- localise it to your wiki and your language. Unless specified otherwise, values given here
-- should be string values.
----------------------------------------------------------------------------------------------------
local cfg = {} -- Do not edit this line.
----------------------------------------------------------------------------------------------------
-- Start box configuration
----------------------------------------------------------------------------------------------------
-- cfg['documentation-icon-wikitext']
-- The wikitext for the icon shown at the top of the template.
cfg['documentation-icon-wikitext'] = '[[File:Test Template Info-Icon - Version (2).svg|50px|link=|alt=]]'
-- cfg['template-namespace-heading']
-- The heading shown in the template namespace.
cfg['template-namespace-heading'] = 'Template documentation'
-- cfg['module-namespace-heading']
-- The heading shown in the module namespace.
cfg['module-namespace-heading'] = 'Module documentation'
-- cfg['file-namespace-heading']
-- The heading shown in the file namespace.
cfg['file-namespace-heading'] = 'Summary'
-- cfg['other-namespaces-heading']
-- The heading shown in other namespaces.
cfg['other-namespaces-heading'] = 'Documentation'
-- cfg['view-link-display']
-- The text to display for "view" links.
cfg['view-link-display'] = 'view'
-- cfg['edit-link-display']
-- The text to display for "edit" links.
cfg['edit-link-display'] = 'edit'
-- cfg['history-link-display']
-- The text to display for "history" links.
cfg['history-link-display'] = 'history'
-- cfg['purge-link-display']
-- The text to display for "purge" links.
cfg['purge-link-display'] = 'purge'
-- cfg['create-link-display']
-- The text to display for "create" links.
cfg['create-link-display'] = 'create'
----------------------------------------------------------------------------------------------------
-- Link box (end box) configuration
----------------------------------------------------------------------------------------------------
-- cfg['transcluded-from-blurb']
-- Notice displayed when the docs are transcluded from another page. $1 is a wikilink to that page.
cfg['transcluded-from-blurb'] = 'The above [[w:Wikipedia:Template documentation|documentation]] is [[mw:Help:Transclusion|transcluded]] from $1.'
--[[
-- cfg['create-module-doc-blurb']
-- Notice displayed in the module namespace when the documentation subpage does not exist.
-- $1 is a link to create the documentation page with the preload cfg['module-preload'] and the
-- display cfg['create-link-display'].
--]]
cfg['create-module-doc-blurb'] = 'You might want to $1 a documentation page for this [[mw:Extension:Scribunto/Lua reference manual|Scribunto module]].'
----------------------------------------------------------------------------------------------------
-- Experiment blurb configuration
----------------------------------------------------------------------------------------------------
--[[
-- cfg['experiment-blurb-template']
-- cfg['experiment-blurb-module']
-- The experiment blurb is the text inviting editors to experiment in sandbox and test cases pages.
-- It is only shown in the template and module namespaces. With the default English settings, it
-- might look like this:
--
-- Editors can experiment in this template's sandbox (edit | diff) and testcases (edit) pages.
--
-- In this example, "sandbox", "edit", "diff", "testcases", and "edit" would all be links.
--
-- There are two versions, cfg['experiment-blurb-template'] and cfg['experiment-blurb-module'], depending
-- on what namespace we are in.
--
-- Parameters:
--
-- $1 is a link to the sandbox page. If the sandbox exists, it is in the following format:
--
-- cfg['sandbox-link-display'] (cfg['sandbox-edit-link-display'] | cfg['compare-link-display'])
--
-- If the sandbox doesn't exist, it is in the format:
--
-- cfg['sandbox-link-display'] (cfg['sandbox-create-link-display'] | cfg['mirror-link-display'])
--
-- The link for cfg['sandbox-create-link-display'] link preloads the page with cfg['template-sandbox-preload']
-- or cfg['module-sandbox-preload'], depending on the current namespace. The link for cfg['mirror-link-display']
-- loads a default edit summary of cfg['mirror-edit-summary'].
--
-- $2 is a link to the test cases page. If the test cases page exists, it is in the following format:
--
-- cfg['testcases-link-display'] (cfg['testcases-edit-link-display'] | cfg['testcases-run-link-display'])
--
-- If the test cases page doesn't exist, it is in the format:
--
-- cfg['testcases-link-display'] (cfg['testcases-create-link-display'])
--
-- If the test cases page doesn't exist, the link for cfg['testcases-create-link-display'] preloads the
-- page with cfg['template-testcases-preload'] or cfg['module-testcases-preload'], depending on the current
-- namespace.
--]]
cfg['experiment-blurb-template'] = "Editors can experiment in this template's $1 and $2 pages."
cfg['experiment-blurb-module'] = "Editors can experiment in this module's $1 and $2 pages."
----------------------------------------------------------------------------------------------------
-- Sandbox link configuration
----------------------------------------------------------------------------------------------------
-- cfg['sandbox-subpage']
-- The name of the template subpage typically used for sandboxes.
cfg['sandbox-subpage'] = 'sandbox'
-- cfg['template-sandbox-preload']
-- Preload file for template sandbox pages.
cfg['template-sandbox-preload'] = 'Template:Documentation/preload-sandbox'
-- cfg['module-sandbox-preload']
-- Preload file for Lua module sandbox pages.
cfg['module-sandbox-preload'] = 'Template:Documentation/preload-module-sandbox'
-- cfg['sandbox-link-display']
-- The text to display for "sandbox" links.
cfg['sandbox-link-display'] = 'sandbox'
-- cfg['sandbox-edit-link-display']
-- The text to display for sandbox "edit" links.
cfg['sandbox-edit-link-display'] = 'edit'
-- cfg['sandbox-create-link-display']
-- The text to display for sandbox "create" links.
cfg['sandbox-create-link-display'] = 'create'
-- cfg['compare-link-display']
-- The text to display for "compare" links.
cfg['compare-link-display'] = 'diff'
-- cfg['mirror-edit-summary']
-- The default edit summary to use when a user clicks the "mirror" link. $1 is a wikilink to the
-- template page.
cfg['mirror-edit-summary'] = 'Create sandbox version of $1'
-- cfg['mirror-link-display']
-- The text to display for "mirror" links.
cfg['mirror-link-display'] = 'mirror'
-- cfg['mirror-link-preload']
-- The page to preload when a user clicks the "mirror" link.
cfg['mirror-link-preload'] = 'Template:Documentation/mirror'
----------------------------------------------------------------------------------------------------
-- Test cases link configuration
----------------------------------------------------------------------------------------------------
-- cfg['testcases-subpage']
-- The name of the template subpage typically used for test cases.
cfg['testcases-subpage'] = 'testcases'
-- cfg['template-testcases-preload']
-- Preload file for template test cases pages.
cfg['template-testcases-preload'] = 'Template:Documentation/preload-testcases'
-- cfg['module-testcases-preload']
-- Preload file for Lua module test cases pages.
cfg['module-testcases-preload'] = 'Template:Documentation/preload-module-testcases'
-- cfg['testcases-link-display']
-- The text to display for "testcases" links.
cfg['testcases-link-display'] = 'testcases'
-- cfg['testcases-edit-link-display']
-- The text to display for test cases "edit" links.
cfg['testcases-edit-link-display'] = 'edit'
-- cfg['testcases-run-link-display']
-- The text to display for test cases "run" links.
cfg['testcases-run-link-display'] = 'run'
-- cfg['testcases-create-link-display']
-- The text to display for test cases "create" links.
cfg['testcases-create-link-display'] = 'create'
----------------------------------------------------------------------------------------------------
-- Add categories blurb configuration
----------------------------------------------------------------------------------------------------
--[[
-- cfg['add-categories-blurb']
-- Text to direct users to add categories to the /doc subpage. Not used if the "content" or
-- "docname fed" arguments are set, as then it is not clear where to add the categories. $1 is a
-- link to the /doc subpage with a display value of cfg['doc-link-display'].
--]]
cfg['add-categories-blurb'] = 'Add categories to the $1 subpage.'
-- cfg['doc-link-display']
-- The text to display when linking to the /doc subpage.
cfg['doc-link-display'] = '/doc'
----------------------------------------------------------------------------------------------------
-- Subpages link configuration
----------------------------------------------------------------------------------------------------
--[[
-- cfg['subpages-blurb']
-- The "Subpages of this template" blurb. $1 is a link to the main template's subpages with a
-- display value of cfg['subpages-link-display']. In the English version this blurb is simply
-- the link followed by a period, and the link display provides the actual text.
--]]
cfg['subpages-blurb'] = '$1.'
--[[
-- cfg['subpages-link-display']
-- The text to display for the "subpages of this page" link. $1 is cfg['template-pagetype'],
-- cfg['module-pagetype'] or cfg['default-pagetype'], depending on whether the current page is in
-- the template namespace, the module namespace, or another namespace.
--]]
cfg['subpages-link-display'] = 'Subpages of this $1'
-- cfg['template-pagetype']
-- The pagetype to display for template pages.
cfg['template-pagetype'] = 'template'
-- cfg['module-pagetype']
-- The pagetype to display for Lua module pages.
cfg['module-pagetype'] = 'module'
-- cfg['default-pagetype']
-- The pagetype to display for pages other than templates or Lua modules.
cfg['default-pagetype'] = 'page'
----------------------------------------------------------------------------------------------------
-- Doc link configuration
----------------------------------------------------------------------------------------------------
-- cfg['doc-subpage']
-- The name of the subpage typically used for documentation pages.
cfg['doc-subpage'] = 'doc'
-- cfg['docpage-preload']
-- Preload file for template documentation pages in all namespaces.
cfg['docpage-preload'] = 'Template:Documentation/preload'
-- cfg['module-preload']
-- Preload file for Lua module documentation pages.
cfg['module-preload'] = 'Template:Documentation/preload-module-doc'
----------------------------------------------------------------------------------------------------
-- HTML and CSS configuration
----------------------------------------------------------------------------------------------------
-- cfg['templatestyles']
-- The name of the TemplateStyles page where CSS is kept.
-- Sandbox CSS will be at Module:Documentation/sandbox/styles.css when needed.
cfg['templatestyles'] = 'Module:Documentation/styles.css'
-- cfg['container']
-- Class which can be used to set flex or grid CSS on the
-- two child divs documentation and documentation-metadata
cfg['container'] = 'documentation-container'
-- cfg['main-div-classes']
-- Classes added to the main HTML "div" tag.
cfg['main-div-classes'] = 'documentation'
-- cfg['main-div-heading-class']
-- Class for the main heading for templates and modules and assoc. talk spaces
cfg['main-div-heading-class'] = 'documentation-heading'
-- cfg['start-box-class']
-- Class for the start box
cfg['start-box-class'] = 'documentation-startbox'
-- cfg['start-box-link-classes']
-- Classes used for the [view][edit][history] or [create] links in the start box.
-- mw-editsection-like is per [[Wikipedia:Village pump (technical)/Archive 117]]
cfg['start-box-link-classes'] = 'mw-editsection-like plainlinks'
-- cfg['end-box-class']
-- Class for the end box.
cfg['end-box-class'] = 'documentation-metadata'
-- cfg['end-box-plainlinks']
-- Plainlinks
cfg['end-box-plainlinks'] = 'plainlinks'
-- cfg['toolbar-class']
-- Class added for toolbar links.
cfg['toolbar-class'] = 'documentation-toolbar'
-- cfg['clear']
-- Just used to clear things.
cfg['clear'] = 'documentation-clear'
----------------------------------------------------------------------------------------------------
-- Tracking category configuration
----------------------------------------------------------------------------------------------------
-- cfg['display-strange-usage-category']
-- Set to true to enable output of cfg['strange-usage-category'] if the module is used on a /doc subpage
-- or a /testcases subpage. This should be a boolean value (either true or false).
cfg['display-strange-usage-category'] = true
-- cfg['strange-usage-category']
-- Category to output if cfg['display-strange-usage-category'] is set to true and the module is used on a
-- /doc subpage or a /testcases subpage.
cfg['strange-usage-category'] = 'Wikipedia pages with strange ((documentation)) usage'
--[[
----------------------------------------------------------------------------------------------------
-- End configuration
--
-- Don't edit anything below this line.
----------------------------------------------------------------------------------------------------
--]]
return cfg
d70e8b1402a2bbe08a1fef4b75d743e661af0c95
Template:Documentation subpage
10
63
642
2022-10-01T17:51:17Z
[[cln>Pppery
0
wikitext
text/x-wiki
<includeonly><!--
-->{{#ifeq:{{lc:{{SUBPAGENAME}}}} |{{{override|doc}}}
| <!--(this template has been transcluded on a /doc or /{{{override}}} page)-->
</includeonly><!--
-->{{#ifeq:{{{doc-notice|show}}} |show
| {{Mbox
| type = notice
| style = margin-bottom:1.0em;
| image = [[File:Edit-copy green.svg|40px|alt=|link=]]
| text =
'''This is a documentation subpage''' for '''{{{1|[[:{{SUBJECTSPACE}}:{{BASEPAGENAME}}]]}}}'''.<br/> It contains usage information, [[mw:Help:Categories|categories]] and other content that is not part of the original {{#if:{{{text2|}}} |{{{text2}}} |{{#if:{{{text1|}}} |{{{text1}}} | page}}}}.
}}
}}<!--
-->{{DEFAULTSORT:{{{defaultsort|{{PAGENAME}}}}}}}<!--
-->{{#if:{{{inhibit|}}} |<!--(don't categorize)-->
| <includeonly><!--
-->{{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}
| [[Category:{{#switch:{{SUBJECTSPACE}} |Template=Template |Module=Module |User=User |#default=Wikipedia}} documentation pages]]
| [[Category:Documentation subpages without corresponding pages]]
}}<!--
--></includeonly>
}}<!--
(completing initial #ifeq: at start of template:)
--><includeonly>
| <!--(this template has not been transcluded on a /doc or /{{{override}}} page)-->
}}<!--
--></includeonly><noinclude>{{Documentation}}</noinclude>
471e685c1c643a5c6272e20e49824fffebad0448
Module:Format link
828
41
86
2022-10-04T13:37:11Z
Pppery
5
Avoid Lua erroring when we run out of expensive parser function calls
Scribunto
text/plain
--------------------------------------------------------------------------------
-- Format link
--
-- Makes a wikilink from the given link and display values. Links are escaped
-- with colons if necessary, and links to sections are detected and displayed
-- with " § " as a separator rather than the standard MediaWiki "#". Used in
-- the {{format link}} template.
--------------------------------------------------------------------------------
local libraryUtil = require('libraryUtil')
local checkType = libraryUtil.checkType
local checkTypeForNamedArg = libraryUtil.checkTypeForNamedArg
local mArguments -- lazily initialise [[Module:Arguments]]
local mError -- lazily initialise [[Module:Error]]
local yesno -- lazily initialise [[Module:Yesno]]
local p = {}
--------------------------------------------------------------------------------
-- Helper functions
--------------------------------------------------------------------------------
local function getArgs(frame)
-- Fetches the arguments from the parent frame. Whitespace is trimmed and
-- blanks are removed.
mArguments = require('Module:Arguments')
return mArguments.getArgs(frame, {parentOnly = true})
end
local function removeInitialColon(s)
-- Removes the initial colon from a string, if present.
return s:match('^:?(.*)')
end
local function maybeItalicize(s, shouldItalicize)
-- Italicize s if s is a string and the shouldItalicize parameter is true.
if s and shouldItalicize then
return '<i>' .. s .. '</i>'
else
return s
end
end
local function parseLink(link)
-- Parse a link and return a table with the link's components.
-- These components are:
-- - link: the link, stripped of any initial colon (always present)
-- - page: the page name (always present)
-- - section: the page name (may be nil)
-- - display: the display text, if manually entered after a pipe (may be nil)
link = removeInitialColon(link)
-- Find whether a faux display value has been added with the {{!}} magic
-- word.
local prePipe, display = link:match('^(.-)|(.*)$')
link = prePipe or link
-- Find the page, if it exists.
-- For links like [[#Bar]], the page will be nil.
local preHash, postHash = link:match('^(.-)#(.*)$')
local page
if not preHash then
-- We have a link like [[Foo]].
page = link
elseif preHash ~= '' then
-- We have a link like [[Foo#Bar]].
page = preHash
end
-- Find the section, if it exists.
local section
if postHash and postHash ~= '' then
section = postHash
end
return {
link = link,
page = page,
section = section,
display = display,
}
end
local function formatDisplay(parsed, options)
-- Formats a display string based on a parsed link table (matching the
-- output of parseLink) and an options table (matching the input options for
-- _formatLink).
local page = maybeItalicize(parsed.page, options.italicizePage)
local section = maybeItalicize(parsed.section, options.italicizeSection)
if (not section) then
return page
elseif (not page) then
return mw.ustring.format('§ %s', section)
else
return mw.ustring.format('%s § %s', page, section)
end
end
local function missingArgError(target)
mError = require('Module:Error')
return mError.error{message =
'Error: no link or target specified! ([[' .. target .. '#Errors|help]])'
}
end
--------------------------------------------------------------------------------
-- Main functions
--------------------------------------------------------------------------------
function p.formatLink(frame)
-- The formatLink export function, for use in templates.
yesno = require('Module:Yesno')
local args = getArgs(frame)
local link = args[1] or args.link
local target = args[3] or args.target
if not (link or target) then
return missingArgError('Template:Format link')
end
return p._formatLink{
link = link,
display = args[2] or args.display,
target = target,
italicizePage = yesno(args.italicizepage),
italicizeSection = yesno(args.italicizesection),
categorizeMissing = args.categorizemissing
}
end
function p._formatLink(options)
-- The formatLink export function, for use in modules.
checkType('_formatLink', 1, options, 'table')
local function check(key, expectedType) --for brevity
checkTypeForNamedArg(
'_formatLink', key, options[key], expectedType or 'string', true
)
end
check('link')
check('display')
check('target')
check('italicizePage', 'boolean')
check('italicizeSection', 'boolean')
check('categorizeMissing')
-- Normalize link and target and check that at least one is present
if options.link == '' then options.link = nil end
if options.target == '' then options.target = nil end
if not (options.link or options.target) then
return missingArgError('Module:Format link')
end
local parsed = parseLink(options.link)
local display = options.display or parsed.display
local catMissing = options.categorizeMissing
local category = ''
-- Find the display text
if not display then display = formatDisplay(parsed, options) end
-- Handle the target option if present
if options.target then
local parsedTarget = parseLink(options.target)
parsed.link = parsedTarget.link
parsed.page = parsedTarget.page
end
-- Test if page exists if a diagnostic category is specified
if catMissing and (mw.ustring.len(catMissing) > 0) then
local title = nil
if parsed.page then title = mw.title.new(parsed.page) end
if title and (not title.isExternal) then
local success, exists = pcall(function() return title.exists end)
if success and not exists then
category = mw.ustring.format('[[Category:%s]]', catMissing)
end
end
end
-- Format the result as a link
if parsed.link == display then
return mw.ustring.format('[[:%s]]%s', parsed.link, category)
else
return mw.ustring.format('[[:%s|%s]]%s', parsed.link, display, category)
end
end
--------------------------------------------------------------------------------
-- Derived convenience functions
--------------------------------------------------------------------------------
function p.formatPages(options, pages)
-- Formats an array of pages using formatLink and the given options table,
-- and returns it as an array. Nil values are not allowed.
local ret = {}
for i, page in ipairs(pages) do
ret[i] = p._formatLink{
link = page,
categorizeMissing = options.categorizeMissing,
italicizePage = options.italicizePage,
italicizeSection = options.italicizeSection
}
end
return ret
end
return p
1253bdd2683ee4badc33856bfd5499b09a7dca1f
Template:Cob
10
283
572
2022-10-07T15:01:20Z
DatGuy
16
+r from template shortcut
wikitext
text/x-wiki
#REDIRECT [[Template:Collapse bottom]]
{{Redirect category shell|
{{R from template shortcut}}
}}
1cd16c56552caeb938d794d973d1a13c885f7830
Module:Icon
828
338
707
2022-10-21T08:04:06Z
[[]]>WOSlinker
0
use require("strict") instead of require("Module:No globals")
Scribunto
text/plain
-- This module implements [[Template:Icon]].
require("strict")
local yesNo = require("Module:Yesno")
local getArgs = require("Module:Arguments").getArgs
local getPlain = nil
local p = {}
-- Determine whether we're being called from a sandbox
local sandbox = mw.getCurrentFrame():getTitle():find('sandbox', 1, true) and '/sandbox' or ''
-- Implements [[Template:Icon]]
-- Returns the icon image corresponding to a string (like 'B')
function p._main(args, data)
local data_module = 'Module:Icon/data'..sandbox
data = data or mw.loadData(data_module)
local code = args.class or args[1]
local iconData
if code then
code = code:match('^%s*(.-)%s*$'):lower() -- trim whitespace and put in lower case
iconData = data[code]
end
if not iconData then
iconData = data._DEFAULT
end
return string.format(
'[[File:%s%s%s|%s|class=noviewer|alt=%s]]',
iconData.image,
iconData.tooltip and '|' .. iconData.tooltip or '',
iconData.link == false and '|link=' or '',
args.size or '16x16px',
iconData.alt or ''
)
end
-- Implements [[Template:Icon link]], a superset of [[Template:Icon]]
-- Returns an icon, plus a suitably formatted wikilink
function p._link(args, data)
args.size = args.size or args.iconsize
local icon = p._main(args, data)
-- If no link given in args[2], default back to [[Template:Icon]]
if not args[2] then
return icon
end
-- Strip wiki markup out of link
getPlain = getPlain or require("Module:Text").Text().getPlain
local link = getPlain(args[2])
local display = args[3] or args[2]
-- italicize display string, if requested
if yesNo(args.i) or yesNo(args.italic) or yesNo(args.italics) then
display = '<i>'..display..'</i>'
end
-- if display is link, just use standard wlink
if link == display then
return icon..' [['..link..']]'
end
return icon..' [['..link..'|'..display..']]'
end
function p.main(frame)
local args = getArgs(frame,{parentFirst=true})
return p._main(args)
end
function p.link(frame)
local args = getArgs(frame,{parentFirst=true})
return p._link(args)
end
return p
7688d9a465bd7c4caa51f7e5c02676c162d583f5
Module:Protection banner
828
48
100
2022-10-21T08:07:11Z
[[w>WOSlinker
0
use require('strict') instead of require('Module:No globals')
Scribunto
text/plain
-- This module implements {{pp-meta}} and its daughter templates such as
-- {{pp-dispute}}, {{pp-vandalism}} and {{pp-sock}}.
-- Initialise necessary modules.
require('strict')
local makeFileLink = require('Module:File link')._main
local effectiveProtectionLevel = require('Module:Effective protection level')._main
local effectiveProtectionExpiry = require('Module:Effective protection expiry')._main
local yesno = require('Module:Yesno')
-- Lazily initialise modules and objects we don't always need.
local getArgs, makeMessageBox, lang
-- Set constants.
local CONFIG_MODULE = 'Module:Protection banner/config'
--------------------------------------------------------------------------------
-- Helper functions
--------------------------------------------------------------------------------
local function makeCategoryLink(cat, sort)
if cat then
return string.format(
'[[%s:%s|%s]]',
mw.site.namespaces[14].name,
cat,
sort
)
end
end
-- Validation function for the expiry and the protection date
local function validateDate(dateString, dateType)
if not lang then
lang = mw.language.getContentLanguage()
end
local success, result = pcall(lang.formatDate, lang, 'U', dateString)
if success then
result = tonumber(result)
if result then
return result
end
end
error(string.format(
'invalid %s: %s',
dateType,
tostring(dateString)
), 4)
end
local function makeFullUrl(page, query, display)
return string.format(
'[%s %s]',
tostring(mw.uri.fullUrl(page, query)),
display
)
end
-- Given a directed graph formatted as node -> table of direct successors,
-- get a table of all nodes reachable from a given node (though always
-- including the given node).
local function getReachableNodes(graph, start)
local toWalk, retval = {[start] = true}, {}
while true do
-- Can't use pairs() since we're adding and removing things as we're iterating
local k = next(toWalk) -- This always gets the "first" key
if k == nil then
return retval
end
toWalk[k] = nil
retval[k] = true
for _,v in ipairs(graph[k]) do
if not retval[v] then
toWalk[v] = true
end
end
end
end
--------------------------------------------------------------------------------
-- Protection class
--------------------------------------------------------------------------------
local Protection = {}
Protection.__index = Protection
Protection.supportedActions = {
edit = true,
move = true,
autoreview = true,
upload = true
}
Protection.bannerConfigFields = {
'text',
'explanation',
'tooltip',
'alt',
'link',
'image'
}
function Protection.new(args, cfg, title)
local obj = {}
obj._cfg = cfg
obj.title = title or mw.title.getCurrentTitle()
-- Set action
if not args.action then
obj.action = 'edit'
elseif Protection.supportedActions[args.action] then
obj.action = args.action
else
error(string.format(
'invalid action: %s',
tostring(args.action)
), 3)
end
-- Set level
obj.level = args.demolevel or effectiveProtectionLevel(obj.action, obj.title)
if not obj.level or (obj.action == 'move' and obj.level == 'autoconfirmed') then
-- Users need to be autoconfirmed to move pages anyway, so treat
-- semi-move-protected pages as unprotected.
obj.level = '*'
end
-- Set expiry
local effectiveExpiry = effectiveProtectionExpiry(obj.action, obj.title)
if effectiveExpiry == 'infinity' then
obj.expiry = 'indef'
elseif effectiveExpiry ~= 'unknown' then
obj.expiry = validateDate(effectiveExpiry, 'expiry date')
end
-- Set reason
if args[1] then
obj.reason = mw.ustring.lower(args[1])
if obj.reason:find('|') then
error('reasons cannot contain the pipe character ("|")', 3)
end
end
-- Set protection date
if args.date then
obj.protectionDate = validateDate(args.date, 'protection date')
end
-- Set banner config
do
obj.bannerConfig = {}
local configTables = {}
if cfg.banners[obj.action] then
configTables[#configTables + 1] = cfg.banners[obj.action][obj.reason]
end
if cfg.defaultBanners[obj.action] then
configTables[#configTables + 1] = cfg.defaultBanners[obj.action][obj.level]
configTables[#configTables + 1] = cfg.defaultBanners[obj.action].default
end
configTables[#configTables + 1] = cfg.masterBanner
for i, field in ipairs(Protection.bannerConfigFields) do
for j, t in ipairs(configTables) do
if t[field] then
obj.bannerConfig[field] = t[field]
break
end
end
end
end
return setmetatable(obj, Protection)
end
function Protection:isUserScript()
-- Whether the page is a user JavaScript or CSS page.
local title = self.title
return title.namespace == 2 and (
title.contentModel == 'javascript' or title.contentModel == 'css'
)
end
function Protection:isProtected()
return self.level ~= '*'
end
function Protection:shouldShowLock()
-- Whether we should output a banner/padlock
return self:isProtected() and not self:isUserScript()
end
-- Whether this page needs a protection category.
Protection.shouldHaveProtectionCategory = Protection.shouldShowLock
function Protection:isTemporary()
return type(self.expiry) == 'number'
end
function Protection:makeProtectionCategory()
if not self:shouldHaveProtectionCategory() then
return ''
end
local cfg = self._cfg
local title = self.title
-- Get the expiry key fragment.
local expiryFragment
if self.expiry == 'indef' then
expiryFragment = self.expiry
elseif type(self.expiry) == 'number' then
expiryFragment = 'temp'
end
-- Get the namespace key fragment.
local namespaceFragment = cfg.categoryNamespaceKeys[title.namespace]
if not namespaceFragment and title.namespace % 2 == 1 then
namespaceFragment = 'talk'
end
-- Define the order that key fragments are tested in. This is done with an
-- array of tables containing the value to be tested, along with its
-- position in the cfg.protectionCategories table.
local order = {
{val = expiryFragment, keypos = 1},
{val = namespaceFragment, keypos = 2},
{val = self.reason, keypos = 3},
{val = self.level, keypos = 4},
{val = self.action, keypos = 5}
}
--[[
-- The old protection templates used an ad-hoc protection category system,
-- with some templates prioritising namespaces in their categories, and
-- others prioritising the protection reason. To emulate this in this module
-- we use the config table cfg.reasonsWithNamespacePriority to set the
-- reasons for which namespaces have priority over protection reason.
-- If we are dealing with one of those reasons, move the namespace table to
-- the end of the order table, i.e. give it highest priority. If not, the
-- reason should have highest priority, so move that to the end of the table
-- instead.
--]]
table.insert(order, table.remove(order, self.reason and cfg.reasonsWithNamespacePriority[self.reason] and 2 or 3))
--[[
-- Define the attempt order. Inactive subtables (subtables with nil "value"
-- fields) are moved to the end, where they will later be given the key
-- "all". This is to cut down on the number of table lookups in
-- cfg.protectionCategories, which grows exponentially with the number of
-- non-nil keys. We keep track of the number of active subtables with the
-- noActive parameter.
--]]
local noActive, attemptOrder
do
local active, inactive = {}, {}
for i, t in ipairs(order) do
if t.val then
active[#active + 1] = t
else
inactive[#inactive + 1] = t
end
end
noActive = #active
attemptOrder = active
for i, t in ipairs(inactive) do
attemptOrder[#attemptOrder + 1] = t
end
end
--[[
-- Check increasingly generic key combinations until we find a match. If a
-- specific category exists for the combination of key fragments we are
-- given, that match will be found first. If not, we keep trying different
-- key fragment combinations until we match using the key
-- "all-all-all-all-all".
--
-- To generate the keys, we index the key subtables using a binary matrix
-- with indexes i and j. j is only calculated up to the number of active
-- subtables. For example, if there were three active subtables, the matrix
-- would look like this, with 0 corresponding to the key fragment "all", and
-- 1 corresponding to other key fragments.
--
-- j 1 2 3
-- i
-- 1 1 1 1
-- 2 0 1 1
-- 3 1 0 1
-- 4 0 0 1
-- 5 1 1 0
-- 6 0 1 0
-- 7 1 0 0
-- 8 0 0 0
--
-- Values of j higher than the number of active subtables are set
-- to the string "all".
--
-- A key for cfg.protectionCategories is constructed for each value of i.
-- The position of the value in the key is determined by the keypos field in
-- each subtable.
--]]
local cats = cfg.protectionCategories
for i = 1, 2^noActive do
local key = {}
for j, t in ipairs(attemptOrder) do
if j > noActive then
key[t.keypos] = 'all'
else
local quotient = i / 2 ^ (j - 1)
quotient = math.ceil(quotient)
if quotient % 2 == 1 then
key[t.keypos] = t.val
else
key[t.keypos] = 'all'
end
end
end
key = table.concat(key, '|')
local attempt = cats[key]
if attempt then
return makeCategoryLink(attempt, title.text)
end
end
return ''
end
function Protection:isIncorrect()
local expiry = self.expiry
return not self:shouldHaveProtectionCategory()
or type(expiry) == 'number' and expiry < os.time()
end
function Protection:isTemplateProtectedNonTemplate()
local action, namespace = self.action, self.title.namespace
return self.level == 'templateeditor'
and (
(action ~= 'edit' and action ~= 'move')
or (namespace ~= 10 and namespace ~= 828)
)
end
function Protection:makeCategoryLinks()
local msg = self._cfg.msg
local ret = {self:makeProtectionCategory()}
if self:isIncorrect() then
ret[#ret + 1] = makeCategoryLink(
msg['tracking-category-incorrect'],
self.title.text
)
end
if self:isTemplateProtectedNonTemplate() then
ret[#ret + 1] = makeCategoryLink(
msg['tracking-category-template'],
self.title.text
)
end
return table.concat(ret)
end
--------------------------------------------------------------------------------
-- Blurb class
--------------------------------------------------------------------------------
local Blurb = {}
Blurb.__index = Blurb
Blurb.bannerTextFields = {
text = true,
explanation = true,
tooltip = true,
alt = true,
link = true
}
function Blurb.new(protectionObj, args, cfg)
return setmetatable({
_cfg = cfg,
_protectionObj = protectionObj,
_args = args
}, Blurb)
end
-- Private methods --
function Blurb:_formatDate(num)
-- Formats a Unix timestamp into dd Month, YYYY format.
lang = lang or mw.language.getContentLanguage()
local success, date = pcall(
lang.formatDate,
lang,
self._cfg.msg['expiry-date-format'] or 'j F Y',
'@' .. tostring(num)
)
if success then
return date
end
end
function Blurb:_getExpandedMessage(msgKey)
return self:_substituteParameters(self._cfg.msg[msgKey])
end
function Blurb:_substituteParameters(msg)
if not self._params then
local parameterFuncs = {}
parameterFuncs.CURRENTVERSION = self._makeCurrentVersionParameter
parameterFuncs.EDITREQUEST = self._makeEditRequestParameter
parameterFuncs.EXPIRY = self._makeExpiryParameter
parameterFuncs.EXPLANATIONBLURB = self._makeExplanationBlurbParameter
parameterFuncs.IMAGELINK = self._makeImageLinkParameter
parameterFuncs.INTROBLURB = self._makeIntroBlurbParameter
parameterFuncs.INTROFRAGMENT = self._makeIntroFragmentParameter
parameterFuncs.PAGETYPE = self._makePagetypeParameter
parameterFuncs.PROTECTIONBLURB = self._makeProtectionBlurbParameter
parameterFuncs.PROTECTIONDATE = self._makeProtectionDateParameter
parameterFuncs.PROTECTIONLEVEL = self._makeProtectionLevelParameter
parameterFuncs.PROTECTIONLOG = self._makeProtectionLogParameter
parameterFuncs.TALKPAGE = self._makeTalkPageParameter
parameterFuncs.TOOLTIPBLURB = self._makeTooltipBlurbParameter
parameterFuncs.TOOLTIPFRAGMENT = self._makeTooltipFragmentParameter
parameterFuncs.VANDAL = self._makeVandalTemplateParameter
self._params = setmetatable({}, {
__index = function (t, k)
local param
if parameterFuncs[k] then
param = parameterFuncs[k](self)
end
param = param or ''
t[k] = param
return param
end
})
end
msg = msg:gsub('${(%u+)}', self._params)
return msg
end
function Blurb:_makeCurrentVersionParameter()
-- A link to the page history or the move log, depending on the kind of
-- protection.
local pagename = self._protectionObj.title.prefixedText
if self._protectionObj.action == 'move' then
-- We need the move log link.
return makeFullUrl(
'Special:Log',
{type = 'move', page = pagename},
self:_getExpandedMessage('current-version-move-display')
)
else
-- We need the history link.
return makeFullUrl(
pagename,
{action = 'history'},
self:_getExpandedMessage('current-version-edit-display')
)
end
end
function Blurb:_makeEditRequestParameter()
local mEditRequest = require('Module:Submit an edit request')
local action = self._protectionObj.action
local level = self._protectionObj.level
-- Get the edit request type.
local requestType
if action == 'edit' then
if level == 'autoconfirmed' then
requestType = 'semi'
elseif level == 'extendedconfirmed' then
requestType = 'extended'
elseif level == 'templateeditor' then
requestType = 'template'
end
end
requestType = requestType or 'full'
-- Get the display value.
local display = self:_getExpandedMessage('edit-request-display')
return mEditRequest._link{type = requestType, display = display}
end
function Blurb:_makeExpiryParameter()
local expiry = self._protectionObj.expiry
if type(expiry) == 'number' then
return self:_formatDate(expiry)
else
return expiry
end
end
function Blurb:_makeExplanationBlurbParameter()
-- Cover special cases first.
if self._protectionObj.title.namespace == 8 then
-- MediaWiki namespace
return self:_getExpandedMessage('explanation-blurb-nounprotect')
end
-- Get explanation blurb table keys
local action = self._protectionObj.action
local level = self._protectionObj.level
local talkKey = self._protectionObj.title.isTalkPage and 'talk' or 'subject'
-- Find the message in the explanation blurb table and substitute any
-- parameters.
local explanations = self._cfg.explanationBlurbs
local msg
if explanations[action][level] and explanations[action][level][talkKey] then
msg = explanations[action][level][talkKey]
elseif explanations[action][level] and explanations[action][level].default then
msg = explanations[action][level].default
elseif explanations[action].default and explanations[action].default[talkKey] then
msg = explanations[action].default[talkKey]
elseif explanations[action].default and explanations[action].default.default then
msg = explanations[action].default.default
else
error(string.format(
'could not find explanation blurb for action "%s", level "%s" and talk key "%s"',
action,
level,
talkKey
), 8)
end
return self:_substituteParameters(msg)
end
function Blurb:_makeImageLinkParameter()
local imageLinks = self._cfg.imageLinks
local action = self._protectionObj.action
local level = self._protectionObj.level
local msg
if imageLinks[action][level] then
msg = imageLinks[action][level]
elseif imageLinks[action].default then
msg = imageLinks[action].default
else
msg = imageLinks.edit.default
end
return self:_substituteParameters(msg)
end
function Blurb:_makeIntroBlurbParameter()
if self._protectionObj:isTemporary() then
return self:_getExpandedMessage('intro-blurb-expiry')
else
return self:_getExpandedMessage('intro-blurb-noexpiry')
end
end
function Blurb:_makeIntroFragmentParameter()
if self._protectionObj:isTemporary() then
return self:_getExpandedMessage('intro-fragment-expiry')
else
return self:_getExpandedMessage('intro-fragment-noexpiry')
end
end
function Blurb:_makePagetypeParameter()
local pagetypes = self._cfg.pagetypes
return pagetypes[self._protectionObj.title.namespace]
or pagetypes.default
or error('no default pagetype defined', 8)
end
function Blurb:_makeProtectionBlurbParameter()
local protectionBlurbs = self._cfg.protectionBlurbs
local action = self._protectionObj.action
local level = self._protectionObj.level
local msg
if protectionBlurbs[action][level] then
msg = protectionBlurbs[action][level]
elseif protectionBlurbs[action].default then
msg = protectionBlurbs[action].default
elseif protectionBlurbs.edit.default then
msg = protectionBlurbs.edit.default
else
error('no protection blurb defined for protectionBlurbs.edit.default', 8)
end
return self:_substituteParameters(msg)
end
function Blurb:_makeProtectionDateParameter()
local protectionDate = self._protectionObj.protectionDate
if type(protectionDate) == 'number' then
return self:_formatDate(protectionDate)
else
return protectionDate
end
end
function Blurb:_makeProtectionLevelParameter()
local protectionLevels = self._cfg.protectionLevels
local action = self._protectionObj.action
local level = self._protectionObj.level
local msg
if protectionLevels[action][level] then
msg = protectionLevels[action][level]
elseif protectionLevels[action].default then
msg = protectionLevels[action].default
elseif protectionLevels.edit.default then
msg = protectionLevels.edit.default
else
error('no protection level defined for protectionLevels.edit.default', 8)
end
return self:_substituteParameters(msg)
end
function Blurb:_makeProtectionLogParameter()
local pagename = self._protectionObj.title.prefixedText
if self._protectionObj.action == 'autoreview' then
-- We need the pending changes log.
return makeFullUrl(
'Special:Log',
{type = 'stable', page = pagename},
self:_getExpandedMessage('pc-log-display')
)
else
-- We need the protection log.
return makeFullUrl(
'Special:Log',
{type = 'protect', page = pagename},
self:_getExpandedMessage('protection-log-display')
)
end
end
function Blurb:_makeTalkPageParameter()
return string.format(
'[[%s:%s#%s|%s]]',
mw.site.namespaces[self._protectionObj.title.namespace].talk.name,
self._protectionObj.title.text,
self._args.section or 'top',
self:_getExpandedMessage('talk-page-link-display')
)
end
function Blurb:_makeTooltipBlurbParameter()
if self._protectionObj:isTemporary() then
return self:_getExpandedMessage('tooltip-blurb-expiry')
else
return self:_getExpandedMessage('tooltip-blurb-noexpiry')
end
end
function Blurb:_makeTooltipFragmentParameter()
if self._protectionObj:isTemporary() then
return self:_getExpandedMessage('tooltip-fragment-expiry')
else
return self:_getExpandedMessage('tooltip-fragment-noexpiry')
end
end
function Blurb:_makeVandalTemplateParameter()
return mw.getCurrentFrame():expandTemplate{
title="vandal-m",
args={self._args.user or self._protectionObj.title.baseText}
}
end
-- Public methods --
function Blurb:makeBannerText(key)
-- Validate input.
if not key or not Blurb.bannerTextFields[key] then
error(string.format(
'"%s" is not a valid banner config field',
tostring(key)
), 2)
end
-- Generate the text.
local msg = self._protectionObj.bannerConfig[key]
if type(msg) == 'string' then
return self:_substituteParameters(msg)
elseif type(msg) == 'function' then
msg = msg(self._protectionObj, self._args)
if type(msg) ~= 'string' then
error(string.format(
'bad output from banner config function with key "%s"'
.. ' (expected string, got %s)',
tostring(key),
type(msg)
), 4)
end
return self:_substituteParameters(msg)
end
end
--------------------------------------------------------------------------------
-- BannerTemplate class
--------------------------------------------------------------------------------
local BannerTemplate = {}
BannerTemplate.__index = BannerTemplate
function BannerTemplate.new(protectionObj, cfg)
local obj = {}
obj._cfg = cfg
-- Set the image filename.
local imageFilename = protectionObj.bannerConfig.image
if imageFilename then
obj._imageFilename = imageFilename
else
-- If an image filename isn't specified explicitly in the banner config,
-- generate it from the protection status and the namespace.
local action = protectionObj.action
local level = protectionObj.level
local namespace = protectionObj.title.namespace
local reason = protectionObj.reason
-- Deal with special cases first.
if (
namespace == 10
or namespace == 828
or reason and obj._cfg.indefImageReasons[reason]
)
and action == 'edit'
and level == 'sysop'
and not protectionObj:isTemporary()
then
-- Fully protected modules and templates get the special red "indef"
-- padlock.
obj._imageFilename = obj._cfg.msg['image-filename-indef']
else
-- Deal with regular protection types.
local images = obj._cfg.images
if images[action] then
if images[action][level] then
obj._imageFilename = images[action][level]
elseif images[action].default then
obj._imageFilename = images[action].default
end
end
end
end
return setmetatable(obj, BannerTemplate)
end
function BannerTemplate:renderImage()
local filename = self._imageFilename
or self._cfg.msg['image-filename-default']
or 'Transparent.gif'
return makeFileLink{
file = filename,
size = (self.imageWidth or 20) .. 'px',
alt = self._imageAlt,
link = self._imageLink,
caption = self.imageCaption
}
end
--------------------------------------------------------------------------------
-- Banner class
--------------------------------------------------------------------------------
local Banner = setmetatable({}, BannerTemplate)
Banner.__index = Banner
function Banner.new(protectionObj, blurbObj, cfg)
local obj = BannerTemplate.new(protectionObj, cfg) -- This doesn't need the blurb.
obj.imageWidth = 40
obj.imageCaption = blurbObj:makeBannerText('alt') -- Large banners use the alt text for the tooltip.
obj._reasonText = blurbObj:makeBannerText('text')
obj._explanationText = blurbObj:makeBannerText('explanation')
obj._page = protectionObj.title.prefixedText -- Only makes a difference in testing.
return setmetatable(obj, Banner)
end
function Banner:__tostring()
-- Renders the banner.
makeMessageBox = makeMessageBox or require('Module:Message box').main
local reasonText = self._reasonText or error('no reason text set', 2)
local explanationText = self._explanationText
local mbargs = {
page = self._page,
type = 'protection',
image = self:renderImage(),
text = string.format(
"'''%s'''%s",
reasonText,
explanationText and '<br />' .. explanationText or ''
)
}
return makeMessageBox('mbox', mbargs)
end
--------------------------------------------------------------------------------
-- Padlock class
--------------------------------------------------------------------------------
local Padlock = setmetatable({}, BannerTemplate)
Padlock.__index = Padlock
function Padlock.new(protectionObj, blurbObj, cfg)
local obj = BannerTemplate.new(protectionObj, cfg) -- This doesn't need the blurb.
obj.imageWidth = 20
obj.imageCaption = blurbObj:makeBannerText('tooltip')
obj._imageAlt = blurbObj:makeBannerText('alt')
obj._imageLink = blurbObj:makeBannerText('link')
obj._indicatorName = cfg.padlockIndicatorNames[protectionObj.action]
or cfg.padlockIndicatorNames.default
or 'pp-default'
return setmetatable(obj, Padlock)
end
function Padlock:__tostring()
local frame = mw.getCurrentFrame()
-- The nowiki tag helps prevent whitespace at the top of articles.
return frame:extensionTag{name = 'nowiki'} .. frame:extensionTag{
name = 'indicator',
args = {name = self._indicatorName},
content = self:renderImage()
}
end
--------------------------------------------------------------------------------
-- Exports
--------------------------------------------------------------------------------
local p = {}
function p._exportClasses()
-- This is used for testing purposes.
return {
Protection = Protection,
Blurb = Blurb,
BannerTemplate = BannerTemplate,
Banner = Banner,
Padlock = Padlock,
}
end
function p._main(args, cfg, title)
args = args or {}
cfg = cfg or require(CONFIG_MODULE)
local protectionObj = Protection.new(args, cfg, title)
local ret = {}
-- If a page's edit protection is equally or more restrictive than its
-- protection from some other action, then don't bother displaying anything
-- for the other action (except categories).
if not yesno(args.catonly) and (protectionObj.action == 'edit' or
args.demolevel or
not getReachableNodes(
cfg.hierarchy,
protectionObj.level
)[effectiveProtectionLevel('edit', protectionObj.title)])
then
-- Initialise the blurb object
local blurbObj = Blurb.new(protectionObj, args, cfg)
-- Render the banner
if protectionObj:shouldShowLock() then
ret[#ret + 1] = tostring(
(yesno(args.small) and Padlock or Banner)
.new(protectionObj, blurbObj, cfg)
)
end
end
-- Render the categories
if yesno(args.category) ~= false then
ret[#ret + 1] = protectionObj:makeCategoryLinks()
end
return table.concat(ret)
end
function p.main(frame, cfg)
cfg = cfg or require(CONFIG_MODULE)
-- Find default args, if any.
local parent = frame.getParent and frame:getParent()
local defaultArgs = parent and cfg.wrappers[parent:getTitle():gsub('/sandbox$', '')]
-- Find user args, and use the parent frame if we are being called from a
-- wrapper template.
getArgs = getArgs or require('Module:Arguments').getArgs
local userArgs = getArgs(frame, {
parentOnly = defaultArgs,
frameOnly = not defaultArgs
})
-- Build the args table. User-specified args overwrite default args.
local args = {}
for k, v in pairs(defaultArgs or {}) do
args[k] = v
end
for k, v in pairs(userArgs) do
args[k] = v
end
return p._main(args, cfg)
end
return p
894f0884d4c2da1ce19d385b96f59af654b0946a
Template:Para
10
57
2066
118
2022-10-21T19:52:33Z
dev>Pppery
0
wikitext
text/x-wiki
<code class="tpl-para" style="word-break:break-word;{{SAFESUBST:<noinclude />#if:{{{plain|}}}|border: none; background-color: inherit;}} {{SAFESUBST:<noinclude />#if:{{{style|}}}|{{{style}}}}}">|{{SAFESUBST:<noinclude />#if:{{{1|}}}|{{{1}}}=}}{{{2|}}}</code><noinclude>
{{Documentation}}
<!--Categories and interwikis go near the bottom of the /doc subpage.-->
</noinclude>
7be5bee75307eae9342bbb9ff3a613e93e93d5a7
Module:Infobox military conflict
828
1049
2159
2022-10-21T21:37:13Z
[[]]>Legoktm
0
Replace [[Module:No globals]] with require( "strict" )
Scribunto
text/plain
require('strict')
local infoboxStyle = mw.loadData('Module:WPMILHIST Infobox style')
local templatestyles = 'Module:Infobox military conflict/styles.css'
local IMC = {}
IMC.__index = IMC
function IMC:renderPerCombatant(builder, headerText, prefix, suffix)
prefix = prefix or ''
suffix = suffix or ''
local colspans = {}
-- This may result in colspans[1] getting set twice, but
-- this is no big deal. The second set will be correct.
local lastCombatant = 1
for i = 1,self.combatants do
if self.args[prefix .. i .. suffix] then
colspans[lastCombatant] = i - lastCombatant
lastCombatant = i
end
end
local jointText = self.args[prefix .. (self.combatants + 1) .. suffix]
if headerText and (colspans[1] or jointText) then
builder:tag('tr')
:tag('th')
:attr('colspan', self.combatants)
:cssText(infoboxStyle.header_raw)
:wikitext(headerText)
end
-- The only time colspans[1] wouldn't be set is if no
-- combatant has a field with the given prefix and suffix.
if colspans[1] then
-- Since each found argument set the colspan for the previous
-- one, the final one wasn't set above, so set it now.
colspans[lastCombatant] = self.combatants - lastCombatant + 1
builder = builder:tag('tr')
for i = 1,self.combatants do
-- At this point, colspans[i] will be set for i=1 unconditionally, and for
-- any other value of i where self.args[prefix .. i .. suffix] is set.
if colspans[i] then
builder:tag('td')
-- don't bother emitting colspan="1"
:attr('colspan', colspans[i] ~= 1 and colspans[i] or nil)
:css('width', math.floor(100 / self.combatants * colspans[i] + 0.5) .. '%')
-- no border on the right of the rightmost column
:css('border-right', i ~= lastCombatant and infoboxStyle.internal_border or nil)
-- no padding on the left of the leftmost column
:css('padding-left', i ~= 1 and '0.25em' or nil)
-- don't show the border if we're directly under a header
:css('border-top', not headerText and infoboxStyle.internal_border or nil)
:newline()
:wikitext(self.args[prefix .. i .. suffix])
end
end
end
if jointText then
builder:tag('tr')
:tag('td')
:attr('colspan', self.combatants)
:css('text-align', 'center')
-- don't show the border if we're directly under a header
:css('border-top', (not headerText or colspans[1]) and infoboxStyle.internal_border or nil)
:newline()
:wikitext(jointText)
end
end
function IMC:renderHeaderTable(builder)
builder = builder:tag('table')
:css('width', '100%')
:css('margin', 0)
:css('padding', 0)
:css('border', 0)
:css('display', 'inline-table')
if self.args.date then
builder:tag('tr')
:tag('th')
:css('padding-right', '1em')
:wikitext('Date')
:done()
:tag('td')
:wikitext(self.args.date)
end
builder = builder:tag('tr')
:tag('th')
:css('padding-right', '1em')
:wikitext('Location')
:done()
:tag('td')
:tag('div')
:addClass('location')
:wikitext(self.args.place or '{{{place}}}') -- hack so that people who don't know Lua know that this parameter is required
:done()
if self.args.coordinates then
builder:wikitext(self.args.coordinates)
end
builder = builder:done():done()
-- only for "Putsch"
if self.args.action then
builder:tag('tr')
:tag('th')
:css('padding-right', '1em')
:wikitext(self.args.action and 'Action')
:done()
:tag('td')
:wikitext(self.args.action)
end
if self.args.status or self.args.result then
builder:tag('tr')
:tag('th')
:css('padding-right', '1em')
:wikitext(self.args.status and 'Status' or 'Result')
:done()
:tag('td')
:addClass('status')
:newline()
:wikitext(self.args.status or self.args.result)
end
if self.args.territory then
builder:tag('tr')
:tag('th')
:css('padding-right', '1em')
:wikitext('Territorial<br />changes')
:done()
:tag('td')
:newline()
:wikitext(self.args.territory)
end
end
function IMC:render()
local builder = mw.html.create()
if self.args.campaignbox then
-- this should be the same as using {{stack|clear=right|...}}
builder:wikitext(self.frame:expandTemplate{ title = 'stack begin', args = { clear='true'} })
end
builder = builder:tag('table')
:addClass('infobox vevent')
:cssText(infoboxStyle.main_box_raw)
:css('width', self.args.width or nil)
builder:tag('tr')
:tag('th')
:addClass('summary')
:attr('colspan', self.combatants)
:cssText(infoboxStyle.header_raw)
:wikitext(self.args.conflict or mw.title.getCurrentTitle().text)
if self.args.partof then
builder:tag('tr')
:tag('td')
:attr('colspan', self.combatants)
:cssText(infoboxStyle.sub_header_raw)
:wikitext('Part of ' .. self.args.partof)
end
if self.args.image then
builder:tag('tr')
:tag('td')
:attr('colspan', self.combatants)
:cssText(infoboxStyle.image_box_raw)
:wikitext(string.format('%s%s%s',
require('Module:InfoboxImage').InfoboxImage{args = {
image = self.args.image,
size = self.args.image_size,
sizedefault = 'frameless',
upright = 1,
alt = self.args.alt
}},
self.args.caption and '<br />' or '',
self.args.caption or ''
))
end
self:renderHeaderTable(builder:tag('tr'):tag('td'):attr('colspan', self.combatants))
self:renderPerCombatant(builder, self.args.combatants_header or 'Belligerents', 'combatant')
-- can be un-hardcoded once gerrit:165108 is merged
for _,v in ipairs{'a','b','c','d'} do
self:renderPerCombatant(builder, nil, 'combatant', v)
end
self:renderPerCombatant(builder, self.args.commanders_header or 'Commanders and leaders', 'commander')
for _,v in ipairs{'a','b','c','d'} do
self:renderPerCombatant(builder, nil, 'commander', v)
end
self:renderPerCombatant(builder, self.args.units_header or 'Units involved', 'units')
self:renderPerCombatant(builder, self.args.strengths_header or 'Strength', 'strength')
self:renderPerCombatant(builder, self.args.polstrengths_header or 'Political support', 'polstrength')
self:renderPerCombatant(builder, self.args.milstrengths_header or 'Military support', 'milstrength')
self:renderPerCombatant(builder, self.args.casualties_header or 'Casualties and losses', 'casualties')
if self.args.notes then
builder:tag('tr')
:tag('td')
:attr('colspan', self.combatants)
:css('border-top', infoboxStyle.section_border)
:newline()
:wikitext(self.args.notes)
end
if self.args.map_type then
builder:tag('tr')
:tag('td')
:attr('colspan', self.combatants)
:css('border-top', infoboxStyle.internal_border)
:node(require('Module:Location map').main(self.frame, {
self.args.map_type,
relief = self.args.map_relief,
coordinates = self.args.coordinates,
width = self.args.map_size or 220,
float = 'center',
border = 'none',
mark = self.args.map_mark,
marksize = self.args.map_marksize or 8,
label = self.args.map_label,
alt = self.args.map_alt,
caption = self.args.map_caption or ('Location within '
.. (require('Module:Location map').data(self.frame, {self.args.map_type, 'name'})))
}))
end
builder = builder:done()
if self.args.campaignbox then
builder = builder:done()
builder:wikitext(self.args.campaignbox .. self.frame:expandTemplate{ title = 'stack end'})
end
return builder
end
function IMC.new(frame, args)
if not args then
args = require('Module:Arguments').getArgs(frame, {wrappers = 'Template:Infobox military conflict'})
end
local obj = {
frame = frame,
args = args
}
-- until gerrit:165108 is merged, there's still a cap on combatants, but as soon as it merges, we can update this little bit of code to uncap it
-- also, don't try to make this more efficient, or references could be in the wrong order
obj.combatants = 2
for _,v in ipairs{'', 'a', 'b', 'c', 'd'} do
for i = 1,5 do
if args['combatant' .. i .. v] then
obj.combatants = math.max(obj.combatants, i)
end
end
end
return setmetatable(obj, IMC)
end
local p = {}
function p.main(frame)
return frame:extensionTag{ name = 'templatestyles', args = { src = templatestyles} } .. tostring(IMC.new(frame):render())
end
return p
737c5c2ab35460ae4165baecc4a140ed140cd602
Module:Section link
828
297
600
2022-10-22T09:09:53Z
[[w>WOSlinker
0
use require('strict') instead of require('Module:No globals')
Scribunto
text/plain
-- This module implements {{section link}}.
require('strict');
local checkType = require('libraryUtil').checkType
local p = {}
local function makeSectionLink(page, section, display)
display = display or section
page = page or ''
-- MediaWiki doesn't allow these in `page`, so only need to do for `section`
if type(section) == 'string' then
section = string.gsub(section, "{", "{")
section = string.gsub(section, "}", "}")
end
return string.format('[[%s#%s|%s]]', page, section, display)
end
local function normalizeTitle(title)
title = mw.ustring.gsub(mw.ustring.gsub(title, "'", ""), '"', '')
title = mw.ustring.gsub(title, "%b<>", "")
return mw.title.new(title).prefixedText
end
function p._main(page, sections, options, title)
-- Validate input.
checkType('_main', 1, page, 'string', true)
checkType('_main', 3, options, 'table', true)
if sections == nil then
sections = {}
elseif type(sections) == 'string' then
sections = {sections}
elseif type(sections) ~= 'table' then
error(string.format(
"type error in argument #2 to '_main' " ..
"(string, table or nil expected, got %s)",
type(sections)
), 2)
end
options = options or {}
title = title or mw.title.getCurrentTitle()
-- Deal with blank page names elegantly
if page and not page:find('%S') then
page = nil
options.nopage = true
end
-- Make the link(s).
local isShowingPage = not options.nopage
if #sections <= 1 then
local linkPage = page or ''
local section = sections[1] or 'Notes'
local display = '§ ' .. section
if isShowingPage then
page = page or title.prefixedText
if options.display and options.display ~= '' then
if normalizeTitle(options.display) == normalizeTitle(page) then
display = options.display .. ' ' .. display
else
error(string.format(
'Display title "%s" was ignored since it is ' ..
"not equivalent to the page's actual title",
options.display
), 0)
end
else
display = page .. ' ' .. display
end
end
return makeSectionLink(linkPage, section, display)
else
-- Multiple sections. First, make a list of the links to display.
local ret = {}
for i, section in ipairs(sections) do
ret[i] = makeSectionLink(page, section)
end
-- Assemble the list of links into a string with mw.text.listToText.
-- We use the default separator for mw.text.listToText, but a custom
-- conjunction. There is also a special case conjunction if we only
-- have two links.
local conjunction
if #sections == 2 then
conjunction = '​ and '
else
conjunction = ', and '
end
ret = mw.text.listToText(ret, nil, conjunction)
-- Add the intro text.
local intro = '§§ '
if isShowingPage then
intro = (page or title.prefixedText) .. ' ' .. intro
end
ret = intro .. ret
return ret
end
end
function p.main(frame)
local yesno = require('Module:Yesno')
local args = require('Module:Arguments').getArgs(frame, {
wrappers = 'Template:Section link',
valueFunc = function (key, value)
value = value:match('^%s*(.-)%s*$') -- Trim whitespace
-- Allow blank first parameters, as the wikitext template does this.
if value ~= '' or key == 1 then
return value
end
end
})
for k, v in pairs(args) do -- replace underscores in the positional parameter values
if 'number' == type(k) then
if not yesno (args['keep-underscores']) then -- unless |keep-underscores=yes
args[k] = mw.uri.decode (v, 'WIKI'); -- percent-decode; replace underscores with space characters
else
args[k] = mw.uri.decode (v, 'PATH'); -- percent-decode; retain underscores
end
end
end
-- Sort the arguments.
local page
local sections, options = {}, {}
for k, v in pairs(args) do
if k == 1 then
-- Doing this in the loop because of a bug in [[Module:Arguments]]
-- when using pairs with deleted arguments.
page = mw.text.decode(v, true)
elseif type(k) == 'number' then
sections[k] = v
else
options[k] = v
end
end
options.nopage = yesno (options.nopage); -- make boolean
-- Extract section from page, if present
if page then
local p, s = page:match('^(.-)#(.*)$')
if p then page, sections[1] = p, s end
end
-- Compress the sections array.
local function compressArray(t)
local nums, ret = {}, {}
for num in pairs(t) do
nums[#nums + 1] = num
end
table.sort(nums)
for i, num in ipairs(nums) do
ret[i] = t[num]
end
return ret
end
sections = compressArray(sections)
return p._main(page, sections, options)
end
return p
5cc61d43dc601ca43e9472500fc5cd09ca7cea44
Module:Coordinates/doc
828
312
630
2022-10-22T12:02:06Z
[[w>WOSlinker
0
remove no globals link
wikitext
text/x-wiki
{{High-risk}}
{{Module rating|protected}}
{{Tracks and uses Wikidata|P625}}
{{Lua|Module:Math|Module:Arguments}}
{{Uses TemplateStyles|Module:Coordinates/styles.css}}
'''Note:''' The code which this module's main function (<code>coord</code>) outputs is directly parsed and/or manipulated by [[Module:Location map]] and other functions of this module itself (<code>coord2text</code> and <code>coordinsert</code>). If the structure of the output changes (for example, to use [[:mw:Help:Extension:Kartographer|the <code><nowiki><mapframe></nowiki></code> and <code><nowiki><maplink></nowiki></code> tags]]), please update the aforementioned scripts as well.
==Using the module with coordinsert==
When using the {{tl|Coord}} template inside another template, like an infobox, there may be parameters (like <code><var>type</var>:<var>airport</var></code>) which should be added automatically. To do so, do something like this:
<code>{{#if:{{{coordinates|}}}|{{#invoke:Coordinates|coordinsert|{{{coordinates|}}}|<var>parameter1:value1|parameter2:value2|parameter3:value3…</var>}}|</code>
Do not add more vertical bars <code>|</code> than necessary.
==Using the module with coord2text to extract latitude or longitude==
Developers maintaining legacy code may need to extract latitude or longitude to use a parameters in other code, or a mathematical expression.
The module's "coord2text" function can be used to extract data from the {{tl|Coord}} template. To extract the latitude from a Coord template, use:
<code><nowiki>{{#invoke:coordinates|coord2text|{{Coord|57|18|22|N|4|27|32|E}}|lat}}</nowiki></code> → {{#invoke:coordinates|coord2text|{{Coord|57|18|22|N|4|27|32|E}}|lat}}
To extract the longitude, use:
<code><nowiki>{{#invoke:coordinates|coord2text|{{Coord|57|18|22|N|4|27|32|E}}|long}}</nowiki></code> → {{#invoke:coordinates|coord2text|{{Coord|57|18|22|N|4|27|32|E}}|long}}
== Modules using this module directly ==
* [[Module:HS listed building row]]
== Tracking categories ==
* {{clc|Pages with malformed coordinate tags}}
* {{clc|Coordinates not on Wikidata}}
* {{clc|Coordinates on Wikidata}}
* {{clc|Coordinates on Wikidata set to no value}}
* {{clc|Coordinates on Wikidata set to unknown value}}
<includeonly>{{#switch:{{SUBPAGENAME}}|sandbox2|sandbox=|
[[Category:Modules that add a tracking category]]
}}</includeonly>
174a46bca3b8e3d6b54c213ded0b947107295f97
Template:Trim
10
1013
2081
2022-10-26T14:01:15Z
[[]]>MSGJ
0
x parameter not needed
wikitext
text/x-wiki
<includeonly>{{safesubst:#if:1|{{{1|}}}}}</includeonly><noinclude>
{{Documentation}}
</noinclude>
3d29fbfff9683523147db6e1f55c0e17ed30863b
Template:Country data France
10
244
494
2022-11-21T21:23:02Z
[[w>Paine Ellsworth
0
Undid revision 1069486652 by [[Special:Contributions/Paine Ellsworth|Paine Ellsworth]] ([[User talk:Paine Ellsworth|talk]]) srv per talk page
wikitext
text/x-wiki
{{ {{{1<noinclude>|country showdata</noinclude>}}}
| alias = France
| flag alias = Flag of France.svg
| flag alias-1790 = Flag of France (1790–1794).svg
| flag alias-1794 = Flag of France (1794–1815, 1830–1958).svg
| flag alias-1814 = Flag of the Kingdom of France (1814-1830).svg
| flag alias-1830 = Flag of France (1794–1815, 1830–1958).svg
| flag alias-1848 = Drapeau france 1848.svg
| flag alias-1848a = Drapeau france 1848.svg
| flag alias-1848b = Flag of France (1794–1815, 1830–1958).svg
| flag alias-1974 = Flag of France (lighter variant).svg
| flag alias-naval = Civil and Naval Ensign of France.svg
| flag alias-naval-1790 = Flag of French-Navy-Revolution.svg
| flag alias-air force = Flag of France.svg
| link alias-air force = French Air and Space Force
| flag alias-coast guard = French Maritime Gendarmerie racing stripe.svg
| border-coast guard =
| link alias-coast guard = French Maritime Gendarmerie
| flag alias-army = Flag of France.svg
| link alias-army = French Army
| link alias-naval = French Navy
| flag alias-navy = Civil and Naval Ensign of France.svg
| link alias-navy = French Navy
| size = {{{size|}}}
| name = {{{name|}}}
| altlink = {{{altlink|}}}
| variant = {{{variant|}}}
<noinclude>
| var1 = 1790
| var2 = 1794
| var3 = 1814
| var4 = 1830
| var5 = 1848a
| var6 = 1848b
| var7 = 1974
| var8 = naval-1790
| redir1 = FRA
| related1 = Kingdom of France
| related2 = Free France
</noinclude>
}}
6489f5636282c8d82ad1b5a74115901b2a150efe
Template:Country data Ireland
10
280
566
2022-11-24T09:52:50Z
[[w>Spike 'em
0
Undid revision 1123540616 by [[Special:Contributions/Paine Ellsworth|Paine Ellsworth]] ([[User talk:Paine Ellsworth|talk]]) I think this breaks the desired aliasing to Republic of Ireland using this template as a shortcut
wikitext
text/x-wiki
{{ {{{1<noinclude>|country showdata</noinclude>}}}
| hatnote = {{Hatnote|This template contains data that applies to the [[Ireland|entire island]]. For the [[Republic of Ireland|sovereign state]], see [[Template:Country data Republic of Ireland]].}}
| alias = {{#if:{{{altvar|}}}|Ireland|{{#if:{{{variant|}}}|Ireland|Republic of Ireland}}}}
| shortname alias = Ireland
| flag alias = Flag of Ireland.svg
| flag alias-1783 = Saint Patrick's Saltire.svg
| flag alias-4prov = Four Provinces Flag.svg
| flag alias-green = Green harp flag of Ireland.svg
| flag alias-football = Saint Patrick's Saltire.svg
| link alias-football = Ireland national football team (1882–1950)
| flag alias-hockey = Flag of Ireland hockey team.svg
| flag alias-field hockey = Flag of Ireland hockey team.svg
| {{#ifeq:{{{altlink}}}|A national rugby union team|link alias-rugby union|empty}} = Ireland Wolfhounds
| flag alias-rugby union = IRFU flag.svg
| flag alias-rugby sevens = IRFU flag.svg
| flag alias-rugby league = Four Provinces Flag.svg
| flag alias-cricket = Cricket Ireland flag.svg
| link alias-cricket = Ireland {{{mw|}}} {{{age|}}} cricket team
| flag alias-quidditch = Flag of Quidditch Ireland.svg
| flag alias-air force=Flag of the Irish Air Corps.svg
| link alias-air force=Irish Air Corps
| link alias-naval=Irish Naval Service
| flag alias-military=Flag_of_the_Irish_Defence_Forces.svg
| link alias-military=Irish Defence Forces
| flag alias-army=Flag of the Irish Defence Forces.svg
| link alias-army=Irish Army
| flag alias-navy=Irish Naval Service Colour.svg
| link alias-navy=Irish Naval Service
| flag alias-coast guard=Coast Guard Flag (Ireland).svg
| link alias-coast guard=Irish Coast Guard
| size = {{{size|}}}
| name = {{{name|}}}
| altlink = {{{altlink|}}}
| altvar = {{{altvar|}}}
| variant = {{{variant|}}}
<noinclude>
| var1 = 1783
| var2 = green
| var3 = 4prov
| var4 = football
| var5 = rugby union
| var6 = hockey
| var7 = cricket
| var8 = quidditch
| redir1 = IRE
| redir2 = EIR
| related1 = Republic of Ireland
| related2 = Southern Ireland
| related3 = Kingdom of Ireland
| related4 = Lordship of Ireland
| related5 = Irish Free State
</noinclude>
}}
e5e1f2f51926d8f51389937da62183021c07cb35
Template:Suppress categories
10
76
156
2022-11-26T18:00:01Z
[[w>MusikBot II
0
Changed protection settings for "[[Template:Suppress categories]]": [[Wikipedia:High-risk templates|High-risk template or module]]: 2612 transclusions ([[User:MusikBot II/TemplateProtector|more info]]) ([Edit=Require extended confirmed access] (indefinite) [Move=Require extended confirmed access] (indefinite))
wikitext
text/x-wiki
<includeonly>{{{{{|safesubst:}}}#invoke:Suppress categories|main}}</includeonly><noinclude>
{{documentation}}
<!-- Categories go on the /doc subpage and interwikis go on Wikidata. -->
</noinclude>
1f9c6065201d31d4c70f982129b5babbb809ae8c
Module:Icon/data
828
339
709
2022-12-02T06:35:43Z
[[]]>Paine Ellsworth
0
per edit request on talk page - include icons for Mediawiki, Phabricator and Wikitech
Scribunto
text/plain
-- This module stores icon data for [[Module:Icon]].
--------------------------------------------------------------------------------
-- Icon data
--------------------------------------------------------------------------------
local data = {
fa = {
image = "Featured article star.svg",
tooltip = "Featured article",
link = true,
},
far = {
image = "Cscr-star piece.png",
tooltip = "Featured article review",
link = true,
},
farc = {
image = "Cscr-star piece.png",
tooltip = "Featured article removal candidate",
link = true,
},
ffa = {
aliases = {"dfa"},
image = "Featured article star - cross.svg",
tooltip = "Former featured article",
link = true,
},
fac = {
aliases = {"fan"},
image = "Cscr-candidate.svg",
tooltip = "Featured article candidate",
link = true,
},
ffac = {
aliases = {"nofa"},
image = "Featured article star - cross.svg",
tooltip = "Failed featured article candidate",
link = true,
},
fl = {
image = "Featured article star.svg",
tooltip = "Featured list",
link = true,
},
flrc = {
aliases = {"flr"},
image = "Cscr-star piece.png",
tooltip = "Featured list removal candidate",
link = true,
},
ffl = {
aliases = {"dfl"},
image = "Cscr-featured-strike.svg",
tooltip = "Former featured list",
link = true,
},
flc = {
aliases = {"fln"},
image = "Cscr-candidate.svg",
tooltip = "Featured list candidate",
link = true,
},
fflc = {
aliases = {"nofl"},
image = "Cscr-former.svg",
tooltip = "Failed featured list candidate",
link = true,
},
a = {
image = "Symbol a class.svg",
tooltip = "A-Class article",
link = true,
},
dac = {
aliases = {"daa"},
image = "Symbol unsupport A vote.svg",
tooltip = "Demoted A-Class article",
link = true,
},
acc = {
aliases = {"acn", "aac"},
image = "A candidate.svg",
tooltip = "A-Class article candidate",
link = true,
},
noac = {
aliases = {"faac"},
image = "Symbol unsupport A vote.svg",
tooltip = "Failed A-Class article candidate",
link = true,
},
ga = {
image = "Symbol support vote.svg",
tooltip = "Good article",
link = false,
},
gar = {
image = "GA Candidate Neutral vote(ChaosNil).svg",
tooltip = "Good article reassessment",
link = false,
},
dga = {
image = "Symbol unsupport vote.svg",
tooltip = "Delisted good article",
link = false,
},
gan = {
aliases = {"gac"},
image = "GA candidate.svg",
tooltip = "Good article nominee",
link = false,
},
ga2 = {
image = "Symbol neutral vote.svg",
tooltip = "Good article, 2nd opinion",
link = false,
},
gah = {
image = "Symbol wait.svg",
tooltip = "Good article on hold",
link = false,
},
fgan = {
aliases = {"noga", "gaf", "gf"},
image = "Symbol oppose vote.svg",
tooltip = "Failed good article nominee",
link = false,
},
fp = {
image = "Cscr-featured.svg",
tooltip = "Featured picture",
link = true,
},
fpc = {
aliases = {"fpn"},
image = "Cscr-candidate.svg",
tooltip = "Featured picture candidate",
link = true,
},
ffp = {
image = "Cscr-former.svg",
tooltip = "Former featured picture",
link = true,
},
vp = {
image = "ENWP VP Logo.svg",
tooltip = "Valued picture",
link = true,
},
vpc = {
image = "Valued pics 1.svg",
tooltip = "Valued picture candidate",
link = true,
},
fs = {
image = "Cscr-featured.svg",
tooltip = "Featured sound",
link = true,
},
ffs = {
image = "Cscr-former.svg",
tooltip = "Former featured sound",
link = true,
},
fsc = {
image = "Cscr-candidate.svg",
tooltip = "Featured sound candidate",
link = true,
},
fpo = {
image = "Linecons big-star.svg",
tooltip = "Before the featured portal process ceased in 2017, this had been designated as a featured portal.",
link = true,
},
fpor = {
image = "Cscr-star piece.png",
tooltip = "Featured portal review",
link = true,
},
ffpo = {
image = "Featured article star - cross.svg",
tooltip = "Former featured portal",
link = true,
},
fpoc = {
image = "Cscr-candidate.svg",
tooltip = "Featured portal candidate",
link = true,
},
ft = {
image = "Cscr-featuredtopic.svg",
tooltip = "Featured topic",
link = true,
},
ftrc = {
image = "Cscr-star piece.png",
tooltip = "Featured topic removal candidate",
link = true,
},
fft = {
aliases = {"dft"},
image = "DFT candidate_cluster.svg",
tooltip = "Former featured topic",
link = true,
},
ftc = {
aliases = {"ftn"},
image = "FT candidate cluster.svg",
tooltip = "Featured topic candidate",
link = false,
},
gt = {
image = "Support cluster.svg",
tooltip = "Good topic",
link = false,
},
gtrc = {
image = "Symbol unsupport vote.svg",
tooltip = "Good topic removal candidate",
link = false,
},
gtc = {
aliases = {"gtn"},
image = "GA candidate cluster.svg",
tooltip = "Good topic candidate",
link = false,
},
bplus = {
aliases = {"b+"},
image = "Symbol bplus class.svg",
tooltip = "Bplus-Class article",
link = true,
},
b = {
image = "Symbol b class.svg",
tooltip = "B-Class article",
link = true,
},
br = {
aliases = {"bcr"},
image = "Bclass-checklist.svg",
tooltip = "B-Class review",
link = true,
},
c = {
image = "Symbol c class.svg",
tooltip = "C-Class article",
link = true,
},
start = {
image = "Symbol start class.svg",
tooltip = "Start-Class article",
link = true,
},
stub = {
image = "Symbol stub class.svg",
tooltip = "Stub-Class article",
link = true,
},
list = {
aliases = {"comparison"},
image = "Symbol list class.svg",
tooltip = "List-Class article",
link = false,
},
no = {
image = "Crystal button cancel.svg",
tooltip = "Unknown-Class article",
link = true,
},
book = {
image = "Symbol book class2.svg",
tooltip = "Wikipedia book",
link = true,
},
category = {
aliases = {"cat", "categ"},
image = "Symbol category class.svg",
tooltip = "Category",
link = false,
},
disambiguation = {
aliases = {"dab", "disamb", "disambig"},
image = "Symbol dab class.svg",
tooltip = "Disambiguation page",
link = true,
},
image = {
aliases = {"file"},
image = "Symbol file class.svg",
tooltip = "File",
link = true,
},
needed = {
image = "Symbol needed class.svg",
tooltip = "Needed article",
link = false,
},
outline = {
image = "Global thinking.svg",
tooltip = "Outline",
link = false,
},
portal = {
image = "Symbol portal class.svg",
tooltip = "Portal",
link = true,
},
project = {
image = "Symbol project class.svg",
tooltip = "Project page",
link = false,
},
redirect = {
aliases = {"red", "redir"},
image = "Symbol redirect vote2.svg",
tooltip = "Redirect",
link = true,
},
template = {
aliases = {"temp", "templ"},
image = "Symbol template class.svg",
tooltip = "Template",
link = false,
},
essay = {
image = "Essay.svg",
tooltip = "Essay",
link = false,
},
na = {
image = "Symbol na class.svg",
tooltip = "Non-article page",
link = true,
},
aa = {
image = "Yes check.svg",
tooltip = "Audited article of limited subject matter",
link = false,
},
da = {
image = "Symbol oppose vote.svg",
tooltip = "Demoted article",
link = false,
},
dyk = {
image = "Symbol question.svg",
tooltip = "Did You Know?",
link = false,
},
dyk2 = {
image = "DYK questionmark icon.svg",
tooltip = "Did You Know?",
link = false,
},
pr = {
image = "Nuvola apps kedit.png",
tooltip = "Peer review",
link = true,
},
ppr = {
image = "Nuvola apps kedit.png",
tooltip = "Portal peer review",
link = true,
},
q = {
aliases = {"question"},
image = "Symbol question.svg",
tooltip = "Question",
link = false,
},
cleanup = {
image = "Edit-clear.svg",
tooltip = "Cleanup work",
link = false,
},
qi = {
image = "Quality images logo.svg",
tooltip = "Quality image on Wikimedia Commons",
link = false,
},
vi = {
image = "Valued image seal.svg",
tooltip = "Valued image on Wikimedia Commons",
link = false,
},
tfa = {
image = "Wikipedia-logo.svg",
tooltip = "Today's Featured Article",
link = true,
},
tfl = {
image = "Wikipedia-logo.svg",
tooltip = "Today's Featured List",
link = true,
},
itn = {
image = "Globe current.svg",
tooltip = "In The News",
link = true,
},
otd = {
image = "Nuvola apps date.svg",
tooltip = "On This Day",
link = true,
},
wikiproject = {
image = "People icon.svg",
tooltip = "WikiProject",
link = false,
},
goce = {
image = "Writing Magnifying.PNG",
tooltip = "Guild of Copy Editors",
link = true,
},
wikipedia = {
image = "Wikipedia-logo.svg",
tooltip = "Wikipedia page",
link = true,
},
commons = {
image = "Commons-logo.svg",
tooltip = "Commons page",
link = false,
},
wikiquote = {
image = "Wikiquote-logo.svg",
tooltip = "Wikiquote page",
link = false,
},
wikiversity = {
image = "Wikiversity logo 2017.svg",
tooltip = "Wikiversity page",
link = true,
},
wikibooks = {
image = "Wikibooks-logo.svg",
tooltip = "Wikibooks page",
link = true,
},
wikisource = {
image = "Wikisource-logo.svg",
tooltip = "Wikisource page",
link = true,
},
wiktionary = {
image = "Wiktionary-logo.svg",
tooltip = "Wiktionary page",
link = true,
},
wikinews = {
image = "Wikinews-logo.svg",
tooltip = "Wikinews page",
link = true,
},
wikispecies = {
image = "Wikispecies-logo.svg",
tooltip = "Wikispecies page",
link = true,
},
wikidata = {
image = "Wikidata-logo.svg",
tooltip = "Wikidata page",
link = false,
},
wikivoyage = {
image = "Wikivoyage-logo.svg",
tooltip = "Wikivoyage page",
link = true,
},
mediawiki = {
image = "MediaWiki-2020-icon.svg",
tooltip = "MediaWiki",
link = false,
},
phabricator = {
aliases = {"phab"},
image = "Favicon-Phabricator-WM.svg",
tooltip = "Phabricator",
link = false,
},
wikitech = {
image = "Wikitech-2021-blue-icon.svg",
tooltip = "Wikitech",
link = false,
},
meta = {
image = "Wikimedia Community Logo.svg",
tooltip = "Meta-wiki page",
link = false,
},
four = {
aliases = {"4a"},
image = "Four Award.svg",
tooltip = "Four Award",
link = false,
},
million = {
image = "Million award logo.svg",
tooltip = "Million Award",
link = true,
},
module = {
image = "Lua-logo-nolabel.svg",
tooltip = "Module",
link = false,
},
vital = {
image = "Círculos_Concéntricos.svg",
tooltip = "Vital article",
link = false,
},
potd = {
image = "Wikipedia-logo.svg",
tooltip = "Picture of the Day",
link = true,
},
_DEFAULT = {
image = "Symbol question.svg",
link = false,
}
}
--------------------------------------------------------------------------------
-- End icon data
--------------------------------------------------------------------------------
-- Make aliases work the same as normal keys, and remove the "aliases" subtables.
local ret= {}
for code, iconData in pairs(data) do
iconData.canonicalCode = code
if iconData.aliases then
for _, alias in ipairs(iconData.aliases) do
ret[alias] = iconData
end
iconData.aliases = nil
end
ret[code] = iconData
end
return ret
d8e668d4755103abdbc8325fa35964e99198c29d
Module:Native name
828
240
486
2022-12-08T18:00:44Z
[[w>Izno
0
use module:list, simplify _native_name_list return
Scribunto
text/plain
require('strict');
local getArgs = require ('Module:Arguments').getArgs;
local lang_module = require ('Module:Lang');
local yes_no = require('Module:Yesno')
local defined_values = {
italic = {['no']='no', ['off']='no'}, -- values accepted by |italic= and |italics=; {{lang}} expects 'no' so 'off' must be translated
paren = {['no']=true, ['off']=true, ['omit']=true}, -- values accepted by |paren=
}
local messages_t = {
tag_required = 'an IETF language tag as parameter {{{1}}} is required', -- for {{native name}}
name_required = 'a name as parameter {{{2}}} is required',
tag_required_idx = 'an IETF language tag in |tag%s= is required', -- for {{native name}} when called from {{native name list}}
name_required_idx = 'a name in |name%s= is required',
empty_list = 'list is empty', -- for {{native name list}}
positional = 'positional parameters not supported',
br_list = '<br /> lists not allowed', -- for {{native name checker}}
list_markup = 'list markup expected for multiple names',
malformed_param = 'parameter value is malformed',
}
local help_links_t = {
['native name'] = '[[Template:Native name|help]]',
['native name checker'] = '[[Template:Native name checker|help]]',
['native name list'] = '[[Template:Native name list|help]]',
}
local error_cats_t = {
['native name'] = '[[Category:Native name template errors]]',
['native name checker'] = '[[Category:Native name checker template errors]]',
['native name list'] = '[[Category:Native name list template errors]]',
}
--[[--------------------------< E R R O R _ M S G >------------------------------------------------------------
returns a formatted error message
]]
local function error_msg (msg, template, index)
local cat = ((0 == mw.title.getCurrentTitle().namespace) and error_cats_t[template]) or '';
if index then
local message = string.format (msg, index);
return string.format ('<span style="color:#d33">Error {{%s}}: %s (%s)</span>%s', template, message, help_links_t[template], cat)
end
return string.format ('<span style="color:#d33">Error {{%s}}: %s (%s)</span>%s', template, msg, help_links_t[template], cat)
end
--[=[-------------------------< _ N A T I V E _ N A M E >------------------------------------------------------
implements {{native name}}; entry point from a module
<args_t> is a table of parameter name/value pairs. Parameters that are supported are:
args_t[1] - IETF language tag (required)
args_t[2] - the native name (required)
args_t.italic - accepts string values 'no' or 'off'; {{lang}} expects 'no' so 'off' must be translated
args_t.italics - alias of |italic=
args_t.paren - accepts 'omit', 'off', or 'no'
args_t.icon - alias of paren
args_t.parensize -
args_t.fontsize - deprecated alias of |parensize=
args_t.nolink - any value inhibits wikilinking of language name
args_t.suppress_empty_list_error - when set to 'yes', suppresses an 'empty' error message; mostly for use within another template
this function calls these functions in Module:lang:
_is_ietf_tag
_lang
_name_from_tag
TODO:
add support for romanization and transliteration?
add support for postfix so that 'mis' can render something like this:
{{native|name|mis|Chotilapacquen|parent=omit|postfix= ([[Coahuiltecan languages|Coahuiltecan]])}}
Chotilapacquen (Coahuiltecan)
]=]
local function _native_name (args_t)
local template = (args_t.template and args_t.template) or 'native name'; -- for error messaging; use 'native name list' when called from native_name_list(), etc
if not (args_t[1] or args_t[2]) and yes_no (args_t.suppress_empty_list_error) then
return ''; -- if empty list error is suppressed, return empty string
elseif not args_t[1] then
return error_msg ((args_t.index and messages_t.tag_required_idx) or messages_t.tag_required, template, args_t.index)
elseif not args_t[2] then
return error_msg ((args_t.index and messages_t.name_required_idx) or messages_t.name_required, template, args_t.index)
end
args_t.italic = args_t.italics or args_t.italic; -- plural form first in {{native name}} but singular form for {{lang}}
args_t.italic = defined_values.italic[args_t.italic] or nil; -- translate assigned value
args_t.italics = nil; -- so unset as unneeded
args_t.paren = args_t.paren or args_t.icon;
args_t.icon = nil; -- unset as unneeded
args_t.parensize = args_t.parensize or args_t.fontsize or '100%';
args_t.fontsize = nil; -- unset as unneeded
local out_t = {};
table.insert (out_t, lang_module._lang ({args_t[1], args_t[2], ['italic']=args_t.italic, ['template']=template}));
if not defined_values.paren[args_t.paren] then
table.insert (out_t, ' ');
table.insert (out_t, table.concat ({
'<span class="languageicon" style="font-size:',
args_t.parensize,
'; font-weight:normal">'}));
if args_t.nolink then
table.insert (out_t, table.concat ({'(', lang_module._name_from_tag ({args_t[1], ['template']=template}), ')'}));
else
if lang_module._is_ietf_tag (args_t[1]) then
table.insert (out_t, table.concat ({'(', lang_module._name_from_tag ({args_t[1], ['link'] ='yes', ['template']=template}), ')'}));
else
table.insert (out_t, '(language?)'); -- TODO: any reason to keep this?
end
end
table.insert (out_t, '</span>');
end
return table.concat (out_t);
end
--[[--------------------------< N A T I V E _ N A M E >--------------------------------------------------------
implements {{native name}}; entry point from the template
{{#invoke:native name|native_name|<tag>|<name>|italic=|paren=|parensize=|nolink=}}
]]
local function native_name (frame)
return _native_name (getArgs (frame));
end
--[[--------------------------> _ N A T I V E _ N A M E _ L I S T >--------------------------------------------
implements {{native name}}; entry point from a module
<args_t> is a table of parameter name/value pairs. Supports enumerated forms of the {{native name}} parameters:
args_t.tagn - IETF language tag (|tag1= required)
args_t.namen - the native name (|name1= required)
args_t.italicn - accepts string values 'no' or 'off'
args_t.italicsn - alias of |italicn=
args_t.parenn - accepts 'omit', 'off', or 'no'
args_t.iconn - alias of paren
args_t.parensizen -
args_t.fontsizen - deprecated alias of |parensizen=
args_t.nolinkn - any value inhibits wikilinking of language name
also supports:
args_t.postfixn - wikitext to be appended to list item n (references other appropriate text)
args_t.suppress_empty_list_error - when set to 'yes', suppresses an 'empty list' error message; mostly for use within another template
]]
local function _native_name_list (args_t)
if args_t[1] then
return error_msg (messages_t.positional, 'native name list')
end
local unsorted_enumerators_t = {} -- unsorted k/v table of tagn and namen enumerators where k is the enumerator and v is always true
for param, _ in pairs (args_t) do -- loop through all parameters
local enumerator = mw.ustring.match (param, "^tag(%d+)$") -- is this a |tagn= parameter? extract enumerator if present
if enumerator then -- if there is an enumerator
unsorted_enumerators_t[tonumber(enumerator)] = true -- add enumerator to the table
else
local name_match = mw.ustring.match (param, "^name(%d+)$") -- is this a |tagn= parameter? extract enumerator if present
if name_match then -- if there is an enumerator
unsorted_enumerators_t[tonumber (name_match)] = true -- add enumerator to the table
end
end
end
local enumerators_t = {} -- will hold a sorted sequence of enumerators
for n, _ in pairs (unsorted_enumerators_t) do -- loop through the k/v table of enumerators
table.insert (enumerators_t, n) -- add the enumerator to the sequence
end
table.sort (enumerators_t) -- and ascending sort
local list_t = {}; -- list of formatted native names goes here
for _, n in ipairs (enumerators_t) do -- loop through the sorted enumerators
table.insert (list_t, table.concat ({
_native_name ({ -- go render the native name
args_t['tag'..n],
args_t['name'..n],
['italic'] = args_t['italic'..n],
['italics'] = args_t['italics'..n],
['paren'] = args_t['paren'..n],
['icon'] = args_t['icon'..n],
['parensize'] = args_t['parensize'..n],
['fontsize'] = args_t['fontsize'..n],
['nolink'] = args_t['nolink'..n],
['template'] = 'native name list', -- for error messaging
['index'] = n, -- for error messaging
}),
args_t['postfix'..n] or '',
}));
end
if 0 == #list_t then
return (yes_no (args_t.suppress_empty_list_error) and '') or -- return empty string when error suppressed
error_msg (messages_t.empty_list, 'native name list'); -- otherwise error
elseif 1 == #list_t then
return list_t[1]; -- return the very short list; TODO: add error?
else
return require ('Module:List').unbulleted (list_t); -- use unbulleted list from module
end
end
--[[--------------------------< N A T I V E _ N A M E _ L I S T >----------------------------------------------
implements {{native name list}}; entry point from the template
{{#invoke:native name list|native_name_list|tag1=<tag>|name1=<name>|italic1=|paren1=|parensize1=|nolink1=}}
]]
local function native_name_list (frame)
return _native_name_list (getArgs (frame));
end
--[[--------------------------< _ N A T I V E _ N A M E _ C H E C K E R >--------------------------------------
entry point from a module
implements {{native name checker}}
for use inside infoboxen:
|dataxx = {{native name checker|{{{native_name|}}}}}
inspects rendered content of {{{native_name}}}:
expects: at least one lang="<valid IETF tag>" html attribute; tag must begin with 2 or three letters followed
by a hyphen or double quote character: lang="zh-Hant" or lang="nav" or lang="oj"
emits error message when 2 or more lang="<valid IETF tag>" html attribute but list markup <li> tag not found
emits error message if any form of '<br />' tag is found per MOS:NOBREAK
returns:
nothing when |native_name= is omitted or empty
assigned value when no error
error message on error
]]
local function _native_name_checker (args_t)
local value = args_t[1];
if not value then -- if |native_name= is omitted or empty
return; -- return nothing
end
local _, count = value:gsub ('lang="%a%a%a?[%-"]%a*', '%1');
if 0 == count then
return table.concat ({value, error_msg (messages_t.malformed_param, 'native name checker')}, ' '); -- no {{lang}} or {{native_name}} template
end
if 1 < count then
if not value:find ('<div class="plainlist *" *>') or not value:find ('</div>$') then -- must be wrapped in 'plainlist' div
return table.concat ({value, error_msg (messages_t.list_markup, 'native name checker')}, ' ');
end
end
if value:find ('< */? *[Bb][Rr] */? *>') then -- look for something that vaguely resembles a <br /> tag
return table.concat ({value, error_msg (messages_t.br_list, 'native name checker')}, ' ');
end
return value; -- no failed tests, return the value as is
end
--[[--------------------------< N A T I V E _ N A M E _ C H E C K E R >--------------------------------------
entry point from a module
implements {{native name checker}}
]]
local function native_name_checker (frame)
return _native_name_checker (getArgs (frame));
end
--[[--------------------------< E X P O R T S >----------------------------------------------------------------
]]
return {
native_name = native_name, -- template interface
native_name_list = native_name_list,
native_name_checker = native_name_checker,
_native_name = _native_name, -- other module interface
_native_name_list = _native_name_list,
_native_name_checker = _native_name_checker,
}
b58f845623d3e920e8098e96bd84a56d2d3079bb
Template:Mlx
10
300
606
2022-12-10T23:52:31Z
[[w>HouseBlaster
0
HouseBlaster moved page [[Template:Mlx]] to [[Template:Module link expanded]]: harmonize with [[Template:template link expanded]]
wikitext
text/x-wiki
#REDIRECT [[Template:Module link expanded]]
{{Redirect category shell|
{{R from move}}
}}
3a80cf77e735d41b1611f1bd7f028ce9941330a2
Template:Hidden end
10
232
470
2022-12-12T14:54:45Z
[[w>Terasail
0
Only noinclude once
wikitext
text/x-wiki
<includeonly></div></div></includeonly><noinclude>
{{hatnote|Templates {{noredirect|Template:End hidden|End hidden}} and {{noredirect|Template:End hidden section|End hidden section}} redirect here.}}
{{Documentation|Template:Hidden begin/doc}}
</noinclude>
6cc7eb4776ef10092d5f7d48da123117e7b430b2
Template:Plainlist
10
208
422
2022-12-12T22:45:26Z
[[w>Izno
0
add tstyles here
wikitext
text/x-wiki
<templatestyles src="Plainlist/styles.css"/><div class="plainlist {{{class|}}}" {{#if:{{{style|}}}{{{indent|}}}|style="{{#if:{{{indent|}}}|margin-left: {{#expr:{{{indent}}}*1.6}}em;}} {{{style|}}}"}}>{{#if:{{{1|}}}|
{{{1}}}
</div>}}<noinclude></div>
{{documentation}}
</noinclude>
582fe7098c25c1ecfc0ad32f62ecd674ebe2bdf0
Module:Side box
828
304
614
2022-12-13T04:33:19Z
[[w>Izno
0
we cookin with plainlist templatestyles now
Scribunto
text/plain
local yesno = require('Module:Yesno')
local p = {}
local function makeData(args)
local data = {}
-- Main table classes
data.classes = {}
if yesno(args.metadata) ~= false then
table.insert(data.classes, 'metadata')
end
if args.position and args.position:lower() == 'left' then
table.insert(data.classes, 'side-box-left')
else
table.insert(data.classes, 'side-box-right')
end
if args.collapsible then
table.insert(data.classes, 'mw-collapsible')
if args.collapsible == "collapsed" then
table.insert(data.classes, 'mw-collapsed')
end
data.collapsible = true
end
table.insert(data.classes, args.class)
-- Image
if args.image and args.image ~= 'none' then
data.image = args.image
end
-- we have to check to see if a downstream use has plainlist like
-- Template:Sister_project. also it's the default. wikitext is :(
if args.textclass == 'plainlist' or not args.textclass then
data.textclass = 'plainlist'
data.plainlist_templatestyles = 'Plainlist/styles.css'
else
data.textclass = args.textclass
end
-- Copy over data that does not need adjusting
local argsToCopy = {
-- aria qualities
'role',
'labelledby',
-- Styles
'style',
'textstyle',
'templatestyles',
-- Above row
'above',
'abovestyle',
-- Body row
'text',
'imageright',
-- Below row
'below',
}
for i, key in ipairs(argsToCopy) do
data[key] = args[key]
end
return data
end
local function renderSidebox(data)
-- Renders the sidebox HTML.
-- Table root
local root = mw.html.create('div')
root:attr('role', data.role)
:attr('aria-labelledby', data.labelledby)
:addClass('side-box')
for i, class in ipairs(data.classes or {}) do
root:addClass(class)
end
if data.style then
root:cssText(data.style)
end
local frame = mw.getCurrentFrame()
if data.plainlist_templatestyles then
root:wikitext(frame:extensionTag{
name = 'templatestyles', args = { src = data.plainlist_templatestyles }
})
end
-- The "above" row
if data.above then
local above = root:newline():tag('div')
above:addClass('side-box-abovebelow')
:newline()
:wikitext(data.above)
if data.textstyle then
above:cssText(data.textstyle)
end
if data.abovestyle then
above:cssText(data.abovestyle)
end
end
-- The body row
local body = root:newline():tag('div')
body:addClass('side-box-flex')
:addClass(data.collapsible and 'mw-collapsible-content')
:newline()
if data.image then
body:tag('div')
:addClass('side-box-image')
:wikitext(data.image)
end
local text = body:newline():tag('div')
text:addClass('side-box-text')
:addClass(data.textclass)
if data.textstyle then
text:cssText(data.textstyle)
end
text:wikitext(data.text)
if data.imageright then
body:newline():tag('div')
:addClass('side-box-imageright')
:wikitext(data.imageright)
end
-- The below row
if data.below then
local below = root:newline():tag('div')
below
:addClass('side-box-abovebelow')
:wikitext(data.below)
if data.textstyle then
below:cssText(data.textstyle)
end
end
root:newline()
local templatestyles = ''
if data.templatestyles then
templatestyles = frame:extensionTag{
name = 'templatestyles', args = { src = data.templatestyles }
}
end
return frame:extensionTag{
name = 'templatestyles', args = { src = 'Module:Side box/styles.css' }
} .. templatestyles .. tostring(root)
end
function p._main(args)
local data = makeData(args)
return renderSidebox(data)
end
function p.main(frame)
local origArgs = frame:getParent().args
local args = {}
for k, v in pairs(origArgs) do
v = v:match('%s*(.-)%s*$')
if v ~= '' then
args[k] = v
end
end
return p._main(args)
end
return p
096bef4a3721857fc16eb509a4f8d75973484485
Template:Hidden begin
10
231
468
2022-12-13T16:00:54Z
[[w>Terasail
0
Remove tracking now that parameters have been removed from transclusions
wikitext
text/x-wiki
<includeonly><templatestyles src="Template:Hidden begin/styles.css"/><div class="hidden-begin mw-collapsible {{#ifeq:{{{showhide|{{{toggle}}}}}}|left|mw-collapsible-leftside-toggle}} {{#if:{{{expanded|}}}||mw-collapsed}} {{{class|}}}" style="{{#if:{{{width|}}}|width:{{{width}}};}} {{#if:{{{border|}}}|border:{{{border}}};}} {{#if:{{{bgcolor|}}}|background-color:{{{bgcolor}}};}} {{{style|}}}"><!--
--><div class="hidden-title" style="{{#if:{{{ta1|}}}|text-align:{{{ta1}}};}} {{#if:{{{titlebgcolor|}}}|background-color:{{{titlebgcolor}}};}} {{{titlestyle|}}}">{{{title|{{{header|}}}}}}</div><!--
--><div class="hidden-content mw-collapsible-content" style="{{#if:{{{ta2|}}}|text-align:{{{ta2}}};}} {{#if:{{{contentbgcolor|}}}|background-color:{{{contentbgcolor}}};}} {{{contentstyle|{{{bodystyle|}}}}}}"><!--
Content added after the template
--></includeonly><noinclude>
{{Documentation}}
</noinclude>
be0f4e092203b931810fbff9ed6a1b7af51c025f
Template:Hlist/styles.css
10
318
695
2022-12-26T18:00:17Z
[[]]>Izno
0
actually remove that block, someone can dig for authorship
sanitized-css
text/css
/* {{pp-protected|reason=match parent|small=yes}} */
/*
* hlist styles are defined in core and Minerva and differ in Minerva. The
* current definitions here (2023-01-01) are sufficient to override Minerva
* without use of the hlist-separated class. The most problematic styles were
* related to margin, padding, and the bullet. Check files listed at
* [[MediaWiki talk:Common.css/to do#hlist-separated]]
*/
/*
* TODO: When the majority of readership supports it (or some beautiful world
* in which grade C support is above the minimum threshold), use :is()
*/
.hlist dl,
.hlist ol,
.hlist ul {
margin: 0;
padding: 0;
}
/* Display list items inline */
.hlist dd,
.hlist dt,
.hlist li {
/*
* don't trust the note that says margin doesn't work with inline
* removing margin: 0 makes dds have margins again
* We also want to reset margin-right in Minerva
*/
margin: 0;
display: inline;
}
/* Display requested top-level lists inline */
.hlist.inline,
.hlist.inline dl,
.hlist.inline ol,
.hlist.inline ul,
/* Display nested lists inline */
.hlist dl dl,
.hlist dl ol,
.hlist dl ul,
.hlist ol dl,
.hlist ol ol,
.hlist ol ul,
.hlist ul dl,
.hlist ul ol,
.hlist ul ul {
display: inline;
}
/* Hide empty list items */
.hlist .mw-empty-li {
display: none;
}
/* TODO: :not() can maybe be used here to remove the later rule. naive test
* seems to work. more testing needed. like so:
*.hlist dt:not(:last-child)::after {
* content: ": ";
*}
*.hlist dd:not(:last-child)::after,
*.hlist li:not(:last-child)::after {
* content: " · ";
* font-weight: bold;
*}
*/
/* Generate interpuncts */
.hlist dt::after {
content: ": ";
}
.hlist dd::after,
.hlist li::after {
content: " · ";
font-weight: bold;
}
.hlist dd:last-child::after,
.hlist dt:last-child::after,
.hlist li:last-child::after {
content: none;
}
/* Add parentheses around nested lists */
.hlist dd dd:first-child::before,
.hlist dd dt:first-child::before,
.hlist dd li:first-child::before,
.hlist dt dd:first-child::before,
.hlist dt dt:first-child::before,
.hlist dt li:first-child::before,
.hlist li dd:first-child::before,
.hlist li dt:first-child::before,
.hlist li li:first-child::before {
content: " (";
font-weight: normal;
}
.hlist dd dd:last-child::after,
.hlist dd dt:last-child::after,
.hlist dd li:last-child::after,
.hlist dt dd:last-child::after,
.hlist dt dt:last-child::after,
.hlist dt li:last-child::after,
.hlist li dd:last-child::after,
.hlist li dt:last-child::after,
.hlist li li:last-child::after {
content: ")";
font-weight: normal;
}
/* Put ordinals in front of ordered list items */
.hlist ol {
counter-reset: listitem;
}
.hlist ol > li {
counter-increment: listitem;
}
.hlist ol > li::before {
content: " " counter(listitem) "\a0";
}
.hlist dd ol > li:first-child::before,
.hlist dt ol > li:first-child::before,
.hlist li ol > li:first-child::before {
content: " (" counter(listitem) "\a0";
}
8c9dd9c9c00f30eead17fe10f51d183333e81f33
Module:Infobox
828
14
32
2022-12-27T21:29:12Z
[[w>Izno
0
merge hlist here
Scribunto
text/plain
local p = {}
local args = {}
local origArgs = {}
local root
local empty_row_categories = {}
local category_in_empty_row_pattern = '%[%[%s*[Cc][Aa][Tt][Ee][Gg][Oo][Rr][Yy]%s*:[^]]*]]'
local has_rows = false
local lists = {
plainlist_t = {
patterns = {
'^plainlist$',
'%splainlist$',
'^plainlist%s',
'%splainlist%s'
},
found = false,
styles = 'Plainlist/styles.css'
},
hlist_t = {
patterns = {
'^hlist$',
'%shlist$',
'^hlist%s',
'%shlist%s'
},
found = false,
styles = 'Hlist/styles.css'
}
}
local function has_list_class(args_to_check)
for _, list in pairs(lists) do
if not list.found then
for _, arg in pairs(args_to_check) do
for _, pattern in ipairs(list.patterns) do
if mw.ustring.find(arg or '', pattern) then
list.found = true
break
end
end
if list.found then break end
end
end
end
end
local function fixChildBoxes(sval, tt)
local function notempty( s ) return s and s:match( '%S' ) end
if notempty(sval) then
local marker = '<span class=special_infobox_marker>'
local s = sval
-- start moving templatestyles and categories inside of table rows
local slast = ''
while slast ~= s do
slast = s
s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>%s*)(%[%[%s*[Cc][Aa][Tt][Ee][Gg][Oo][Rr][Yy]%s*:[^]]*%]%])', '%2%1')
s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>%s*)(\127[^\127]*UNIQ%-%-templatestyles%-%x+%-QINU[^\127]*\127)', '%2%1')
end
-- end moving templatestyles and categories inside of table rows
s = mw.ustring.gsub(s, '(<%s*[Tt][Rr])', marker .. '%1')
s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>)', '%1' .. marker)
if s:match(marker) then
s = mw.ustring.gsub(s, marker .. '%s*' .. marker, '')
s = mw.ustring.gsub(s, '([\r\n]|-[^\r\n]*[\r\n])%s*' .. marker, '%1')
s = mw.ustring.gsub(s, marker .. '%s*([\r\n]|-)', '%1')
s = mw.ustring.gsub(s, '(</[Cc][Aa][Pp][Tt][Ii][Oo][Nn]%s*>%s*)' .. marker, '%1')
s = mw.ustring.gsub(s, '(<%s*[Tt][Aa][Bb][Ll][Ee][^<>]*>%s*)' .. marker, '%1')
s = mw.ustring.gsub(s, '^(%{|[^\r\n]*[\r\n]%s*)' .. marker, '%1')
s = mw.ustring.gsub(s, '([\r\n]%{|[^\r\n]*[\r\n]%s*)' .. marker, '%1')
s = mw.ustring.gsub(s, marker .. '(%s*</[Tt][Aa][Bb][Ll][Ee]%s*>)', '%1')
s = mw.ustring.gsub(s, marker .. '(%s*\n|%})', '%1')
end
if s:match(marker) then
local subcells = mw.text.split(s, marker)
s = ''
for k = 1, #subcells do
if k == 1 then
s = s .. subcells[k] .. '</' .. tt .. '></tr>'
elseif k == #subcells then
local rowstyle = ' style="display:none"'
if notempty(subcells[k]) then rowstyle = '' end
s = s .. '<tr' .. rowstyle ..'><' .. tt .. ' colspan=2>\n' ..
subcells[k]
elseif notempty(subcells[k]) then
if (k % 2) == 0 then
s = s .. subcells[k]
else
s = s .. '<tr><' .. tt .. ' colspan=2>\n' ..
subcells[k] .. '</' .. tt .. '></tr>'
end
end
end
end
-- the next two lines add a newline at the end of lists for the PHP parser
-- [[Special:Diff/849054481]]
-- remove when [[:phab:T191516]] is fixed or OBE
s = mw.ustring.gsub(s, '([\r\n][%*#;:][^\r\n]*)$', '%1\n')
s = mw.ustring.gsub(s, '^([%*#;:][^\r\n]*)$', '%1\n')
s = mw.ustring.gsub(s, '^([%*#;:])', '\n%1')
s = mw.ustring.gsub(s, '^(%{%|)', '\n%1')
return s
else
return sval
end
end
-- Cleans empty tables
local function cleanInfobox()
root = tostring(root)
if has_rows == false then
root = mw.ustring.gsub(root, '<table[^<>]*>%s*</table>', '')
end
end
-- Returns the union of the values of two tables, as a sequence.
local function union(t1, t2)
local vals = {}
for k, v in pairs(t1) do
vals[v] = true
end
for k, v in pairs(t2) do
vals[v] = true
end
local ret = {}
for k, v in pairs(vals) do
table.insert(ret, k)
end
return ret
end
-- Returns a table containing the numbers of the arguments that exist
-- for the specified prefix. For example, if the prefix was 'data', and
-- 'data1', 'data2', and 'data5' exist, it would return {1, 2, 5}.
local function getArgNums(prefix)
local nums = {}
for k, v in pairs(args) do
local num = tostring(k):match('^' .. prefix .. '([1-9]%d*)$')
if num then table.insert(nums, tonumber(num)) end
end
table.sort(nums)
return nums
end
-- Adds a row to the infobox, with either a header cell
-- or a label/data cell combination.
local function addRow(rowArgs)
if rowArgs.header and rowArgs.header ~= '_BLANK_' then
has_rows = true
has_list_class({ rowArgs.rowclass, rowArgs.class, args.headerclass })
root
:tag('tr')
:addClass(rowArgs.rowclass)
:cssText(rowArgs.rowstyle)
:tag('th')
:attr('colspan', '2')
:addClass('infobox-header')
:addClass(rowArgs.class)
:addClass(args.headerclass)
-- @deprecated next; target .infobox-<name> .infobox-header
:cssText(args.headerstyle)
:cssText(rowArgs.rowcellstyle)
:wikitext(fixChildBoxes(rowArgs.header, 'th'))
if rowArgs.data then
root:wikitext(
'[[Category:Pages using infobox templates with ignored data cells]]'
)
end
elseif rowArgs.data and rowArgs.data:gsub(category_in_empty_row_pattern, ''):match('^%S') then
has_rows = true
has_list_class({ rowArgs.rowclass, rowArgs.class })
local row = root:tag('tr')
row:addClass(rowArgs.rowclass)
row:cssText(rowArgs.rowstyle)
if rowArgs.label then
row
:tag('th')
:attr('scope', 'row')
:addClass('infobox-label')
-- @deprecated next; target .infobox-<name> .infobox-label
:cssText(args.labelstyle)
:cssText(rowArgs.rowcellstyle)
:wikitext(rowArgs.label)
:done()
end
local dataCell = row:tag('td')
dataCell
:attr('colspan', not rowArgs.label and '2' or nil)
:addClass(not rowArgs.label and 'infobox-full-data' or 'infobox-data')
:addClass(rowArgs.class)
-- @deprecated next; target .infobox-<name> .infobox(-full)-data
:cssText(rowArgs.datastyle)
:cssText(rowArgs.rowcellstyle)
:wikitext(fixChildBoxes(rowArgs.data, 'td'))
else
table.insert(empty_row_categories, rowArgs.data or '')
end
end
local function renderTitle()
if not args.title then return end
has_rows = true
has_list_class({args.titleclass})
root
:tag('caption')
:addClass('infobox-title')
:addClass(args.titleclass)
-- @deprecated next; target .infobox-<name> .infobox-title
:cssText(args.titlestyle)
:wikitext(args.title)
end
local function renderAboveRow()
if not args.above then return end
has_rows = true
has_list_class({ args.aboveclass })
root
:tag('tr')
:tag('th')
:attr('colspan', '2')
:addClass('infobox-above')
:addClass(args.aboveclass)
-- @deprecated next; target .infobox-<name> .infobox-above
:cssText(args.abovestyle)
:wikitext(fixChildBoxes(args.above,'th'))
end
local function renderBelowRow()
if not args.below then return end
has_rows = true
has_list_class({ args.belowclass })
root
:tag('tr')
:tag('td')
:attr('colspan', '2')
:addClass('infobox-below')
:addClass(args.belowclass)
-- @deprecated next; target .infobox-<name> .infobox-below
:cssText(args.belowstyle)
:wikitext(fixChildBoxes(args.below,'td'))
end
local function addSubheaderRow(subheaderArgs)
if subheaderArgs.data and
subheaderArgs.data:gsub(category_in_empty_row_pattern, ''):match('^%S') then
has_rows = true
has_list_class({ subheaderArgs.rowclass, subheaderArgs.class })
local row = root:tag('tr')
row:addClass(subheaderArgs.rowclass)
local dataCell = row:tag('td')
dataCell
:attr('colspan', '2')
:addClass('infobox-subheader')
:addClass(subheaderArgs.class)
:cssText(subheaderArgs.datastyle)
:cssText(subheaderArgs.rowcellstyle)
:wikitext(fixChildBoxes(subheaderArgs.data, 'td'))
else
table.insert(empty_row_categories, subheaderArgs.data or '')
end
end
local function renderSubheaders()
if args.subheader then
args.subheader1 = args.subheader
end
if args.subheaderrowclass then
args.subheaderrowclass1 = args.subheaderrowclass
end
local subheadernums = getArgNums('subheader')
for k, num in ipairs(subheadernums) do
addSubheaderRow({
data = args['subheader' .. tostring(num)],
-- @deprecated next; target .infobox-<name> .infobox-subheader
datastyle = args.subheaderstyle,
rowcellstyle = args['subheaderstyle' .. tostring(num)],
class = args.subheaderclass,
rowclass = args['subheaderrowclass' .. tostring(num)]
})
end
end
local function addImageRow(imageArgs)
if imageArgs.data and
imageArgs.data:gsub(category_in_empty_row_pattern, ''):match('^%S') then
has_rows = true
has_list_class({ imageArgs.rowclass, imageArgs.class })
local row = root:tag('tr')
row:addClass(imageArgs.rowclass)
local dataCell = row:tag('td')
dataCell
:attr('colspan', '2')
:addClass('infobox-image')
:addClass(imageArgs.class)
:cssText(imageArgs.datastyle)
:wikitext(fixChildBoxes(imageArgs.data, 'td'))
else
table.insert(empty_row_categories, imageArgs.data or '')
end
end
local function renderImages()
if args.image then
args.image1 = args.image
end
if args.caption then
args.caption1 = args.caption
end
local imagenums = getArgNums('image')
for k, num in ipairs(imagenums) do
local caption = args['caption' .. tostring(num)]
local data = mw.html.create():wikitext(args['image' .. tostring(num)])
if caption then
data
:tag('div')
:addClass('infobox-caption')
-- @deprecated next; target .infobox-<name> .infobox-caption
:cssText(args.captionstyle)
:wikitext(caption)
end
addImageRow({
data = tostring(data),
-- @deprecated next; target .infobox-<name> .infobox-image
datastyle = args.imagestyle,
class = args.imageclass,
rowclass = args['imagerowclass' .. tostring(num)]
})
end
end
-- When autoheaders are turned on, preprocesses the rows
local function preprocessRows()
if not args.autoheaders then return end
local rownums = union(getArgNums('header'), getArgNums('data'))
table.sort(rownums)
local lastheader
for k, num in ipairs(rownums) do
if args['header' .. tostring(num)] then
if lastheader then
args['header' .. tostring(lastheader)] = nil
end
lastheader = num
elseif args['data' .. tostring(num)] and
args['data' .. tostring(num)]:gsub(
category_in_empty_row_pattern, ''
):match('^%S') then
local data = args['data' .. tostring(num)]
if data:gsub(category_in_empty_row_pattern, ''):match('%S') then
lastheader = nil
end
end
end
if lastheader then
args['header' .. tostring(lastheader)] = nil
end
end
-- Gets the union of the header and data argument numbers,
-- and renders them all in order
local function renderRows()
local rownums = union(getArgNums('header'), getArgNums('data'))
table.sort(rownums)
for k, num in ipairs(rownums) do
addRow({
header = args['header' .. tostring(num)],
label = args['label' .. tostring(num)],
data = args['data' .. tostring(num)],
datastyle = args.datastyle,
class = args['class' .. tostring(num)],
rowclass = args['rowclass' .. tostring(num)],
-- @deprecated next; target .infobox-<name> rowclass
rowstyle = args['rowstyle' .. tostring(num)],
rowcellstyle = args['rowcellstyle' .. tostring(num)]
})
end
end
local function renderNavBar()
if not args.name then return end
has_rows = true
root
:tag('tr')
:tag('td')
:attr('colspan', '2')
:addClass('infobox-navbar')
:wikitext(require('Module:Navbar')._navbar{
args.name,
mini = 1,
})
end
local function renderItalicTitle()
local italicTitle = args['italic title'] and mw.ustring.lower(args['italic title'])
if italicTitle == '' or italicTitle == 'force' or italicTitle == 'yes' then
root:wikitext(require('Module:Italic title')._main({}))
end
end
-- Categories in otherwise empty rows are collected in empty_row_categories.
-- This function adds them to the module output. It is not affected by
-- args.decat because this module should not prevent module-external categories
-- from rendering.
local function renderEmptyRowCategories()
for _, s in ipairs(empty_row_categories) do
root:wikitext(s)
end
end
-- Render tracking categories. args.decat == turns off tracking categories.
local function renderTrackingCategories()
if args.decat == 'yes' then return end
if args.child == 'yes' then
if args.title then
root:wikitext(
'[[Category:Pages using embedded infobox templates with the title parameter]]'
)
end
elseif #(getArgNums('data')) == 0 and mw.title.getCurrentTitle().namespace == 0 then
root:wikitext('[[Category:Articles using infobox templates with no data rows]]')
end
end
--[=[
Loads the templatestyles for the infobox.
TODO: FINISH loading base templatestyles here rather than in
MediaWiki:Common.css. There are 4-5000 pages with 'raw' infobox tables.
See [[Mediawiki_talk:Common.css/to_do#Infobox]] and/or come help :).
When we do this we should clean up the inline CSS below too.
Will have to do some bizarre conversion category like with sidebar.
]=]
local function loadTemplateStyles()
local frame = mw.getCurrentFrame()
local hlist_templatestyles = ''
if lists.hlist_t.found then
hlist_templatestyles = frame:extensionTag{
name = 'templatestyles', args = { src = lists.hlist_t.styles }
}
end
local plainlist_templatestyles = ''
if lists.plainlist_t.found then
plainlist_templatestyles = frame:extensionTag{
name = 'templatestyles', args = { src = lists.plainlist_t.styles }
}
end
-- See function description
local base_templatestyles = frame:extensionTag{
name = 'templatestyles', args = { src = 'Module:Infobox/styles.css' }
}
local templatestyles = ''
if args['templatestyles'] then
templatestyles = frame:extensionTag{
name = 'templatestyles', args = { src = args['templatestyles'] }
}
end
local child_templatestyles = ''
if args['child templatestyles'] then
child_templatestyles = frame:extensionTag{
name = 'templatestyles', args = { src = args['child templatestyles'] }
}
end
local grandchild_templatestyles = ''
if args['grandchild templatestyles'] then
grandchild_templatestyles = frame:extensionTag{
name = 'templatestyles', args = { src = args['grandchild templatestyles'] }
}
end
return table.concat({
-- hlist -> plainlist -> base is best-effort to preserve old Common.css ordering.
-- this ordering is not a guarantee because the rows of interest invoking
-- each class may not be on a specific page
hlist_templatestyles,
plainlist_templatestyles,
base_templatestyles,
templatestyles,
child_templatestyles,
grandchild_templatestyles
})
end
-- common functions between the child and non child cases
local function structure_infobox_common()
renderSubheaders()
renderImages()
preprocessRows()
renderRows()
renderBelowRow()
renderNavBar()
renderItalicTitle()
renderEmptyRowCategories()
renderTrackingCategories()
cleanInfobox()
end
-- Specify the overall layout of the infobox, with special settings if the
-- infobox is used as a 'child' inside another infobox.
local function _infobox()
if args.child ~= 'yes' then
root = mw.html.create('table')
root
:addClass(args.subbox == 'yes' and 'infobox-subbox' or 'infobox')
:addClass(args.bodyclass)
-- @deprecated next; target .infobox-<name>
:cssText(args.bodystyle)
has_list_class({ args.bodyclass })
renderTitle()
renderAboveRow()
else
root = mw.html.create()
root
:wikitext(args.title)
end
structure_infobox_common()
return loadTemplateStyles() .. root
end
-- If the argument exists and isn't blank, add it to the argument table.
-- Blank arguments are treated as nil to match the behaviour of ParserFunctions.
local function preprocessSingleArg(argName)
if origArgs[argName] and origArgs[argName] ~= '' then
args[argName] = origArgs[argName]
end
end
-- Assign the parameters with the given prefixes to the args table, in order, in
-- batches of the step size specified. This is to prevent references etc. from
-- appearing in the wrong order. The prefixTable should be an array containing
-- tables, each of which has two possible fields, a "prefix" string and a
-- "depend" table. The function always parses parameters containing the "prefix"
-- string, but only parses parameters in the "depend" table if the prefix
-- parameter is present and non-blank.
local function preprocessArgs(prefixTable, step)
if type(prefixTable) ~= 'table' then
error("Non-table value detected for the prefix table", 2)
end
if type(step) ~= 'number' then
error("Invalid step value detected", 2)
end
-- Get arguments without a number suffix, and check for bad input.
for i,v in ipairs(prefixTable) do
if type(v) ~= 'table' or type(v.prefix) ~= "string" or
(v.depend and type(v.depend) ~= 'table') then
error('Invalid input detected to preprocessArgs prefix table', 2)
end
preprocessSingleArg(v.prefix)
-- Only parse the depend parameter if the prefix parameter is present
-- and not blank.
if args[v.prefix] and v.depend then
for j, dependValue in ipairs(v.depend) do
if type(dependValue) ~= 'string' then
error('Invalid "depend" parameter value detected in preprocessArgs')
end
preprocessSingleArg(dependValue)
end
end
end
-- Get arguments with number suffixes.
local a = 1 -- Counter variable.
local moreArgumentsExist = true
while moreArgumentsExist == true do
moreArgumentsExist = false
for i = a, a + step - 1 do
for j,v in ipairs(prefixTable) do
local prefixArgName = v.prefix .. tostring(i)
if origArgs[prefixArgName] then
-- Do another loop if any arguments are found, even blank ones.
moreArgumentsExist = true
preprocessSingleArg(prefixArgName)
end
-- Process the depend table if the prefix argument is present
-- and not blank, or we are processing "prefix1" and "prefix" is
-- present and not blank, and if the depend table is present.
if v.depend and (args[prefixArgName] or (i == 1 and args[v.prefix])) then
for j,dependValue in ipairs(v.depend) do
local dependArgName = dependValue .. tostring(i)
preprocessSingleArg(dependArgName)
end
end
end
end
a = a + step
end
end
-- Parse the data parameters in the same order that the old {{infobox}} did, so
-- that references etc. will display in the expected places. Parameters that
-- depend on another parameter are only processed if that parameter is present,
-- to avoid phantom references appearing in article reference lists.
local function parseDataParameters()
preprocessSingleArg('autoheaders')
preprocessSingleArg('child')
preprocessSingleArg('bodyclass')
preprocessSingleArg('subbox')
preprocessSingleArg('bodystyle')
preprocessSingleArg('title')
preprocessSingleArg('titleclass')
preprocessSingleArg('titlestyle')
preprocessSingleArg('above')
preprocessSingleArg('aboveclass')
preprocessSingleArg('abovestyle')
preprocessArgs({
{prefix = 'subheader', depend = {'subheaderstyle', 'subheaderrowclass'}}
}, 10)
preprocessSingleArg('subheaderstyle')
preprocessSingleArg('subheaderclass')
preprocessArgs({
{prefix = 'image', depend = {'caption', 'imagerowclass'}}
}, 10)
preprocessSingleArg('captionstyle')
preprocessSingleArg('imagestyle')
preprocessSingleArg('imageclass')
preprocessArgs({
{prefix = 'header'},
{prefix = 'data', depend = {'label'}},
{prefix = 'rowclass'},
{prefix = 'rowstyle'},
{prefix = 'rowcellstyle'},
{prefix = 'class'}
}, 50)
preprocessSingleArg('headerclass')
preprocessSingleArg('headerstyle')
preprocessSingleArg('labelstyle')
preprocessSingleArg('datastyle')
preprocessSingleArg('below')
preprocessSingleArg('belowclass')
preprocessSingleArg('belowstyle')
preprocessSingleArg('name')
-- different behaviour for italics if blank or absent
args['italic title'] = origArgs['italic title']
preprocessSingleArg('decat')
preprocessSingleArg('templatestyles')
preprocessSingleArg('child templatestyles')
preprocessSingleArg('grandchild templatestyles')
end
-- If called via #invoke, use the args passed into the invoking template.
-- Otherwise, for testing purposes, assume args are being passed directly in.
function p.infobox(frame)
if frame == mw.getCurrentFrame() then
origArgs = frame:getParent().args
else
origArgs = frame
end
parseDataParameters()
return _infobox()
end
-- For calling via #invoke within a template
function p.infoboxTemplate(frame)
origArgs = {}
for k,v in pairs(frame.args) do origArgs[k] = mw.text.trim(v) end
parseDataParameters()
return _infobox()
end
return p
0ddb7e5c8426d67cd589b710efb9912ddfb67fea
Template:Country data Romania
10
266
538
2022-12-28T14:46:12Z
[[w>Paine Ellsworth
0
per edit request on talk page - update naval ensign
wikitext
text/x-wiki
{{ {{{1<noinclude>|country showdata</noinclude>}}}
| alias = Romania
| flag alias = Flag of Romania.svg
| flag alias-1859 = Flag of the United Principalities of Wallachia and Moldavia (1859 - 1862).svg
| flag alias-1862 = Flag of the United Principalities of Romania (1862–1866).svg
| flag alias-1866 = Flag of Romania.svg
| flag alias-1948 = Flag of Romania (1948-1952).svg
| flag alias-1952 = Flag of Romania (1952-1965).svg
| flag alias-1965 = Flag of Romania (1965-1989).svg
| link alias-naval = Romanian Naval Forces
| flag alias-naval = Flag of Romania.svg
| flag alias-air force = Flag of the Romanian Air Force (obverse).svg
| link alias-air force = Romanian Air Force
| flag alias-army = Flag of the Romanian Land Forces (Obverse).svg
| link alias-army = Romanian Land Forces
| flag alias-navy = Flag of the Romanian Naval Forces (Obverse).svg
| link alias-navy = Romanian Naval Forces
| size = {{{size|}}}
| name = {{{name|}}}
| altlink = {{{altlink|}}}
| variant = {{{variant|}}}
<noinclude>
| var1 = 1859
| var2 = 1862
| var3 = 1866
| var4 = 1948
| var5 = 1952
| var6 = 1965
| redir1 = ROU
| redir2 = ROM
| related1 = Kingdom of Romania
</noinclude>
}}
b8f3670e159bf57644dc35ad076a061de391bac7
Template:Flatlist
10
193
391
2022-12-29T17:46:45Z
[[w>Izno
0
templatestyles obviates the need for hlist-separated
wikitext
text/x-wiki
<templatestyles src="Hlist/styles.css"/><div class="hlist {{{class|}}}" {{#if:{{{style|}}}{{{indent|}}}|style="{{#if:{{{indent|}}}|margin-left: {{#expr:{{{indent}}}*1.6}}em;}} {{{style|}}}"}}>{{#if:{{{1|}}}|
{{{1}}}
</div>}}<noinclude></div>
{{documentation}}
</noinclude>
cf60aa4aef920d48fa394e786f72fe5f6dcd3169
Module:List
828
28
60
2022-12-29T17:57:56Z
[[w>Izno
0
add templatestyles for hlist
Scribunto
text/plain
local libUtil = require('libraryUtil')
local checkType = libUtil.checkType
local mTableTools = require('Module:TableTools')
local p = {}
local listTypes = {
['bulleted'] = true,
['unbulleted'] = true,
['horizontal'] = true,
['ordered'] = true,
['horizontal_ordered'] = true
}
function p.makeListData(listType, args)
-- Constructs a data table to be passed to p.renderList.
local data = {}
-- Classes and TemplateStyles
data.classes = {}
data.templatestyles = ''
if listType == 'horizontal' or listType == 'horizontal_ordered' then
table.insert(data.classes, 'hlist')
data.templatestyles = mw.getCurrentFrame():extensionTag{
name = 'templatestyles', args = { src = 'Hlist/styles.css' }
}
elseif listType == 'unbulleted' then
table.insert(data.classes, 'plainlist')
data.templatestyles = mw.getCurrentFrame():extensionTag{
name = 'templatestyles', args = { src = 'Plainlist/styles.css' }
}
end
table.insert(data.classes, args.class)
-- Main div style
data.style = args.style
-- Indent for horizontal lists
if listType == 'horizontal' or listType == 'horizontal_ordered' then
local indent = tonumber(args.indent)
indent = indent and indent * 1.6 or 0
if indent > 0 then
data.marginLeft = indent .. 'em'
end
end
-- List style types for ordered lists
-- This could be "1, 2, 3", "a, b, c", or a number of others. The list style
-- type is either set by the "type" attribute or the "list-style-type" CSS
-- property.
if listType == 'ordered' or listType == 'horizontal_ordered' then
data.listStyleType = args.list_style_type or args['list-style-type']
data.type = args['type']
-- Detect invalid type attributes and attempt to convert them to
-- list-style-type CSS properties.
if data.type
and not data.listStyleType
and not tostring(data.type):find('^%s*[1AaIi]%s*$')
then
data.listStyleType = data.type
data.type = nil
end
end
-- List tag type
if listType == 'ordered' or listType == 'horizontal_ordered' then
data.listTag = 'ol'
else
data.listTag = 'ul'
end
-- Start number for ordered lists
data.start = args.start
if listType == 'horizontal_ordered' then
-- Apply fix to get start numbers working with horizontal ordered lists.
local startNum = tonumber(data.start)
if startNum then
data.counterReset = 'listitem ' .. tostring(startNum - 1)
end
end
-- List style
-- ul_style and ol_style are included for backwards compatibility. No
-- distinction is made for ordered or unordered lists.
data.listStyle = args.list_style
-- List items
-- li_style is included for backwards compatibility. item_style was included
-- to be easier to understand for non-coders.
data.itemStyle = args.item_style or args.li_style
data.items = {}
for _, num in ipairs(mTableTools.numKeys(args)) do
local item = {}
item.content = args[num]
item.style = args['item' .. tostring(num) .. '_style']
or args['item_style' .. tostring(num)]
item.value = args['item' .. tostring(num) .. '_value']
or args['item_value' .. tostring(num)]
table.insert(data.items, item)
end
return data
end
function p.renderList(data)
-- Renders the list HTML.
-- Return the blank string if there are no list items.
if type(data.items) ~= 'table' or #data.items < 1 then
return ''
end
-- Render the main div tag.
local root = mw.html.create('div')
for _, class in ipairs(data.classes or {}) do
root:addClass(class)
end
root:css{['margin-left'] = data.marginLeft}
if data.style then
root:cssText(data.style)
end
-- Render the list tag.
local list = root:tag(data.listTag or 'ul')
list
:attr{start = data.start, type = data.type}
:css{
['counter-reset'] = data.counterReset,
['list-style-type'] = data.listStyleType
}
if data.listStyle then
list:cssText(data.listStyle)
end
-- Render the list items
for _, t in ipairs(data.items or {}) do
local item = list:tag('li')
if data.itemStyle then
item:cssText(data.itemStyle)
end
if t.style then
item:cssText(t.style)
end
item
:attr{value = t.value}
:wikitext(t.content)
end
return data.templatestyles .. tostring(root)
end
function p.renderTrackingCategories(args)
local isDeprecated = false -- Tracks deprecated parameters.
for k, v in pairs(args) do
k = tostring(k)
if k:find('^item_style%d+$') or k:find('^item_value%d+$') then
isDeprecated = true
break
end
end
local ret = ''
if isDeprecated then
ret = ret .. '[[Category:List templates with deprecated parameters]]'
end
return ret
end
function p.makeList(listType, args)
if not listType or not listTypes[listType] then
error(string.format(
"bad argument #1 to 'makeList' ('%s' is not a valid list type)",
tostring(listType)
), 2)
end
checkType('makeList', 2, args, 'table')
local data = p.makeListData(listType, args)
local list = p.renderList(data)
local trackingCategories = p.renderTrackingCategories(args)
return list .. trackingCategories
end
for listType in pairs(listTypes) do
p[listType] = function (frame)
local mArguments = require('Module:Arguments')
local origArgs = mArguments.getArgs(frame, {
valueFunc = function (key, value)
if not value or not mw.ustring.find(value, '%S') then return nil end
if mw.ustring.find(value, '^%s*[%*#;:]') then
return value
else
return value:match('^%s*(.-)%s*$')
end
return nil
end
})
-- Copy all the arguments to a new table, for faster indexing.
local args = {}
for k, v in pairs(origArgs) do
args[k] = v
end
return p.makeList(listType, args)
end
end
return p
7a4f36a6e9cd56370bdd8207d23694124821dc1a
Module:Navbox/configuration
828
342
717
2022-12-29T18:14:27Z
[[]]>Izno
0
get these in
Scribunto
text/plain
return {
aria_label = 'Navbox',
nowrap_item = '%s<span class="nowrap">%s</span>',
templatestyles = mw.getCurrentFrame():extensionTag{
name = 'templatestyles', args = { src = 'Module:Navbox/styles.css' }
},
hlist_templatestyles = 'Hlist/styles.css',
plainlist_templatestyles = 'Plainlist/styles.css',
-- do not localize marker table
marker = {
oddeven = '\127_ODDEVEN_\127',
restart = '\127_ODDEVEN0_\127',
regex = '\127_ODDEVEN(%d?)_\127'
},
category = {
orphan = '[[Category:Navbox orphans]]',
horizontal_lists = 'Navigational boxes without horizontal lists',
background_colors = 'Navboxes using background colours',
illegible = 'Potentially illegible navboxes',
borders = 'Navboxes using borders',
},
keyword = {
border_subgroup = 'subgroup',
border_child = 'child',
border_none = 'none',
evenodd_swap = 'swap',
navbar_off = 'off',
navbar_plain = 'plain',
nocat_false = 'false',
nowrapitems_yes = 'yes',
orphan_yes = 'yes',
state_collapsed = 'collapsed',
state_off = 'off',
state_plain = 'plain',
subpage_doc = 'doc',
subpage_sandbox = 'sandbox',
subpage_testcases = 'testcases',
tracking_no = 'no'
},
class = {
autocollapse = 'autocollapse',
collapsible = 'mw-collapsible',
collapsed = 'mw-collapsed',
-- Warning
navbox = 'navbox', -- WMF currently hides 'navbox' from mobile,
-- so you probably shouldn't change the navbox class.
navbox_abovebelow = 'navbox-abovebelow',
navbox_group = 'navbox-group',
navbox_image = 'navbox-image',
navbox_inner = 'navbox-inner',
navbox_list = 'navbox-list',
navbox_list_with_group = 'navbox-list-with-group',
navbox_part = 'navbox-', -- do not l10n
navbox_styles = 'navbox-styles',
navbox_subgroup = 'navbox-subgroup',
navbox_title = 'navbox-title', -- l10n only if you change pattern.navbox_title below
navbox_odd_part = 'odd', -- do not l10n
navbox_even_part = 'even', -- do not l10n
nomobile = 'nomobile',
nowraplinks = 'nowraplinks',
noviewer = 'noviewer' -- used to remove images from MediaViewer
},
pattern = {
listnum = '^list(%d+)$',
class = 'class',
sandbox = '/sandbox$',
navbox = 'Template:Navbox',
nowrap = '^<span class="nowrap">',
style = 'style$',
navbox_title = '<th[^>]*"navbox%-title"',
hlist = 'hlist',
plainlist = 'plainlist',
},
arg = {
above = 'above',
aboveclass = 'aboveclass',
abovestyle = 'abovestyle',
basestyle = 'basestyle',
bodyclass = 'bodyclass',
bodystyle = 'bodystyle',
border = 'border',
below = 'below',
belowclass = 'belowclass',
belowstyle = 'belowstyle',
evenodd = 'evenodd',
evenstyle = 'evenstyle',
group1 = 'group1',
group2 = 'group2',
group_and_num = 'group%d',
groupstyle_and_num = 'group%dstyle',
groupclass = 'groupclass',
groupstyle = 'groupstyle',
groupwidth = 'groupwidth',
innerstyle = 'innerstyle',
image = 'image',
imageclass = 'imageclass',
imageleft = 'imageleft',
imageleftstyle = 'imageleftstyle',
imagesetyle = 'imagestyle',
list_and_num = 'list%d',
listclass_and_num = 'list%dclass',
liststyle_and_num = 'list%dstyle',
list1padding = 'list1padding',
listclass = 'listclass',
listpadding = 'listpadding',
liststyle = 'liststyle',
name = 'name',
navbar = 'navbar',
navboxclass = 'navboxclass',
nocat = 'nocat',
nowrapitems = 'nowrapitems',
oddstyle = 'oddstyle',
orphan = 'orphan',
state = 'state',
style = 'style',
templatestyles = 'templatestyles',
child_templatestyles = 'child templatestyles',
title = 'title',
titleclass = 'titleclass',
titlestyle = 'titlestyle',
tracking = 'tracking'
},
-- names of navbar arguments
navbar = {
name = 1,
fontstyle = 'fontstyle',
mini = 'mini'
}
}
4148736fd32a93636c0413e73ed38afaef065ec9
Module:Navbar/configuration
828
46
96
2022-12-29T18:18:21Z
[[w>Izno
0
add hlist/styles.css
Scribunto
text/plain
return {
['templatestyles'] = 'Module:Navbar/styles.css',
['hlist_templatestyles'] = 'Hlist/styles.css',
['box_text'] = 'This box: ', -- default text box when not plain or mini
['title_namespace'] = 'Template', -- namespace to default to for title
['invalid_title'] = 'Invalid title ',
['classes'] = { -- set a line to nil if you don't want it
['navbar'] = 'navbar',
['plainlinks'] = 'plainlinks', -- plainlinks
['horizontal_list'] = 'hlist', -- horizontal list class
['mini'] = 'navbar-mini', -- class indicating small links in the navbar
['this_box'] = 'navbar-boxtext',
['brackets'] = 'navbar-brackets',
-- 'collapsible' is the key for a class to indicate the navbar is
-- setting up the collapsible element in addition to the normal
-- navbar.
['collapsible'] = 'navbar-collapse',
['collapsible_title_mini'] = 'navbar-ct-mini',
['collapsible_title_full'] = 'navbar-ct-full'
}
}
b007c336b17ec4bcd4d5a9dca9f8cba301662b55
Module:Navbar
828
45
94
2022-12-29T18:20:02Z
[[w>Izno
0
add templatestyles for hlist
Scribunto
text/plain
local p = {}
local cfg = mw.loadData('Module:Navbar/configuration')
local function get_title_arg(is_collapsible, template)
local title_arg = 1
if is_collapsible then title_arg = 2 end
if template then title_arg = 'template' end
return title_arg
end
local function choose_links(template, args)
-- The show table indicates the default displayed items.
-- view, talk, edit, hist, move, watch
-- TODO: Move to configuration.
local show = {true, true, true, false, false, false}
if template then
show[2] = false
show[3] = false
local index = {t = 2, d = 2, e = 3, h = 4, m = 5, w = 6,
talk = 2, edit = 3, hist = 4, move = 5, watch = 6}
-- TODO: Consider removing TableTools dependency.
for _, v in ipairs(require ('Module:TableTools').compressSparseArray(args)) do
local num = index[v]
if num then show[num] = true end
end
end
local remove_edit_link = args.noedit
if remove_edit_link then show[3] = false end
return show
end
local function add_link(link_description, ul, is_mini, font_style)
local l
if link_description.url then
l = {'[', '', ']'}
else
l = {'[[', '|', ']]'}
end
ul:tag('li')
:addClass('nv-' .. link_description.full)
:wikitext(l[1] .. link_description.link .. l[2])
:tag(is_mini and 'abbr' or 'span')
:attr('title', link_description.html_title)
:cssText(font_style)
:wikitext(is_mini and link_description.mini or link_description.full)
:done()
:wikitext(l[3])
:done()
end
local function make_list(title_text, has_brackets, displayed_links, is_mini, font_style)
local title = mw.title.new(mw.text.trim(title_text), cfg.title_namespace)
if not title then
error(cfg.invalid_title .. title_text)
end
local talkpage = title.talkPageTitle and title.talkPageTitle.fullText or ''
-- TODO: Get link_descriptions and show into the configuration module.
-- link_descriptions should be easier...
local link_descriptions = {
{ ['mini'] = 'v', ['full'] = 'view', ['html_title'] = 'View this template',
['link'] = title.fullText, ['url'] = false },
{ ['mini'] = 't', ['full'] = 'talk', ['html_title'] = 'Discuss this template',
['link'] = talkpage, ['url'] = false },
{ ['mini'] = 'e', ['full'] = 'edit', ['html_title'] = 'Edit this template',
['link'] = title:fullUrl('action=edit'), ['url'] = true },
{ ['mini'] = 'h', ['full'] = 'hist', ['html_title'] = 'History of this template',
['link'] = title:fullUrl('action=history'), ['url'] = true },
{ ['mini'] = 'm', ['full'] = 'move', ['html_title'] = 'Move this template',
['link'] = mw.title.new('Special:Movepage'):fullUrl('target='..title.fullText), ['url'] = true },
{ ['mini'] = 'w', ['full'] = 'watch', ['html_title'] = 'Watch this template',
['link'] = title:fullUrl('action=watch'), ['url'] = true }
}
local ul = mw.html.create('ul')
if has_brackets then
ul:addClass(cfg.classes.brackets)
:cssText(font_style)
end
for i, _ in ipairs(displayed_links) do
if displayed_links[i] then add_link(link_descriptions[i], ul, is_mini, font_style) end
end
return ul:done()
end
function p._navbar(args)
-- TODO: We probably don't need both fontstyle and fontcolor...
local font_style = args.fontstyle
local font_color = args.fontcolor
local is_collapsible = args.collapsible
local is_mini = args.mini
local is_plain = args.plain
local collapsible_class = nil
if is_collapsible then
collapsible_class = cfg.classes.collapsible
if not is_plain then is_mini = 1 end
if font_color then
font_style = (font_style or '') .. '; color: ' .. font_color .. ';'
end
end
local navbar_style = args.style
local div = mw.html.create():tag('div')
div
:addClass(cfg.classes.navbar)
:addClass(cfg.classes.plainlinks)
:addClass(cfg.classes.horizontal_list)
:addClass(collapsible_class) -- we made the determination earlier
:cssText(navbar_style)
if is_mini then div:addClass(cfg.classes.mini) end
local box_text = (args.text or cfg.box_text) .. ' '
-- the concatenated space guarantees the box text is separated
if not (is_mini or is_plain) then
div
:tag('span')
:addClass(cfg.classes.box_text)
:cssText(font_style)
:wikitext(box_text)
end
local template = args.template
local displayed_links = choose_links(template, args)
local has_brackets = args.brackets
local title_arg = get_title_arg(is_collapsible, template)
local title_text = args[title_arg] or (':' .. mw.getCurrentFrame():getParent():getTitle())
local list = make_list(title_text, has_brackets, displayed_links, is_mini, font_style)
div:node(list)
if is_collapsible then
local title_text_class
if is_mini then
title_text_class = cfg.classes.collapsible_title_mini
else
title_text_class = cfg.classes.collapsible_title_full
end
div:done()
:tag('div')
:addClass(title_text_class)
:cssText(font_style)
:wikitext(args[1])
end
local frame = mw.getCurrentFrame()
-- hlist -> navbar is best-effort to preserve old Common.css ordering.
return frame:extensionTag{
name = 'templatestyles', args = { src = cfg.hlist_templatestyles }
} .. frame:extensionTag{
name = 'templatestyles', args = { src = cfg.templatestyles }
} .. tostring(div:done())
end
function p.navbar(frame)
return p._navbar(require('Module:Arguments').getArgs(frame))
end
return p
79f907e59eaa8bbf8dd50bb751933ebeaaa7eb17
Template:Large
10
1053
2167
2023-01-16T01:12:34Z
[[]]>Jonesey95
0
use this template's own documentation
wikitext
text/x-wiki
<span style="font-size:120%">{{{1}}}</span><noinclude>
{{Documentation}}
</noinclude>
8ba6ec8c3178e22dc1f05aa239df8a2b052be668
Module:Documentation/styles.css
828
319
2064
689
2023-01-16T23:40:04Z
dev>Pppery
0
sanitized-css
text/css
.documentation,
.documentation-metadata {
border: 1px solid #a2a9b1;
background-color: #ecfcf4;
clear: both;
}
.documentation {
margin: 1em 0 0 0;
padding: 1em;
}
.documentation-metadata {
margin: 0.2em 0; /* same margin left-right as .documentation */
font-style: italic;
padding: 0.4em 1em; /* same padding left-right as .documentation */
}
.documentation-startbox {
padding-bottom: 3px;
border-bottom: 1px solid #aaa;
margin-bottom: 1ex;
}
.documentation-heading {
font-weight: bold;
font-size: 125%;
}
.documentation-clear { /* Don't want things to stick out where they shouldn't. */
clear: both;
}
.documentation-toolbar {
font-style: normal;
font-size: 85%;
}
/* [[Category:Template stylesheets]] */
5fb984fe8632dc068db16853a824c9f3d5175dd9
Module:Infobox/doc
828
92
660
2023-01-16T23:40:35Z
[[cln>Pppery
0
{{documentation subpage}}
wikitext
text/x-wiki
{{documentation subpage}}
'''Module:Infobox''' is a module that implements the {{tl|Infobox}} template. Please see the template page for usage instructions.
d16367f5024eb374f0ea08220d665d7e1ad0b202
Module:Side box/styles.css
828
310
626
2023-01-19T20:36:50Z
[[w>TheDJ
0
use display flow-root to force a new Block formatting context
text
text/plain
/* {{pp|small=y}} */
.side-box {
margin: 4px 0;
box-sizing: border-box;
border: 1px solid #aaa;
font-size: 88%;
line-height: 1.25em;
background-color: #f9f9f9;
display: flow-root;
}
.side-box-abovebelow,
.side-box-text {
padding: 0.25em 0.9em;
}
.side-box-image {
/* @noflip */
padding: 2px 0 2px 0.9em;
text-align: center;
}
.side-box-imageright {
/* @noflip */
padding: 2px 0.9em 2px 0;
text-align: center;
}
/* roughly the skin's sidebar + size of side box */
@media (min-width: 500px) {
.side-box-flex {
display: flex;
align-items: center;
}
.side-box-text {
flex: 1;
}
}
@media (min-width: 720px) {
.side-box {
width: 238px;
}
.side-box-right {
/* @noflip */
clear: right;
/* @noflip */
float: right;
/* @noflip */
margin-left: 1em;
}
/* derives from mbox classes, which do not float left in mbox-small-left
* so far as I can tell, that was a deliberate decision, since only .ambox
* supports mbox-left
*/
.side-box-left {
/* @noflip */
margin-right: 1em;
}
}
5be55dbc33007e62deac23036c134ed064dbe603
Module:If empty
828
202
410
2023-01-26T18:33:28Z
[[w>MSGJ
0
lastk is not needed
Scribunto
text/plain
local p = {}
function p.main(frame)
local args = require('Module:Arguments').getArgs(frame, {wrappers = 'Template:If empty', removeBlanks = false})
for k,v in ipairs(args) do
if v ~= '' then
return v
end
end
end
return p
4790391408957dea3ff9f453834c05f6b379a45c
Template:Dated maintenance category (articles)
10
303
612
2023-02-03T03:07:34Z
[[w>UtherSRG
0
UtherSRG moved page [[Template:DMCA]] to [[Template:Dated maintenance category (articles)]]: [[Special:Permalink/1137158761|Requested]] by Robertsky at [[WP:RM/TR]]: Per RM discussion. See [[Template_talk:DMCA#Requested_move_26_January_2023]]. Template protected at template editor/admin level
wikitext
text/x-wiki
{{Dated maintenance category
|onlyarticles=yes
|1={{{1|}}}
|2={{{2|}}}
|3={{{3|}}}
|4={{{4|}}}
|5={{{5|}}}
}}<noinclude>
{{documentation|Template:Dated maintenance category/doc}}
</noinclude>
6bbc57c75cc28708a0e71dd658224d5945d80d68
Template:DMCA
10
289
584
2023-02-03T21:12:07Z
[[w>Paine Ellsworth
0
add [[WP:RCAT|rcat template]]
wikitext
text/x-wiki
#REDIRECT [[Template:Dated maintenance category (articles)]]
{{Redirect category shell|
{{R from move}}
{{R from modification}}
{{R from template shortcut}}
}}
711d3f1c53fa704297f675a8dcf1a56719c5b654
Template:Distinguish
10
35
74
2023-02-04T21:16:13Z
[[w>Hog Farm
0
[[Wikipedia:Templates for discussion/Log/2023 February 4#Template:Distinguish]] closed as keep ([[WP:XFDC#4.0.13|XFDcloser]])
wikitext
text/x-wiki
{{#invoke:Distinguish|distinguish}}<noinclude><!-- splitting these lines causes {{Documentation}} template to terminate green shading when Distinguish is used in /doc pages. -->
{{Documentation}}
<!-- Add categories to the /doc subpage and interwikis to Wikidata, not here! -->
</noinclude>
f949a4cbfd6eb0ab77b832e69059a40a964b1fd8
Module:Exponential search
828
210
426
2023-02-10T20:10:53Z
Uzume
7
strict
Scribunto
text/plain
-- This module provides a generic exponential search algorithm.
require[[strict]]
local checkType = require('libraryUtil').checkType
local floor = math.floor
local function midPoint(lower, upper)
return floor(lower + (upper - lower) / 2)
end
local function search(testFunc, i, lower, upper)
if testFunc(i) then
if i + 1 == upper then
return i
end
lower = i
if upper then
i = midPoint(lower, upper)
else
i = i * 2
end
return search(testFunc, i, lower, upper)
else
upper = i
i = midPoint(lower, upper)
return search(testFunc, i, lower, upper)
end
end
return function (testFunc, init)
checkType('Exponential search', 1, testFunc, 'function')
checkType('Exponential search', 2, init, 'number', true)
if init and (init < 1 or init ~= floor(init) or init == math.huge) then
error(string.format(
"invalid init value '%s' detected in argument #2 to " ..
"'Exponential search' (init value must be a positive integer)",
tostring(init)
), 2)
end
init = init or 2
if not testFunc(1) then
return nil
end
return search(testFunc, init, 1, nil)
end
a9037be0c44536be79b2d7a26155bfb907368ae7
Template:Sister project
10
306
618
2023-02-14T12:14:20Z
[[w>Paine Ellsworth
0
"iw" for interwiki link (other-language WPs)
wikitext
text/x-wiki
{{Side box
| metadata=no
| position = {{{position|}}}
| image =
{{#switch: {{{image|}}}
| none = <!-- "image=none", do nothing -->
| = <!-- No image fed, select an image -->
[[File:{{#switch: {{lc: {{{project|}}} }}
| commons|c = Commons-logo.svg
| meta|metawiki|m = Wikimedia Community Logo.svg
| wikibooks|wbk|wb|b = Wikibooks-logo-en-noslogan.svg
| wikidata|data = Wikidata-logo.svg
| wikiquote|quote|wqt|q = Wikiquote-logo.svg
| wikipedia|wp|w|iw = Wikipedia-logo-v2.svg
| wikisource|source|ws|s = Wikisource-logo.svg
| wiktionary|wikt|wkt|wdy|d = Wiktionary-logo-en-v2.svg
| wikinews|news|wnw|n = Wikinews-logo.svg
| wikispecies|species = Wikispecies-logo.svg
| wikiversity|wvy|v = Wikiversity logo 2017.svg
| wikivoyage|voyage|voy = Wikivoyage-Logo-v3-icon.svg
| mediawiki|mw = MediaWiki-2020-icon.svg
| outreachwiki|outreach = Wikimedia Outreach.png
| incubator = Incubator-notext.svg
| #default = Wikimedia-logo.svg
}}|40x40px|class=noviewer|alt=|link=
]]
| #default = {{{image|}}}
}}
| textclass = {{{textclass|plainlist}}}
| textstyle = {{{textstyle|}}}
| text = {{{text}}}
| below = {{{below|}}}
| imageright = {{{imageright|}}}
| class = plainlinks sistersitebox
}}<noinclude>{{Documentation}}<!-- Add categories and interwikis to the /doc subpage, not here! --></noinclude>
0929197ea6267d9d63d80f9f8432fe1cfbe7ace8
Template:Infobox military operation
10
1060
2181
2023-02-15T15:43:09Z
[[]]>Phuzion
0
Added subtitle to check for unknown parameters
wikitext
text/x-wiki
{{infobox
|bodyclass = vevent
|bodystyle = {{WPMILHIST Infobox style|main_box_raw}}
|abovestyle = {{WPMILHIST Infobox style|header_raw}}
|aboveclass = summary
| headerstyle = {{WPMILHIST Infobox style|header_raw}}
|above = {{if empty|{{{title|}}}|{{{name|}}}|{{PAGENAMEBASE}}}}
|subheaderstyle = {{WPMILHIST Infobox style|sub_header_raw}}
|subheader = {{br separated entries|{{{subtitle|}}}|{{#if:{{{partof|}}}{{{conflict|}}}|Part of {{if empty|{{{conflict|}}}|{{{partof|}}}}} }}}}
|labelstyle = padding-right: 1em;
|imagestyle = {{WPMILHIST Infobox style|image_box_raw}}
|image = {{#invoke:InfoboxImage|InfoboxImage|image={{{image|}}}|size={{{image_size|}}}|upright={{{image_upright|1}}}|alt={{{alt|}}}}}
|caption = {{{caption|}}}
| label1 = {{#if:{{{scope|}}}|Operational scope|Type}}
| data1 = {{if empty|{{{scope|}}}|{{{type|}}}}}
| label2 = Location{{#if:{{{location2|}}}|s}}
| data2 = {{br separated entries
|1 = {{#if:{{{location|{{{place|}}}}}}|<div style="display:inline;" class="location">{{{location|{{{place|}}}}}}</div>}}
|2 = {{{coordinates|}}}
|3 = {{#if:{{{location2|}}}|<div style="display:inline;" class="location">{{{location2|}}}</div>}}
|4 = {{#if:{{{location2|}}}|{{{coordinates2|}}}}}
|5 = {{#if:{{{location3|}}}|<div style="display:inline;" class="location">{{{location3|}}}</div>}}
|6 = {{#if:{{{location3|}}}|{{{coordinates3|}}}}}
|7 = {{#if:{{{location4|}}}|<div style="display:inline;" class="location">{{{location4|}}}</div>}}
|8 = {{#if:{{{location4|}}}|{{{coordinates4|}}}}}
|9 = {{#if:{{{location5|}}}|<div style="display:inline;" class="location">{{{location5|}}}</div>}}
|10= {{#if:{{{location5|}}}|{{{coordinates5|}}}}}
|11= {{#if:{{{location6|}}}|<div style="display:inline;" class="location">{{{location6|}}}</div>}}
|12= {{#if:{{{location6|}}}|{{{coordinates6|}}}}}
|13= {{#if:{{{location7|}}}|<div style="display:inline;" class="location">{{{location7|}}}</div>}}
|14= {{#if:{{{location7|}}}|{{{coordinates7|}}}}}
|15= {{#if:{{{location8|}}}|<div style="display:inline;" class="location">{{{location8|}}}</div>}}
|16= {{#if:{{{location8|}}}|{{{coordinates8|}}}}}
|17= {{#if:{{{location9|}}}|<div style="display:inline;" class="location">{{{location9|}}}</div>}}
|18= {{#if:{{{location9|}}}|{{{coordinates9|}}}}}
|19= {{#if:{{{location10|}}}|<div style="display:inline;" class="location">{{{location10|}}}</div>}}
|20= {{#if:{{{location10|}}}|{{{coordinates10|}}}}}
}}
| label3 = Planned
| data3 = {{{planned|}}}
| label4 = Planned by
| data4 = {{{planned_by|}}}
| label5 = Commanded by
| data5 = {{{commanded_by|}}}
| label6 = {{#if:{{{target|}}}|Target|Objective}}
| data6 = {{if empty|{{{target|}}}|{{{objective|}}}}}
| label7 = Date
| data7 = {{br separated entries
|1 = {{if empty|{{{executed|}}}|{{{date|}}}}}
|2 = {{{time|}}}
|3 = {{#if:{{{time-begin|}}}|{{{time-begin}}} – {{{time-end|}}}}}
}} {{#if:{{{timezone|}}}|({{{timezone}}})}}
| label8 = Executed by
| data8 = {{if empty|{{{instigator|}}}|{{{executed_by|}}}}}
| label9 = Outcome
| data9 = {{{outcome|}}}
| label10 = Casualties
| data10 = {{if empty|{{{casualties|}}}|{{br separated entries
|1 = {{#if:{{{fatalities|}}}|{{{fatalities|}}} killed}}
|2 = {{#if:{{{injuries|}}}|{{{injuries|}}} injured}}
}} }}
| header27 = {{#if:{{{map_type|}}}|<nowiki />}}
| data28 = {{#if:{{{map_type|}}}|
{{#if:{{{coordinates2|}}}|
{{Location map many|{{{map_type}}}|coordinates1={{if empty|{{{map_coord|}}} | {{{coordinates|}}} }}|width={{{map_size|220}}}|float=center|border=infobox|label1={{{map_label|}}}|caption={{{map_caption|Location within {{#invoke:Location map|data|{{{map_type}}}|name}} }}}
|coordinates2={{{coordinates2|}}}|label2={{{map_label2|}}}
{{#if:{{{coordinates3|}}}|{{!}}coordinates3={{{coordinates3|}}}{{!}}label3={{{map_label3|}}} }}
{{#if:{{{coordinates4|}}}|{{!}}coordinates4={{{coordinates4|}}}{{!}}label4={{{map_label4|}}} }}
{{#if:{{{coordinates5|}}}|{{!}}coordinates5={{{coordinates5|}}}{{!}}label5={{{map_label5|}}} }}
{{#if:{{{coordinates6|}}}|{{!}}coordinates6={{{coordinates6|}}}{{!}}label6={{{map_label6|}}} }}
{{#if:{{{coordinates7|}}}|{{!}}coordinates7={{{coordinates7|}}}{{!}}label7={{{map_label7|}}} }}
{{#if:{{{coordinates8|}}}|{{!}}coordinates8={{{coordinates8|}}}{{!}}label8={{{map_label8|}}} }}
{{#if:{{{coordinates9|}}}|{{!}}coordinates9={{{coordinates9|}}}{{!}}label9={{{map_label9|}}} }}
{{#if:{{{coordinates10|}}}|{{!}}coordinates10={{{coordinates10|}}}{{!}}label10={{{map_label10|}}} }}
}}
|{{Location map|{{{map_type}}}|coordinates={{if empty|{{{map_coord|}}} | {{{coordinates|}}} }}|width={{{map_size|220}}}|float=center|border=infobox|label={{{map_label|}}}|caption={{{map_caption|Location within {{#invoke:Location map|data|{{{map_type}}}|name}} }}} }}
}}
}}
}}{{{campaignbox|}}}{{#invoke:Check for unknown parameters|check|unknown={{main other|[[Category:Pages using infobox military operation with unknown parameters|_VALUE_{{PAGENAME}}]]}}|preview=Page using [[Template:Infobox military operation]] with unknown parameter "_VALUE_"|ignoreblank=y| alt | campaignbox | caption | casualties | commanded_by | conflict | coordinates | date | executed | executed_by | fatalities | image | image_size | image_upright | injuries | instigator | location | map_caption | map_coord | map_label | map_size | map_type | name | objective | outcome | partof | planned | planned_by | scope | subtitle | target | time | time-begin | time-end | timezone | title | type | coordinates2 | coordinates3 | coordinates4 | coordinates5 | coordinates6 | coordinates7 | coordinates8 | coordinates9 | coordinates10 | map_label2 | map_label3 | map_label4 | map_label5 | map_label6 | map_label7 | map_label8 | map_label9 | map_label10 | location2 | location3 | location4 | location5 | location6 | location7 | location8 | location9 | location10 }}<noinclude>
{{template doc}}
</noinclude>
829164a43ec689efc952b0722e2406cf1185cf66
Module:Lua banner
828
71
146
2023-02-16T14:39:53Z
Uzume
7
[[Module:Citation]] has been blanked since [[Wikipedia:Templates for discussion/Log/2018 May 13#Module:Citation]]; remove special handling
Scribunto
text/plain
-- This module implements the {{lua}} template.
local yesno = require('Module:Yesno')
local mList = require('Module:List')
local mTableTools = require('Module:TableTools')
local mMessageBox = require('Module:Message box')
local p = {}
function p.main(frame)
local origArgs = frame:getParent().args
local args = {}
for k, v in pairs(origArgs) do
v = v:match('^%s*(.-)%s*$')
if v ~= '' then
args[k] = v
end
end
return p._main(args)
end
function p._main(args)
local modules = mTableTools.compressSparseArray(args)
local box = p.renderBox(modules)
local trackingCategories = p.renderTrackingCategories(args, modules)
return box .. trackingCategories
end
function p.renderBox(modules)
local boxArgs = {}
if #modules < 1 then
boxArgs.text = '<strong class="error">Error: no modules specified</strong>'
else
local moduleLinks = {}
for i, module in ipairs(modules) do
moduleLinks[i] = string.format('[[:%s]]', module)
local maybeSandbox = mw.title.new(module .. '/sandbox')
if maybeSandbox.exists then
moduleLinks[i] = moduleLinks[i] .. string.format(' ([[:%s|sandbox]])', maybeSandbox.fullText)
end
end
local moduleList = mList.makeList('bulleted', moduleLinks)
local title = mw.title.getCurrentTitle()
if title.subpageText == "doc" then
title = title.basePageTitle
end
if title.contentModel == "Scribunto" then
boxArgs.text = 'This module depends on the following other modules:' .. moduleList
else
boxArgs.text = 'This template uses [[Wikipedia:Lua|Lua]]:\n' .. moduleList
end
end
boxArgs.type = 'notice'
boxArgs.small = true
boxArgs.image = '[[File:Lua-Logo.svg|30px|alt=|link=]]'
return mMessageBox.main('mbox', boxArgs)
end
function p.renderTrackingCategories(args, modules, titleObj)
if yesno(args.nocat) then
return ''
end
local cats = {}
-- Error category
if #modules < 1 then
cats[#cats + 1] = 'Lua templates with errors'
end
-- Lua templates category
titleObj = titleObj or mw.title.getCurrentTitle()
local subpageBlacklist = {
doc = true,
sandbox = true,
sandbox2 = true,
testcases = true
}
if not subpageBlacklist[titleObj.subpageText] then
local protCatName
if titleObj.namespace == 10 then
local category = args.category
if not category then
local categories = {
['Module:String'] = 'Templates based on the String Lua module',
['Module:Math'] = 'Templates based on the Math Lua module',
['Module:BaseConvert'] = 'Templates based on the BaseConvert Lua module',
['Module:Citation/CS1'] = 'Templates based on the Citation/CS1 Lua module'
}
category = modules[1] and categories[modules[1]]
category = category or 'Lua-based templates'
end
cats[#cats + 1] = category
protCatName = "Templates using under-protected Lua modules"
elseif titleObj.namespace == 828 then
protCatName = "Modules depending on under-protected modules"
end
if not args.noprotcat and protCatName then
local protLevels = {
autoconfirmed = 1,
extendedconfirmed = 2,
templateeditor = 3,
sysop = 4
}
local currentProt
if titleObj.id ~= 0 then
-- id is 0 (page does not exist) if am previewing before creating a template.
currentProt = titleObj.protectionLevels["edit"][1]
end
if currentProt == nil then currentProt = 0 else currentProt = protLevels[currentProt] end
for i, module in ipairs(modules) do
if module ~= "WP:libraryUtil" then
local moduleProt = mw.title.new(module).protectionLevels["edit"][1]
if moduleProt == nil then moduleProt = 0 else moduleProt = protLevels[moduleProt] end
if moduleProt < currentProt then
cats[#cats + 1] = protCatName
break
end
end
end
end
end
for i, cat in ipairs(cats) do
cats[i] = string.format('[[Category:%s]]', cat)
end
return table.concat(cats)
end
return p
03ec1b34a40121efc562c0c64a67ebbf57d56dff
Module:Lang/data
828
183
371
2023-03-09T14:48:18Z
[[w>Trappist the monk
0
fix;
Scribunto
text/plain
local lang_obj = mw.language.getContentLanguage();
local this_wiki_lang_tag = lang_obj.code; -- get this wiki's language tag
--[[--------------------------< L A N G _ N A M E _ T A B L E >------------------------------------------------
primary table of tables that decode:
lang -> language tags and names
script -> ISO 15924 script tags
region -> ISO 3166 region tags
variant -> iana registered variant tags
suppressed -> map of scripts tags and their associated language tags
all of these data come from separate modules that are derived from the IANA language-subtag-registry file
key_to_lower() avoids the metatable trap and sets all keys in the subtables to lowercase. Many language codes
have multiple associated names; Module:lang is only concerned with the first name so key_to_lower() only fetches
the first name.
]]
local function key_to_lower (module, src_type)
local out = {};
local source = (('var_sup' == src_type) and require (module)) or mw.loadData (module); -- fetch data from this module; require() avoids metatable trap for variant data
if 'var_sup' == src_type then
for k, v in pairs (source) do
out[k:lower()] = v; -- for variant and suppressed everything is needed
end
elseif 'lang' == src_type and source.active then -- for ~/iana_languages (active)
for k, v in pairs (source.active) do
out[k:lower()] = v[1]; -- ignore multiple names; take first name only
end
elseif 'lang_dep' == src_type and source.deprecated then -- for ~/iana_languages (deprecated)
for k, v in pairs (source.deprecated) do
out[k:lower()] = v[1]; -- ignore multiple names; take first name only
end
else -- here for all other sources
for k, v in pairs (source) do
out[k:lower()] = v[1]; -- ignore multiple names; take first name only
end
end
return out;
end
local lang_name_table_t = {
lang = key_to_lower ('Module:Language/data/iana languages', 'lang'),
lang_dep = key_to_lower ('Module:Language/data/iana languages', 'lang_dep'),
script = key_to_lower ('Module:Language/data/iana scripts'), -- script keys are capitalized; set to lower
region = key_to_lower ('Module:Language/data/iana regions'), -- region keys are uppercase; set to lower
variant = key_to_lower ('Module:Language/data/iana variants', 'var_sup'),
suppressed = key_to_lower ('Module:Language/data/iana suppressed scripts', 'var_sup'), -- script keys are capitalized; set to lower
}
--[[--------------------------< I 1 8 N M E D I A W I K I O V E R R I D E >--------------------------------
For internationalization; not used at en.wiki
The language names taken from the IANA language-subtag-registry file are given in English. That may not be ideal.
Translating ~8,000 language names is also not ideal. MediaWiki maintains (much) shorter lists of language names
in most languages for which there is a Wikipedia edition. When desired, Module:Lang can use the MediaWiki
language list for the local language.
Caveat lector: the list of MediaWiki language names for your language may not be complete or may not exist at all.
When incomplete, MediaWiki's list will 'fall back' to another language (typically English). When that happens
add an appropriate entry to the override table below.
Caveat lector: the list of MediaWiki language names for your language may not be correct. At en.wiki, the
MediaWiki language names do not agree with the IANA language names for these ISO 639-1 tags. Often it is simply
spelling differences:
bh: IANA: Bihari languages MW: Bhojpuri – the ISO 639-3 tag for Bhojpuri is bho
bn: IANA: Bengali MW: Bangla – Bengali is the exonym, Bangla is the endonym
dv: IANA: Dhivehi MW: Divehi
el: IANA: Modern Greek MW: Greek
ht: IANA: Haitian MW: Haitian Creole
ky: IANA: Kirghiz MW: Kyrgyz
li: IANA: Limburgan MW: Limburgish
or: IANA: Oriya MW: Odia
os: IANA: Ossetian MW: Ossetic
"pa: IANA: Panjabi MW: Punjabi
"ps: IANA: Pushto MW: Pashto
"to: IANA: Tonga MW: Tongan
"ug: IANA: Uighur MW: Uyghur
use the override table to override language names that are incorrect for your project
To see the list of names that MediaWiki has for your language, enter this in the Debug colsole:
=mw.dumpObject (mw.language.fetchLanguageNames ('<tag>', 'all'))
(replacing <tag> with the language tag for your language)
Use of the MediaWiki language names lists is enabled when media_wiki_override_enable is set to boolean true.
]]
local media_wiki_override_enable = false; -- set to true to override IANA names with MediaWiki names; always false at en.wiki
-- caveat lector: the list of MediaWiki language names for your language may not be complete or may not exist at all
if true == media_wiki_override_enable then
local mw_languages_by_tag_t = mw.language.fetchLanguageNames (this_wiki_lang_tag, 'all'); -- get a table of language tag/name pairs known to MediaWiki
for tag, name in pairs (mw_languages_by_tag_t) do -- loop through each tag/name pair in the MediaWiki list
if lang_name_table_t.lang[tag] then -- if the tag is in the main list
lang_name_table_t.lang[tag] = name; -- overwrite exisiting name with the name from MediaWiki
end
end
end
--[[--------------------------< O V E R R I D E >--------------------------------------------------------------
Language codes and names in this table override the BCP47 names in lang_name_table.
indexes in this table shall always be lower case
]]
local override = {
------------------------------< I S O _ 6 3 9 - 1 >------------------------------------------------------------
["ab"] = "Abkhaz", -- to match en.wiki article name
["ca-valencia"] = "Valencian",
["cu"] = "Church Slavonic", -- 2nd IANA name;
["de-at"] = "Austrian German", -- these code-region and code-variant tags to match en.wiki article names
["de-ch"] = "Swiss Standard German",
["en-au"] = "Australian English",
["en-ca"] = "Canadian English",
["en-emodeng"] = "Early Modern English",
["en-gb"] = "British English",
["en-ie"] = "Irish English",
["en-in"] = "Indian English",
["en-nz"] = "New Zealand English",
["en-us"] = "American English",
["en-za"] = "South African English",
["fy"] = "West Frisian", -- Western Frisian
["mo"] = "Moldovan", -- Moldavian (deprecated code); to match en.wiki article title
["nl-be"] = "Flemish", -- match MediaWiki
["oc-provenc"] = "Provençal",
["ps"] = "Pashto", -- Pushto
["pt-br"] = "Brazilian Portuguese", -- match MediaWiki
["tw-asante"] = "Asante Twi",
["ug"] = "Uyghur", -- 2nd IANA name; to match en.wiki article name
-- these ISO 639-1 language-name overrides imported from Module:Language/data/wp_languages
--<begin do-not-edit except to comment out>--
["av"] = "Avar", -- Avaric
["bo"] = "Standard Tibetan", -- Tibetan
["el"] = "Greek", -- Modern Greek
-- ["en-SA"] = "South African English", -- English; no; SA is not South Africa it Saudi Arabia; ZA is South Africa
["ff"] = "Fula", -- Fulah
["ht"] = "Haitian Creole", -- Haitian
["hz"] = "Otjiherero", -- Herero
["ii"] = "Yi", -- Sichuan Yi
["ki"] = "Gikuyu", -- Kikuyu
["kl"] = "Greenlandic", -- Kalaallisut
["ky"] = "Kyrgyz", -- Kirghiz
["lg"] = "Luganda", -- Ganda
["li"] = "Limburgish", -- Limburgan
["mi"] = "Māori", -- Maori
["na"] = "Nauruan", -- Nauru
["nb"] = "Bokmål", -- Norwegian Bokmål
["nd"] = "Northern Ndebele", -- North Ndebele
["nn"] = "Nynorsk", -- Norwegian Nynorsk
["nr"] = "Southern Ndebele", -- South Ndebele
["ny"] = "Chichewa", -- Nyanja
["oj"] = "Ojibwe", -- Ojibwa
["or"] = "Odia", -- Oriya
["pa"] = "Punjabi", -- Panjabi
["rn"] = "Kirundi", -- Rundi
["sl"] = "Slovene", -- Slovenian
["ss"] = "Swazi", -- Swati
["st"] = "Sotho", -- Southern Sotho
["to"] = "Tongan", -- Tonga
--<end do-not-edit except to comment out>--
------------------------------< I S O _ 6 3 9 - 2, - 3, - 5 >----------------------------------------------
["alv"] = "Atlantic–Congo languages", -- to match en.wiki article title (endash)
["arc"] = "Imperial Aramaic (700-300 BCE)", -- Official Aramaic (700-300 BCE), Imperial Aramaic (700-300 BCE); to match en.wiki article title uses ISO639-2 'preferred' name
["art"] = "constructed", -- to match en.wiki article; lowercase for category name
["bhd"] = "Bhadarwahi", -- Bhadrawahi; to match en.wiki article title
["bla"] = "Blackfoot", -- Siksika; to match en.wiki article title
["bua"] = "Buryat", -- Buriat; this is a macro language; these four use wp preferred transliteration;
["bxm"] = "Mongolian Buryat", -- Mongolia Buriat; these three all redirect to Buryat
["bxr"] = "Russian Buryat", -- Russia Buriat;
["bxu"] = "Chinese Buryat", -- China Buriat;
["byr"] = "Yipma", -- Baruya, Yipma
["egy"] = "Ancient Egyptian", -- Egyptian (Ancient); distinguish from contemporary arz: Egyptian Arabic
["ems"] = "Alutiiq", -- Pacific Gulf Yupik; to match en.wiki article title
["esx"] = "Eskimo–Aleut languages", -- to match en.wiki article title (endash)
["frr"] = "North Frisian", -- Northern Frisian
["frs"] = "East Frisian Low Saxon", -- Eastern Frisian
["gsw-fr"] = "Alsatian", -- match MediaWiki
["haa"] = "Hän", -- Han; to match en.wiki article title
["hmx"] = "Hmong–Mien languages", -- to match en.wiki article title (endash)
["ilo"] = "Ilocano", -- Iloko; to match en.wiki article title
["jam"] = "Jamaican Patois", -- Jamaican Creole English
["lij-mc"] = "Monégasque", -- Ligurian as spoken in Monaco
["luo"] = "Dholuo", -- IANA (primary) /ISO 639-3: Luo (Kenya and Tanzania); IANA (secondary): Dholuo
["mhr"] = "Meadow Mari", -- Eastern Mari
["mid"] = "Modern Mandaic", -- Mandaic
['mis'] = "uncoded", -- Uncoded languages; capitalization; special scope, not collective scope;
["mkh"] = "Mon–Khmer languages", -- to match en.wiki article title (endash)
["mla"] = "Tamambo", -- Malo
['mte'] = "Mono-Alu", -- Mono (Solomon Islands)
['mul'] = "multiple", -- Multiple languages; capitalization; special scope, not collective scope;
["nan-tw"] = "Taiwanese Hokkien", -- make room for IANA / 639-3 nan Min Nan Chinese; match en.wiki article title
["new"] = "Newar", -- Newari, Nepal Bhasa; to match en,wiki article title
["ngf"] = "Trans–New Guinea languages", -- to match en.wiki article title (endash)
["nic"] = "Niger–Congo languages", -- Niger-Kordofanian languages; to match en,wiki article title
["nrf"] = "Norman", -- not quite a collective - IANA name: Jèrriais + Guernésiais; categorizes to Norman-language text
["nrf-gg"] = "Guernésiais", -- match MediaWiki
["nrf-je"] = "Jèrriais", -- match MediaWiki
["nzi"] = "Nzema", -- Nzima; to match en.wiki article title
["oma"] = "Omaha–Ponca", -- to match en.wiki article title (endash)
["orv"] = "Old East Slavic", -- Old Russian
["pfl"] = "Palatine German", -- Pfaelzisch; to match en.wiki article
["pie"] = "Piro Pueblo", -- Piro; to match en.wiki article
["pms"] = "Piedmontese", -- Piemontese; to match en.wiki article title
["pnb"] = "Punjabi (Western)", -- Western Panjabi; dab added to override import from ~/wp languages and distinguish pnb from pa in reverse look up tag_from_name()
["rop"] = "Australian Kriol", -- Kriol; en.wiki article is a dab; point to correct en.wiki article
["sdo"] = "Bukar–Sadong", -- Bukar-Sadung Bidayuh; to match en.wiki article title
["stq"] = "Saterland Frisian", -- Saterfriesisch
["und"] = "undetermined", -- capitalization to match existing category
["wrg"] = "Warrongo", -- Warungu
["xal-ru"] = "Kalmyk", -- to match en.wiki article title
["xgf"] = "Tongva", -- ISO 639-3 is Gabrielino-Fernandeño
["yuf"] = "Havasupai–Hualapai", -- Havasupai-Walapai-Yavapai; to match en.wiki article title
["zxx"] = "no linguistic content", -- capitalization
-- these ISO 639-2, -3 language-name overrides imported from Module:Language/data/wp_languages
--<begin do-not-edit except to comment out>--
["ace"] = "Acehnese", -- Achinese
["aec"] = "Sa'idi Arabic", -- Saidi Arabic
["akl"] = "Aklan", -- Aklanon
["alt"] = "Altay", -- Southern Altai
["apm"] = "Mescalero-Chiricahua", -- Mescalero-Chiricahua Apache
["bal"] = "Balochi", -- Baluchi
-- ["bcl"] = "Central Bicolano", -- Central Bikol
["bin"] = "Edo", -- Bini
["bpy"] = "Bishnupriya Manipuri", -- Bishnupriya
["chg"] = "Chagatay", -- Chagatai
["ckb"] = "Sorani Kurdish", -- Central Kurdish
["cnu"] = "Shenwa", -- Chenoua
["coc"] = "Cocopah", -- Cocopa
["diq"] = "Zazaki", -- Dimli
["fit"] = "Meänkieli", -- Tornedalen Finnish
["fkv"] = "Kven", -- Kven Finnish
["frk"] = "Old Frankish", -- Frankish
["gez"] = "Ge'ez", -- Geez
["gju"] = "Gujari", -- Gujari
["gsw"] = "Alemannic German", -- Swiss German
["gul"] = "Gullah", -- Sea Island Creole English
["hak"] = "Hakka", -- Hakka Chinese
["hbo"] = "Biblical Hebrew", -- Ancient Hebrew
["hnd"] = "Hindko", -- Southern Hindko
-- ["ikt"] = "Inuvialuk", -- Inuinnaqtun
["kaa"] = "Karakalpak", -- Kara-Kalpak
["khb"] = "Tai Lü", -- Lü
["kmr"] = "Kurmanji Kurdish", -- Northern Kurdish
["kpo"] = "Kposo", -- Ikposo
["krj"] = "Kinaray-a", -- Kinaray-A
["ktz"] = "Juǀ'hoan", -- Juǀʼhoan
["lez"] = "Lezgian", -- Lezghian
["liv"] = "Livonian", -- Liv
["lng"] = "Lombardic", -- Langobardic
["mia"] = "Miami-Illinois", -- Miami
["miq"] = "Miskito", -- Mískito
["mix"] = "Mixtec", -- Mixtepec Mixtec
["mni"] = "Meitei", -- Manipuri
["mrj"] = "Hill Mari", -- Western Mari
["mww"] = "White Hmong", -- Hmong Daw
["nds-nl"] = "Dutch Low Saxon", -- Low German
-- ["new"] = "Nepal Bhasa", -- Newari
["nso"] = "Northern Sotho", -- Pedi
-- ["nwc"] = "Classical Nepal Bhasa", -- Classical Newari, Classical Nepal Bhasa, Old Newari
["ood"] = "O'odham", -- Tohono O'odham
["otk"] = "Old Turkic", -- Old Turkish
["pal"] = "Middle Persian", -- Pahlavi
["pam"] = "Kapampangan", -- Pampanga
["phr"] = "Potwari", -- Pahari-Potwari
["pka"] = "Jain Prakrit", -- Ardhamāgadhī Prākrit
-- ["pnb"] = "Punjabi", -- Western Panjabi
["psu"] = "Shauraseni", -- Sauraseni Prākrit
["rap"] = "Rapa Nui", -- Rapanui
["rar"] = "Cook Islands Māori", -- Rarotongan
["rmu"] = "Scandoromani", -- Tavringer Romani
["rom"] = "Romani", -- Romany
["rup"] = "Aromanian", -- Macedo-Romanian
["ryu"] = "Okinawan", -- Central Okinawan
["sdc"] = "Sassarese", -- Sassarese Sardinian
["sdn"] = "Gallurese", -- Gallurese Sardinian
["shp"] = "Shipibo", -- Shipibo-Conibo
["src"] = "Logudorese", -- Logudorese Sardinian
["sro"] = "Campidanese", -- Campidanese Sardinian
["tkl"] = "Tokelauan", -- Tokelau
["tvl"] = "Tuvaluan", -- Tuvalu
["tyv"] = "Tuvan", -- Tuvinian
["vls"] = "West Flemish", -- Vlaams
["wep"] = "Westphalian", -- Westphalien
["xal"] = "Oirat", -- Kalmyk
["xcl"] = "Old Armenian", -- Classical Armenian
["yua"] = "Yucatec Maya", -- Yucateco
--<end do-not-edit except to comment out>--
------------------------------< P R I V A T E _ U S E _ T A G S >----------------------------------------------
["akk-x-latbabyl"] = "Late Babylonian",
["akk-x-midassyr"] = "Middle Assyrian Akkadian",
["akk-x-midbabyl"] = "Middle Babylonian Akkadian",
["akk-x-neoassyr"] = "Neo-Assyrian Akkadian",
["akk-x-neobabyl"] = "Neo-Babylonian Akkadian",
["akk-x-old"] = "Old Akkadian",
["akk-x-oldassyr"] = "Old Assyrian Akkadian",
["akk-x-oldbabyl"] = "Old Babylonian Akkadian",
["alg-x-proto"] = "Proto-Algonquian", -- alg in IANA is Algonquian languages
["ca-x-old"] = "Old Catalan",
["cel-x-proto"] = "Proto-Celtic", -- cel in IANA is Celtic languages
["egy-x-demotic"] = "Demotic Egyptian",
["egy-x-late"] = "Late Egyptian",
["egy-x-middle"] = "Middle Egyptian",
["egy-x-old"] = "Old Egyptian",
["gem-x-proto"] = "Proto-Germanic", -- gem in IANA is Germanic languages
["gmw-x-ecg"] = "East Central German",
["grc-x-aeolic"] = "Aeolic Greek", -- these grc-x-... codes are preferred alternates to the non-standard catchall code grc-gre
["grc-x-attic"] = "Attic Greek",
["grc-x-biblical"] = "Biblical Greek",
["grc-x-byzant"] = "Byzantine Greek",
["grc-x-classic"] = "Classical Greek",
["grc-x-doric"] = "Doric Greek",
["grc-x-hellen"] = "Hellenistic Greek",
["grc-x-ionic"] = "Ionic Greek",
["grc-x-koine"] = "Koinē Greek",
["grc-x-medieval"] = "Medieval Greek",
["grc-x-patris"] = "Patristic Greek",
["grk-x-proto"] = "Proto-Greek", -- grk in IANA is Greek languages
["iir-x-proto"] = "Proto-Indo-Iranian", -- iir in IANA is Indo-Iranian Languages
["ine-x-proto"] = "Proto-Indo-European",
["ira-x-proto"] = "Proto-Iranian", -- ira in IANA is Iranian languages
["itc-x-proto"] = "Proto-Italic", -- itc in IANA is Italic languages
["ksh-x-colog"] = "Colognian", -- en.wiki article is Colognian; ksh (Kölsch) redirects there
["la-x-medieval"] = "Medieval Latin",
["la-x-new"] = "New Latin",
["lmo-x-milanese"] = "Milanese", -- lmo in IANA is Lombard; Milanese is a dialect
["mis-x-ripuar"] = "Ripuarian", -- replaces improper use of ksh in wp_languages
["prg-x-old"] = "Old Prussian",
["sem-x-ammonite"] = "Ammonite",
["sem-x-aramaic"] = "Aramaic",
["sem-x-canaan"] = "Canaanite languages",
["sem-x-dumaitic"] = "Dumaitic",
["sem-x-egurage"] = "Eastern Gurage",
["sem-x-hatran"] = "Hatran Aramaic",
["sem-x-oldsoara"] = "Old South Arabian",
["sem-x-palmyren"] = "Palmyrene Aramaic",
["sem-x-proto"] = "Proto-Semitic",
["sem-x-taymanit"] = "Taymanitic",
["sla-x-proto"] = "Proto-Slavic", -- sla in IANA is Slavic languages
["yuf-x-hav"] = "Havasupai", -- IANA name for these three is Havasupai-Walapai-Yavapai
["yuf-x-wal"] = "Walapai",
["yuf-x-yav"] = "Yavapai",
}
--[[--------------------------< A R T I C L E _ L I N K >------------------------------------------------------
for those rare occasions when article titles don't fit with the normal '<language name>-language', this table
maps language code to article title. Use of this table should be avoided and the use of redirects preferred as
that is the long-standing method of handling article names that don't fit with the normal pattern
]]
local article_name = {
['kue'] = "Kuman language (New Guinea)", -- Kuman (Papua New Guinea); to avoid Kuman dab page
["lij"] = "Ligurian (Romance language)", -- Ligurian; see Template_talk:Lang#Ligurian_dab
['mbo'] = "Mbo language (Cameroon)", -- Mbo (Cameroon)
['mnh'] = "Mono language (Congo)", -- Mono (Democratic Republic of Congo); see Template_talk:Lang#Mono_languages
['mnr'] = "Mono language (California)", -- Mono (USA)
['mru'] = "Mono language (Cameroon)", -- Mono (Cameroon)
['qwm'] = "Kuman (Russia)", -- Kuman (Russia); to avoid Kuman dab page
["snq"] = "Sangu language (Gabon)", -- Sangu (Gabon)
["xlg"] = "Ligurian (ancient language)", -- see Template_talk:Lang#Ligurian_dab
["zmw"] = "Mbo language (Congo)", -- Mbo (Democratic Republic of Congo)
}
--[=[-------------------------< R T L _ S C R I P T S >--------------------------------------------------------
ISO 15924 scripts that are written right-to-left. Data in this table taken from [[ISO 15924#List of codes]]
last update to this list: 2017-12-24
]=]
local rtl_scripts = {
'adlm', 'arab', 'aran', 'armi', 'avst', 'cprt', 'egyd', 'egyh', 'hatr', 'hebr',
'hung', 'inds', 'khar', 'lydi', 'mand', 'mani', 'mend', 'merc', 'mero', 'narb',
'nbat', 'nkoo', 'orkh', 'palm', 'phli', 'phlp', 'phlv', 'phnx', 'prti', 'rohg',
'samr', 'sarb', 'sogd', 'sogo', 'syrc', 'syre', 'syrj', 'syrn', 'thaa', 'wole',
};
--[[--------------------------< T R A N S L I T _ T I T L E S >------------------------------------------------
This is a table of tables of transliteration standards and the language codes or language scripts that apply to
those standards. This table is used to create the tool-tip text associated with the transliterated text displayed
by some of the {{lang-??}} templates.
These tables are more-or-less copied directly from {{transl}}. The standard 'NO_STD' is a construct to allow for
the cases when no |std= parameter value is provided.
]]
local translit_title_table = {
['ahl'] = {
['default'] = 'Academy of the Hebrew Language transliteration',
},
['ala'] = {
['default'] = 'American Library Association – Library of Congress transliteration',
},
['ala-lc'] = {
['default'] = 'American Library Association – Library of Congress transliteration',
},
['batr'] = {
['default'] = 'Bikdash Arabic Transliteration Rules',
},
['bgn/pcgn'] = {
['default'] = 'Board on Geographic Names / Permanent Committee on Geographical Names transliteration',
},
['din'] = {
['ar'] = 'DIN 31635 Arabic',
['fa'] = 'DIN 31635 Arabic',
['ku'] = 'DIN 31635 Arabic',
['ps'] = 'DIN 31635 Arabic',
['tg'] = 'DIN 31635 Arabic',
['ug'] = 'DIN 31635 Arabic',
['ur'] = 'DIN 31635 Arabic',
['arab'] = 'DIN 31635 Arabic',
['default'] = 'DIN transliteration',
},
['eae'] = {
['default'] = 'Encyclopaedia Aethiopica transliteration',
},
['hepburn'] = {
['default'] = 'Hepburn transliteration',
},
['hunterian'] = {
['default'] = 'Hunterian transliteration',
},
['iast'] = {
['default'] = 'International Alphabet of Sanskrit transliteration',
},
['iso'] = { -- when a transliteration standard is supplied
['ab'] = 'ISO 9 Cyrillic',
['ba'] = 'ISO 9 Cyrillic',
['be'] = 'ISO 9 Cyrillic',
['bg'] = 'ISO 9 Cyrillic',
['kk'] = 'ISO 9 Cyrillic',
['ky'] = 'ISO 9 Cyrillic',
['mn'] = 'ISO 9 Cyrillic',
['ru'] = 'ISO 9 Cyrillic',
['tg'] = 'ISO 9 Cyrillic',
['uk'] = 'ISO 9 Cyrillic',
['bua'] = 'ISO 9 Cyrillic',
['sah'] = 'ISO 9 Cyrillic',
['tut'] = 'ISO 9 Cyrillic',
['xal'] = 'ISO 9 Cyrillic',
['cyrl'] = 'ISO 9 Cyrillic',
['ar'] = 'ISO 233 Arabic',
['ku'] = 'ISO 233 Arabic',
['ps'] = 'ISO 233 Arabic',
['ug'] = 'ISO 233 Arabic',
['ur'] = 'ISO 233 Arabic',
['arab'] = 'ISO 233 Arabic',
['he'] = 'ISO 259 Hebrew',
['yi'] = 'ISO 259 Hebrew',
['hebr'] = 'ISO 259 Hebrew',
['el'] = 'ISO 843 Greek',
['grc'] = 'ISO 843 Greek',
['ja'] = 'ISO 3602 Japanese',
['hira'] = 'ISO 3602 Japanese',
['hrkt'] = 'ISO 3602 Japanese',
['jpan'] = 'ISO 3602 Japanese',
['kana'] = 'ISO 3602 Japanese',
['zh'] = 'ISO 7098 Chinese',
['chi'] = 'ISO 7098 Chinese',
['pny'] = 'ISO 7098 Chinese',
['zho'] = 'ISO 7098 Chinese',
-- ['han'] = 'ISO 7098 Chinese', -- unicode alias of Hani? doesn't belong here? should be Hani?
['hans'] = 'ISO 7098 Chinese',
['hant'] = 'ISO 7098 Chinese',
['ka'] = 'ISO 9984 Georgian',
['kat'] = 'ISO 9984 Georgian',
['arm'] = 'ISO 9985 Armenian',
['hy'] = 'ISO 9985 Armenian',
['th'] = 'ISO 11940 Thai',
['tha'] = 'ISO 11940 Thai',
['ko'] = 'ISO 11941 Korean',
['kor'] = 'ISO 11941 Korean',
['awa'] = 'ISO 15919 Indic',
['bho'] = 'ISO 15919 Indic',
['bn'] = 'ISO 15919 Indic',
['bra'] = 'ISO 15919 Indic',
['doi'] = 'ISO 15919 Indic',
['dra'] = 'ISO 15919 Indic',
['gon'] = 'ISO 15919 Indic',
['gu'] = 'ISO 15919 Indic',
['hi'] = 'ISO 15919 Indic',
['hno'] = 'ISO 15919 Indic',
['inc'] = 'ISO 15919 Indic',
['kn'] = 'ISO 15919 Indic',
['kok'] = 'ISO 15919 Indic',
['ks'] = 'ISO 15919 Indic',
['mag'] = 'ISO 15919 Indic',
['mai'] = 'ISO 15919 Indic',
['ml'] = 'ISO 15919 Indic',
['mr'] = 'ISO 15919 Indic',
['ne'] = 'ISO 15919 Indic',
['new'] = 'ISO 15919 Indic',
['or'] = 'ISO 15919 Indic',
['pa'] = 'ISO 15919 Indic',
['pnb'] = 'ISO 15919 Indic',
['raj'] = 'ISO 15919 Indic',
['sa'] = 'ISO 15919 Indic',
['sat'] = 'ISO 15919 Indic',
['sd'] = 'ISO 15919 Indic',
['si'] = 'ISO 15919 Indic',
['skr'] = 'ISO 15919 Indic',
['ta'] = 'ISO 15919 Indic',
['tcy'] = 'ISO 15919 Indic',
['te'] = 'ISO 15919 Indic',
['beng'] = 'ISO 15919 Indic',
['brah'] = 'ISO 15919 Indic',
['deva'] = 'ISO 15919 Indic',
['gujr'] = 'ISO 15919 Indic',
['guru'] = 'ISO 15919 Indic',
['knda'] = 'ISO 15919 Indic',
['mlym'] = 'ISO 15919 Indic',
['orya'] = 'ISO 15919 Indic',
['sinh'] = 'ISO 15919 Indic',
['taml'] = 'ISO 15919 Indic',
['telu'] = 'ISO 15919 Indic',
['default'] = 'ISO transliteration',
},
['jyutping'] = {
['default'] = 'Jyutping transliteration',
},
['mlcts'] = {
['default'] = 'Myanmar Language Commission Transcription System',
},
['mr'] = {
['default'] = 'McCune–Reischauer transliteration',
},
['nihon-shiki'] = {
['default'] = 'Nihon-shiki transliteration',
},
['no_std'] = { -- when no transliteration standard is supplied
['akk'] = 'Semitic transliteration',
['sem'] = 'Semitic transliteration',
['phnx'] = 'Semitic transliteration',
['xsux'] = 'Cuneiform transliteration',
},
['pinyin'] = {
['default'] = 'Pinyin transliteration',
},
['rr'] = {
['default'] = 'Revised Romanization of Korean transliteration',
},
['rtgs'] = {
['default'] = 'Royal Thai General System of Transcription',
},
['satts'] = {
['default'] = 'Standard Arabic Technical Transliteration System transliteration',
},
['scientific'] = {
['default'] = 'scientific transliteration',
},
['ukrainian'] = {
['default'] = 'Ukrainian National system of romanization',
},
['ungegn'] = {
['default'] = 'United Nations Group of Experts on Geographical Names transliteration',
},
['wadegile'] = {
['default'] = 'Wade–Giles transliteration',
},
['wehr'] = {
['default'] = 'Hans Wehr transliteration',
},
};
return
{
this_wiki_lang_tag = this_wiki_lang_tag,
this_wiki_lang_dir = lang_obj:getDir(), -- wiki's language direction
article_name = article_name,
lang_name_table = lang_name_table_t,
override = override,
rtl_scripts = rtl_scripts,
special_tags_table = special_tags_table,
translit_title_table = translit_title_table,
};
44981b3b66900e816590946e3e049c421ebecc80
Module:Sidebar/configuration
828
51
106
2023-03-14T22:32:24Z
[[w>Izno
0
add hlist and plainlist_templatestyles keys
Scribunto
text/plain
return {
i18n = {
child_yes = 'yes',
float_none = 'none',
float_left = 'left',
wrap_true = 'true',
navbar_none = 'none',
navbar_off = 'off',
default_list_title = 'List',
title_not_to_add_navbar = 'Template:Sidebar',
collapse_title_not_to_add_navbar = 'Template:Sidebar with collapsible lists',
templatestyles = 'Module:Sidebar/styles.css',
hlist_templatestyles = 'Hlist/styles.css',
plainlist_templatestyles = 'Plainlist/styles.css',
category = {
child = '[[Category:Pages using sidebar with the child parameter]]',
conversion = '[[Category:Sidebars with styles needing conversion]]'
},
pattern = {
collapse_sandbox = '/sandbox$',
sandbox = '/sandbox$',
subgroup = 'sidebar%-subgroup',
style_conversion = 'style$',
uncategorized_conversion_titles = {
'/[Ss]andbox',
'/[Tt]estcases',
'/[Dd]oc$'
}
},
class = {
sidebar = 'sidebar',
subgroup = 'sidebar-subgroup',
collapse = 'sidebar-collapse',
float_none = 'sidebar-none',
float_left = 'sidebar-left',
wraplinks = 'nowraplinks',
outer_title = 'sidebar-outer-title',
top_image = 'sidebar-top-image',
top_caption = 'sidebar-top-caption',
pretitle = 'sidebar-pretitle',
pretitle_with_top_image = 'sidebar-pretitle-with-top-image',
title = 'sidebar-title',
title_with_pretitle = 'sidebar-title-with-pretitle',
image = 'sidebar-image',
caption = 'sidebar-caption',
above = 'sidebar-above',
heading = 'sidebar-heading',
content = 'sidebar-content',
content_with_subgroup = 'sidebar-content-with-subgroup',
below = 'sidebar-below',
navbar = 'sidebar-navbar',
list = 'sidebar-list',
list_title = 'sidebar-list-title',
list_title_centered = 'sidebar-list-title-c',
list_content = 'sidebar-list-content'
}
}
}
dc2a980ac2162a898f7c21e6d6ba7e994dfeb315
Module:Sidebar
828
50
104
2023-03-14T22:35:53Z
[[w>Izno
0
move these items to config, discovered during work at meta
Scribunto
text/plain
require('strict')
local cfg = mw.loadData('Module:Sidebar/configuration')
local p = {}
local getArgs = require('Module:Arguments').getArgs
--[[
Categorizes calling templates and modules with a 'style' parameter of any sort
for tracking to convert to TemplateStyles.
TODO after a long cleanup: Catch sidebars in other namespaces than Template and Module.
TODO would probably want to remove /log and /archive as CS1 does
]]
local function categorizeTemplatesWithInlineStyles(args)
local title = mw.title.getCurrentTitle()
if title.namespace ~= 10 and title.namespace ~= 828 then return '' end
for _, pattern in ipairs (cfg.i18n.pattern.uncategorized_conversion_titles) do
if title.text:match(pattern) then return '' end
end
for key, _ in pairs(args) do
if mw.ustring.find(key, cfg.i18n.pattern.style_conversion) or key == 'width' then
return cfg.i18n.category.conversion
end
end
end
--[[
For compatibility with the original {{sidebar with collapsible lists}}
implementation, which passed some parameters through {{#if}} to trim their
whitespace. This also triggered the automatic newline behavior.
]]
-- See ([[meta:Help:Newlines and spaces#Automatic newline]])
local function trimAndAddAutomaticNewline(s)
s = mw.ustring.gsub(s, "^%s*(.-)%s*$", "%1")
if mw.ustring.find(s, '^[#*:;]') or mw.ustring.find(s, '^{|') then
return '\n' .. s
else
return s
end
end
--[[
Finds whether a sidebar has a subgroup sidebar.
]]
local function hasSubgroup(s)
if mw.ustring.find(s, cfg.i18n.pattern.subgroup) then
return true
else
return false
end
end
local function has_navbar(navbar_mode, sidebar_name)
return navbar_mode ~= cfg.i18n.navbar_none and
navbar_mode ~= cfg.i18n.navbar_off and
(
sidebar_name or
mw.getCurrentFrame():getParent():getTitle():gsub(cfg.i18n.pattern.sandbox, '') ~=
cfg.i18n.title_not_to_add_navbar
)
end
local function has_list_class(args, htmlclass)
local patterns = {
'^' .. htmlclass .. '$',
'%s' .. htmlclass .. '$',
'^' .. htmlclass .. '%s',
'%s' .. htmlclass .. '%s'
}
for arg, value in pairs(args) do
if type(arg) == 'string' and mw.ustring.find(arg, 'class') then
for _, pattern in ipairs(patterns) do
if mw.ustring.find(args[arg] or '', pattern) then
return true
end
end
end
end
return false
end
-- there are a lot of list classes in the wild, so we add their TemplateStyles
local function add_list_styles(args)
local frame = mw.getCurrentFrame()
local function add_list_templatestyles(htmlclass, templatestyles)
if has_list_class(args, htmlclass) then
return frame:extensionTag{
name = 'templatestyles', args = { src = templatestyles }
}
else
return ''
end
end
local plainlist_styles = add_list_templatestyles('plainlist', cfg.i18n.plainlist_templatestyles)
local hlist_styles = add_list_templatestyles('hlist', cfg.i18n.hlist_templatestyles)
-- a second workaround for [[phab:T303378]]
-- when that issue is fixed, we can actually use has_navbar not to emit the
-- tag here if we want
if has_navbar(args.navbar, args.name) and hlist_styles == '' then
hlist_styles = frame:extensionTag{
name = 'templatestyles', args = { src = cfg.i18n.hlist_templatestyles}
}
end
-- hlist -> plainlist is best-effort to preserve old Common.css ordering. [hlist_note]
return hlist_styles .. plainlist_styles
end
-- work around [[phab:T303378]]
-- for each arg: find all the templatestyles strip markers, insert them into a
-- table. then remove all templatestyles markers from the arg
local function move_hiding_templatestyles(args)
local gfind = string.gfind
local gsub = string.gsub
local templatestyles_markers = {}
local strip_marker_pattern = '(\127[^\127]*UNIQ%-%-templatestyles%-%x+%-QINU[^\127]*\127)'
for k, arg in pairs(args) do
for marker in gfind(arg, strip_marker_pattern) do
table.insert(templatestyles_markers, marker)
end
args[k] = gsub(arg, strip_marker_pattern, '')
end
return templatestyles_markers
end
--[[
Main sidebar function. Takes the frame, args, and an optional collapsibleClass.
The collapsibleClass is and should be used only for sidebars with collapsible
lists, as in p.collapsible.
]]
function p.sidebar(frame, args, collapsibleClass)
if not args then
args = getArgs(frame)
end
local hiding_templatestyles = table.concat(move_hiding_templatestyles(args))
local root = mw.html.create()
local child = args.child and mw.text.trim(args.child) == cfg.i18n.child_yes
root = root:tag('table')
if not child then
root
:addClass(cfg.i18n.class.sidebar)
-- force collapsibleclass to be sidebar-collapse otherwise output nothing
:addClass(collapsibleClass == cfg.i18n.class.collapse and cfg.i18n.class.collapse or nil)
:addClass('nomobile')
:addClass(args.float == cfg.i18n.float_none and cfg.i18n.class.float_none or nil)
:addClass(args.float == cfg.i18n.float_left and cfg.i18n.class.float_left or nil)
:addClass(args.wraplinks ~= cfg.i18n.wrap_true and cfg.i18n.class.wraplinks or nil)
:addClass(args.bodyclass or args.class)
:css('width', args.width or nil)
:cssText(args.bodystyle or args.style)
if args.outertitle then
root
:tag('caption')
:addClass(cfg.i18n.class.outer_title)
:addClass(args.outertitleclass)
:cssText(args.outertitlestyle)
:wikitext(args.outertitle)
end
if args.topimage then
local imageCell = root:tag('tr'):tag('td')
imageCell
:addClass(cfg.i18n.class.top_image)
:addClass(args.topimageclass)
:cssText(args.topimagestyle)
:wikitext(args.topimage)
if args.topcaption then
imageCell
:tag('div')
:addClass(cfg.i18n.class.top_caption)
:cssText(args.topcaptionstyle)
:wikitext(args.topcaption)
end
end
if args.pretitle then
root
:tag('tr')
:tag('td')
:addClass(args.topimage and cfg.i18n.class.pretitle_with_top_image
or cfg.i18n.class.pretitle)
:addClass(args.pretitleclass)
:cssText(args.basestyle)
:cssText(args.pretitlestyle)
:wikitext(args.pretitle)
end
else
root
:addClass(cfg.i18n.class.subgroup)
:addClass(args.bodyclass or args.class)
:cssText(args.bodystyle or args.style)
end
if args.title then
if child then
root
:wikitext(args.title)
else
root
:tag('tr')
:tag('th')
:addClass(args.pretitle and cfg.i18n.class.title_with_pretitle
or cfg.i18n.class.title)
:addClass(args.titleclass)
:cssText(args.basestyle)
:cssText(args.titlestyle)
:wikitext(args.title)
end
end
if args.image then
local imageCell = root:tag('tr'):tag('td')
imageCell
:addClass(cfg.i18n.class.image)
:addClass(args.imageclass)
:cssText(args.imagestyle)
:wikitext(args.image)
if args.caption then
imageCell
:tag('div')
:addClass(cfg.i18n.class.caption)
:cssText(args.captionstyle)
:wikitext(args.caption)
end
end
if args.above then
root
:tag('tr')
:tag('td')
:addClass(cfg.i18n.class.above)
:addClass(args.aboveclass)
:cssText(args.abovestyle)
:newline() -- newline required for bullet-points to work
:wikitext(args.above)
end
local rowNums = {}
for k, v in pairs(args) do
k = '' .. k
local num = k:match('^heading(%d+)$') or k:match('^content(%d+)$')
if num then table.insert(rowNums, tonumber(num)) end
end
table.sort(rowNums)
-- remove duplicates from the list (e.g. 3 will be duplicated if both heading3
-- and content3 are specified)
for i = #rowNums, 1, -1 do
if rowNums[i] == rowNums[i - 1] then
table.remove(rowNums, i)
end
end
for i, num in ipairs(rowNums) do
local heading = args['heading' .. num]
if heading then
root
:tag('tr')
:tag('th')
:addClass(cfg.i18n.class.heading)
:addClass(args.headingclass)
:addClass(args['heading' .. num .. 'class'])
:cssText(args.basestyle)
:cssText(args.headingstyle)
:cssText(args['heading' .. num .. 'style'])
:newline()
:wikitext(heading)
end
local content = args['content' .. num]
if content then
root
:tag('tr')
:tag('td')
:addClass(hasSubgroup(content) and cfg.i18n.class.content_with_subgroup
or cfg.i18n.class.content)
:addClass(args.contentclass)
:addClass(args['content' .. num .. 'class'])
:cssText(args.contentstyle)
:cssText(args['content' .. num .. 'style'])
:newline()
:wikitext(content)
:done()
-- Without a linebreak after the </td>, a nested list like
-- "* {{hlist| ...}}" doesn't parse correctly.
:newline()
end
end
if args.below then
root
:tag('tr')
:tag('td')
:addClass(cfg.i18n.class.below)
:addClass(args.belowclass)
:cssText(args.belowstyle)
:newline()
:wikitext(args.below)
end
if not child and has_navbar(args.navbar, args.name) then
root
:tag('tr')
:tag('td')
:addClass(cfg.i18n.class.navbar)
:cssText(args.navbarstyle)
:wikitext(require('Module:Navbar')._navbar{
args.name,
mini = 1,
fontstyle = args.navbarfontstyle
})
end
local base_templatestyles = frame:extensionTag{
name = 'templatestyles', args = { src = cfg.i18n.templatestyles }
}
local templatestyles = ''
if args['templatestyles'] and args['templatestyles'] ~= '' then
templatestyles = frame:extensionTag{
name = 'templatestyles', args = { src = args['templatestyles'] }
}
end
local child_templatestyles = ''
if args['child templatestyles'] and args['child templatestyles'] ~= '' then
child_templatestyles = frame:extensionTag{
name = 'templatestyles', args = { src = args['child templatestyles'] }
}
end
local grandchild_templatestyles = ''
if args['grandchild templatestyles'] and args['grandchild templatestyles'] ~= '' then
grandchild_templatestyles = frame:extensionTag{
name = 'templatestyles', args = { src = args['grandchild templatestyles'] }
}
end
return table.concat({
add_list_styles(args), -- see [hlist_note] above about ordering
base_templatestyles,
templatestyles,
child_templatestyles,
grandchild_templatestyles,
hiding_templatestyles,
tostring(root),
(child and cfg.i18n.category.child or ''),
categorizeTemplatesWithInlineStyles(args)
})
end
local function list_title(args, is_centered_list_titles, num)
local title_text = trimAndAddAutomaticNewline(args['list' .. num .. 'title']
or cfg.i18n.default_list_title)
local title
if is_centered_list_titles then
-- collapsible can be finicky, so provide some CSS/HTML to support
title = mw.html.create('div')
:addClass(cfg.i18n.class.list_title_centered)
:wikitext(title_text)
else
title = mw.html.create()
:wikitext(title_text)
end
local title_container = mw.html.create('div')
:addClass(cfg.i18n.class.list_title)
-- don't /need/ a listnumtitleclass because you can do
-- .templateclass .listnumclass .sidebar-list-title
:addClass(args.listtitleclass)
:cssText(args.basestyle)
:cssText(args.listtitlestyle)
:cssText(args['list' .. num .. 'titlestyle'])
:node(title)
:done()
return title_container
end
--[[
Main entry point for sidebar with collapsible lists.
Does the work of creating the collapsible lists themselves and including them
into the args.
]]
function p.collapsible(frame)
local args = getArgs(frame)
if not args.name and
frame:getParent():getTitle():gsub(cfg.i18n.pattern.collapse_sandbox, '') ==
cfg.i18n.collapse_title_not_to_add_navbar then
args.navbar = cfg.i18n.navbar_none
end
local contentArgs = {}
local is_centered_list_titles = false
if args['centered list titles'] and args['centered list titles'] ~= '' then
is_centered_list_titles = true
end
for k, v in pairs(args) do
local num = string.match(k, '^list(%d+)$')
if num then
local expand = args.expanded and
(args.expanded == 'all' or args.expanded == args['list' .. num .. 'name'])
local row = mw.html.create('div')
row
:addClass(cfg.i18n.class.list)
:addClass('mw-collapsible')
:addClass((not expand) and 'mw-collapsed' or nil)
:addClass(args['list' .. num .. 'class'])
:cssText(args.listframestyle)
:cssText(args['list' .. num .. 'framestyle'])
:node(list_title(args, is_centered_list_titles, num))
:tag('div')
:addClass(cfg.i18n.class.list_content)
:addClass('mw-collapsible-content')
-- don't /need/ a listnumstyleclass because you can do
-- .templatename .listnumclass .sidebar-list
:addClass(args.listclass)
:cssText(args.liststyle)
:cssText(args['list' .. num .. 'style'])
:wikitext(trimAndAddAutomaticNewline(args['list' .. num]))
contentArgs['content' .. num] = tostring(row)
end
end
for k, v in pairs(contentArgs) do
args[k] = v
end
return p.sidebar(frame, args, cfg.i18n.class.collapse)
end
return p
71fe765846593e025ca2f94371315e9dbb5bb4d2
Template:If empty
10
201
2068
408
2023-03-21T04:15:21Z
dev>Pppery
0
Rv
wikitext
text/x-wiki
<includeonly>{{{{{|safesubst:}}}#if:{{{1|}}}
| {{{1}}}
| {{{{{|safesubst:}}}#if:{{{2|}}}
| {{{2}}}
| {{{{{|safesubst:}}}#if:{{{3|}}}
| {{{3}}}
| {{{{{|safesubst:}}}#if:{{{4|}}}
| {{{4}}}
| {{{{{|safesubst:}}}#if:{{{5|}}}
| {{{5}}}
| {{{{{|safesubst:}}}#if:{{{6|}}}
| {{{6}}}
| {{{{{|safesubst:}}}#if:{{{7|}}}
| {{{7}}}
| {{{{{|safesubst:}}}#if:{{{8|}}}
| {{{8}}}
| {{{{{|safesubst:}}}#if:{{{9|}}}
| {{{9}}}
}}
}}
}}
}}
}}
}}
}}
}}
}}</includeonly><noinclude>
{{Documentation}}
<!-- Add categories and interwikis to the /doc subpage, not here! -->
</noinclude>
eeda2c13231e9a8b44d480e8c429d73652575009
Template:Infobox character
10
1009
2062
2023-03-21T04:32:31Z
dev>Pppery
0
wikitext
text/x-wiki
{{Infobox
| bodystyle = border-spacing: 2px 5px;
| above = {{If empty |{{{name|}}} |<includeonly>{{PAGENAMEBASE}}</includeonly> }}
| abovestyle = background: {{If empty |{{{color|}}} |{{{colour|}}} |#DEDEE2 }}; {{#if: {{{color|}}}{{{colour|}}} | color: {{Greater color contrast ratio|{{If empty |{{{color|}}} |{{{colour|}}} }}|black|white }}; }}
| subheader = {{#if: {{{series|}}}{{{franchise|}}} | {{#if: {{{series|}}} | ''{{{series|}}}'' | {{{franchise|}}} }} character{{#if: {{{multiple|}}} | s }} }}
| image = {{{image|}}}|
| caption = {{{caption|}}}
| headerstyle = background: {{If empty |{{{color|}}} |{{{colour|}}} |#DEDEE2 }}; {{#if: {{{color|}}}{{{colour|}}} |color: {{Greater color contrast ratio|{{If empty |{{{color|}}} |{{{colour|}}} }}|black|white }}; }}
| label1 = First appearance
| data1 = {{#if: {{{first|}}} | {{{first|}}} | {{#invoke:Formatted appearance|getFormattedAppearance|major_work={{{first_major|}}} |minor_work={{{first_minor|}}} |issue={{{first_issue|}}} |date={{{first_date|}}} }} }}
| label2 = First game
| data2 = {{{firstgame|}}}
| label3 = Last appearance
| data3 = {{#if: {{{last|}}} | {{{last|}}} | {{#invoke:Formatted appearance|getFormattedAppearance|major_work={{{last_major|}}} |minor_work={{{last_minor|}}} |issue={{{last_issue|}}} |date={{{last_date|}}} }} }}
| label4 = Created by
| data4 = {{{creator|}}}
| label5 = Based on
| data5 = {{{based_on|}}}
| label6 = Adapted by
| data6 = {{{adapted_by|}}}
| label7 = Designed by
| data7 = {{{designer|}}}
| label8 = Portrayed by
| data8 = {{{portrayer|}}}
| label9 = Voiced by
| data9 = {{{voice|}}}
| label10 = Motion capture
| data10 = {{{motion_actor|}}}
| label11 = {{{lbl1|}}}
| data11 = {{{data1|}}}
| label12 = {{{lbl2|}}}
| data12 = {{{data2|}}}
| label13 = {{{lbl3|}}}
| data13 = {{{data3|}}}
| label14 = {{{lbl4|}}}
| data14 = {{{data4|}}}
| label15 = {{{lbl5|}}}
| data15 = {{{data5|}}}
| header20 = {{#if: {{{noinfo|}}} || {{#if: {{{full_name|}}} {{{alias|}}} {{{aliases|}}} {{{nickname|}}} {{{nicknames|}}} {{{race|}}} {{{species|}}} {{{gender|}}} {{{title|}}} {{{occupation|}}} {{{position|}}} {{{class|}}} {{{affiliation|}}} {{{alignment|}}} {{{fighting_style|}}} {{{weapon|}}} {{{family|}}} {{{spouse|}}} {{{spouses|}}} {{{significant_other|}}} {{{significant_others|}}} {{{children|}}} {{{relatives|}}} {{{religion|}}} {{{origin|}}} {{{home|}}} {{{nationality|}}} {{{data21|}}} {{{data22|}}} {{{data23|}}} {{{data24|}}} {{{data25|}}} | {{If empty |{{{info-hdr|}}} |In-universe information }} }} }}
| label21 = Full name
| data21 = {{{full_name|}}}
| label22 = {{#if: {{{alias|}}} | Alias | Aliases }}
| data22 = {{If empty |{{{alias|}}} |{{{aliases|}}} }}
| label23 = {{#if: {{{nickname|}}} | Nickname | Nicknames }}
| data23 = {{If empty |{{{nickname|}}} |{{{nicknames|}}} }}
| label24 = {{#if: {{{race|}}} | Race | Species }}
| data24 = {{If empty |{{{race|}}} |{{{species|}}} }}
| label25 = Gender
| data25 = {{{gender|}}}
| label26 = Title
| data26 = {{{title|}}}
| label27 = {{#if: {{{occupation|}}} | Occupation | {{#if: {{{position|}}} | Position | Class }} }}
| data27 = {{If empty |{{{occupation|}}} |{{{position|}}} |{{{class|}}} }}
| label28 = {{#if: {{{affiliation|}}} | Affiliation | Alignment }}
| data28 = {{If empty |{{{affiliation|}}} |{{{alignment|}}} }}
| label29 = Fighting style
| data29 = {{{fighting_style|}}}
| label30 = Weapon
| data30 = {{{weapon|}}}
| label31 = Family
| data31 = {{{family|}}}
| label32 = {{#if: {{{spouse|}}} | Spouse | Spouses }}
| data32 = {{If empty |{{{spouse|}}} |{{{spouses|}}} }}
| label33 = {{#if: {{{significant_other|}}} | Significant other | Significant others }}
| data33 = {{If empty |{{{significant_other|}}} |{{{significant_others|}}} }}
| label34 = Children
| data34 = {{{children|}}}
| label35 = Relatives
| data35 = {{{relatives|}}}
| label36 = Religion
| data36 = {{{religion|}}}
| label37 = {{#if: {{{origin|}}} | Origin | Home }}
| data37 = {{If empty |{{{origin|}}} |{{{home|}}} }}
| label38 = Nationality
| data38 = {{{nationality|}}}
| label39 = {{{lbl21|}}}
| data39 = {{{data21|}}}
| label40 = {{{lbl22|}}}
| data40 = {{{data22|}}}
| label41 = {{{lbl23|}}}
| data41 = {{{data23|}}}
| label42 = {{{lbl24|}}}
| data42 = {{{data24|}}}
| label43 = {{{lbl25|}}}
| data43 = {{{data25|}}}
| header50 = {{#if: {{{data31|}}} {{{data32|}}} {{{data33|}}} {{{data34|}}} {{{data35|}}} | {{{extra-hdr|}}} }}
| label51 = {{{lbl31|}}}
| data51 = {{{data31|}}}
| label52 = {{{lbl32|}}}
| data52 = {{{data32|}}}
| label53 = {{{lbl33|}}}
| data53 = {{{data33|}}}
| label54 = {{{lbl34|}}}
| data54 = {{{data34|}}}
| label55 = {{{lbl35|}}}
| data55 = {{{data35|}}}
}}<noinclude>
{{Documentation}}
<!-- Add categories to the /doc subpage, not here! -->
</noinclude>
3ce93cfa3dfb9b4b9608b850f3d4e6ac282b3bc9
Template:Infobox character/doc
10
1011
2072
2023-03-21T04:33:54Z
dev>Pppery
0
wikitext
text/x-wiki
{{Documentation subpage}}
'''Infobox character''' is used to create an infobox for a fictional character of any type.
== Usage ==
The blank form immediately below shows the most commonly used fields, and complete instructions are listed further down the page.
{{Infobox character
| name = {{{name}}}
| series = {{{series}}}
| image = {{{image}}}
| alt = {{{alt}}}
| caption = {{{caption}}}
| first_major = {{{first_major}}}
| first_minor = {{{first_minor}}}
| first_date = {{{first_date}}}
| last_major = {{{last_major}}}
| last_minor = {{{last_minor}}}
| last_date = {{{last_date}}}
| creator = {{{creator}}}
| based_on = {{{based_on}}}
| adapted_by = {{{adapted_by}}}
| designer = {{{designer}}}
| portrayer = {{{portrayer}}}
| voice = {{{voice}}}
| motion_actor = {{{motion_actor}}}
| full_name = {{{full_name}}}
| nickname = {{{nickname}}}
| alias = {{{alias}}}
| species = {{{species}}}
| gender = {{{gender}}}
| title = {{{title}}}
| occupation = {{{occupation}}}
| affiliation = {{{affiliation}}}
| fighting_style = {{{fighting_style}}}
| weapon = {{{weapon}}}
| family = {{{family}}}
| spouse = {{{spouse}}}
| significant_other = {{{significant_other}}}
| children = {{{children}}}
| relatives = {{{relatives}}}
| religion = {{{religion}}}
| origin = {{{origin}}}
| nationality = {{{nationality}}}
}}
<syntaxhighlight lang="html" style="overflow:auto">{{Infobox character
| color = <!-- headers background color; the foreground color is automatically computed -->
| name =
| series = <!-- or |franchise=; use without the italic on the outside -->
| image =
| alt =
| caption =
| first_major = <!-- per [[MOS:MAJORWORK]] - major works include TV series, films, books, albums and games -->
| first_minor = <!-- or |first_issue=; Per [[MOS:MINORWORK]] - minor works include TV episodes, chapters, songs and game missions -->
| first_date =
| first = <!-- Use instead of first_major= etc. when custom or complex formatting is needed. -->
| last_major =
| last_minor = <!-- or |last_issue= -->
| last_date =
| last = <!-- Use instead of last_major= etc. when custom or complex formatting is needed. -->
| creator = <!-- only the credited creators; use adapted_by= for adaptations -->
| based_on = <!-- if not an original creation, use {{based on|character|author}} -->
| adapted_by = <!-- for character adaption articles -->
| designer =
| portrayer =
| voice =
| motion_actor =
| full_name =
| nickname = <!-- or |nicknames= -->
| alias = <!-- or |aliases= -->
| species = <!-- or |race=; for non-humans only -->
| gender = <!-- if not obvious -->
| title =
| occupation = <!-- or |position= or |class= -->
| affiliation = <!-- or |alignment= -->
| fighting_style =
| weapon =
| family =
| spouse = <!-- or |spouses= -->
| significant_other = <!-- or |significant_others= -->
| children =
| relatives =
| religion =
| origin = <!-- or |home= -->
| nationality =
}}</syntaxhighlight>
== Parameters ==
All parameters are optional.
{| class="wikitable"
|-
! scope="col" | Parameter
! scope="col" | Notes
|-
! scope="row" | color
| Background color for header bars (default = #DEDEE2). The text color is automatically determined. Must meet AAA compliance standards outlines on [[WP:COLOR]].
|-
! scope="row" | name
| Character name to display in top header (default = PAGENAME).
|-
! scope="row" | series
| Name of the series in which the character appears.
|-
! scope="row" | franchise
| Name of the fictional world or story in which the character appears. Does not italicize title.
|-
! scope="row" | multiple
| Set to yes if the infobox describes more than one character.
|-
! scope="row" | image
| Image of the character. "File:" and wikilinking is not required. i.e. use {{para|image|Example.png}}.
|-
! scope="row" | image_upright
| The image size defaults to frameless (220px). The size should not be set to a value that would result in an image width greater than 270px.
|-
! scope="row" | alt
| Alt text for image
|-
! scope="row" | caption
| A caption explaining the image.
|-
! scope="row" | first_major
| The title of the major work the fictional element first appeared in. Major works include TV series, films, books, albums and games.
|-
! scope="row" | first_minor
| The title of the minor work the fictional element first appeared in. Minor works include TV episodes, chapters, songs and game missions.
|-
! scope="row" | first_issue
| The number of the comic book issue the fictional element first appeared in.
|-
! scope="row" | first_date
| The date of the publication/release of the minor work where the fictional element first appeared in.
|-
! scope="row" | last_major
| The title of the major work the fictional element last appeared in. Major works include TV series, films, books, albums and games.
|-
! scope="row" | last_minor
| The title of the minor work the fictional element last appeared in. Minor works include TV episodes, chapters, songs and game missions.
|-
! scope="row" | last_issue
| The number of the comic book issue the fictional element last appeared in.
|-
! scope="row" | last_date
| The date of the publication/release of the minor work where the fictional element last appeared in.
|-
! scope="row" | first
| First appearance of the character.
|-
! scope="row" | firstgame
| First appearance in a game of the character.
|-
! scope="row" | last
| Last appearance of the character.
|-
! scope="row" | creator
| Name of the individuals who are credited with the creation of the character.
|-
! scope="row" | based_on
| Name of the original character the adaptation is based on. Use this field in conjunction with {{para|adapted_by}}.
|-
! scope="row" | adapted_by
| Name of the individuals who adapted the character into a new medium. Use this field if the character in a medium is based on a character from a different medium, such as a character on television based on a comic book character.
|-
! scope="row" | designer
| Name of the individuals who designed the character.
|-
! scope="row" | portrayer
| Name of the individuals who portrayed the character.
|-
! scope="row" | voice
| Name of the individuals who voiced the character. Should be omitted if the same as "portrayer".
|-
! scope="row" | motion_actor
| Name of the individuals who portrayed the character in motion capture.
|-
! scope="row" | noinfo
| Disable the first "In-universe information" header.
|-
! scope="row" | info-hdr
| Text for display in second header (default = Information).
|-
! scope="row" | full_name
| The character's full name.
|-
! scope="row" | nickname/nicknames
| Any nicknames used by the character.
|-
! scope="row" | alias/aliases
| Any aliases used by the character.
|-
! scope="row" | species/race
| The species or race of the character. Use for non-human characters only.
|-
! scope="row" | gender
| The gender of the character. Use only if not obvious.
|-
! scope="row" | title
| Titles the character was known by.
|-
! scope="row" | occupation/position
| The character's job or role.
|-
! scope="row" | class
| The character class for RPG characters.
|-
! scope="row" | affiliation
| The groups or teams the character belongs to.
|-
! scope="row" | alignment
| The character's Dungeons & Dragons alignment.
|-
! scope="row" | fighting_style
| The primary fighting styles used by the character.
|-
! scope="row" | weapon
| The types of weapons the character uses.
|-
! scope="row" | family
| The character's family members.
|-
! scope="row" | spouse/spouses
| The character's spouses.
|-
! scope="row" | significant_other/significant_others
| The character's significant others.
|-
! scope="row" | children
| The characters's children.
|-
! scope="row" | relatives
| The characters's relatives.
|-
! scope="row" | religion
| The character's religion.
|-
! scope="row" | origin/home
| The character's place of origin.
|-
! scope="row" | nationality
| The character's nationality.
|-
! scope="row" | extra-hdr
| Text for display in third header (default = No third header).
|-
! scope="row" | lbl#
| Label to display in left column where "#" is 1-5, 21-25, or 31-35 for custom fields under the 1st, 2nd, or 3rd headers respectively.
|-
! scope="row" | data#
| Text to display in the right column corresponding to the appropriate "lbl#".
|}
===TemplateData===
<templatedata>
{
"description": "Creates an infobox for a fictional character of any type.",
"params": {
"color": {
"label": "Color",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Background color for header bars (default = #DEDEE2). The text color is automatically computed. Must meet AAA compliance standards outlines on [[WP:COLOR]].",
"aliases": [
"colour"
]
},
"name": {
"label": "Name",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Character name to display in top header (default = PAGENAME)."
},
"series": {
"label": "Series",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Name of the series in which the character appears."
},
"franchise": {
"label": "Franchise",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Name of the fictional world or story in which the character appears. Does not italicize title."
},
"multiple": {
"label": "Multiple",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Set to yes if the infobox describes more than one character."
},
"image": {
"label": "Image",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Image of the character. \"File:\" and wikilinking is not required. i.e. use {{para|image|Example.png}}."
},
"image_upright": {
"label": "Image upright",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The image size defaults to frameless (220px). The size should not be set to a value that would result in an image width greater than 270px."
},
"alt": {
"label": "Alt",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Alt text for image per [[WP:MOSALT]]."
},
"caption": {
"label": "Caption",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "A caption explaining the image."
},
"first_major": {
"label": "First appearance major",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The title of the major work the fictional element first appeared in. Major works include TV series, films, books, albums and games."
},
"first_minor": {
"label": "First appearance minor",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The title of the minor work the fictional element first appeared in. Minor works include TV episodes, chapters, songs and game missions."
},
"first_issue": {
"label": "First appearance issue",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The number of the comic book issue the fictional element first appeared in."
},
"first_date": {
"label": "First appearance date",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The date of the publication/release of the minor work where the fictional element first appeared in."
},
"last_major": {
"label": "Last appearance major",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The title of the major work the fictional element last appeared in. Major works include TV series, films, books, albums and games."
},
"last_minor": {
"label": "Last appearance minor",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The title of the minor work the fictional element last appeared in. Minor works include TV episodes, chapters, songs and game missions."
},
"last_issue": {
"label": "Last appearance issue",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The number of the comic book issue the fictional element last appeared in."
},
"last_date": {
"label": "Last appearance date",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The date of the publication/release of the minor work where the fictional element last appeared in."
},
"first": {
"label": "First appearance",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "First appearance of the character."
},
"firstgame": {
"label": "First game",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "First appearance in a game of the character."
},
"last": {
"label": "Last appearance",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Last appearance of the character."
},
"creator": {
"label": "Creator",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Name of the individuals who are credited with the creation of the character."
},
"based_on": {
"label": "Based on",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Name of the original character the adaptation is based on. Use {{based on}} to add the title of original character and the names of the original creators. Use this field in conjunction with {{para|adapted_by}}."
},
"adapted_by": {
"label": "Adapted by",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Name of the individuals who adapted the character into a new medium. Use this field if the character in a medium is based on a character from a different medium, such as a character on television based on a comic book character."
},
"designer": {
"label": "Designer",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Name of the individuals who designed the character."
},
"portrayer": {
"label": "Portrayer",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Name of the individuals who portrayed the character."
},
"voice": {
"label": "Voice actor",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Name of the individuals who voiced the character (if different from portrayer or there is no portrayer)"
},
"motion_actor": {
"label": "Motion actor",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Name of the individuals who portrayed the character in motion capture."
},
"lbl1": {
"label": "Label 1",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Label to display in left column for custom fields under the 1st header."
},
"data1": {
"label": "Data 1",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Text to display in the right column corresponding to lbl1."
},
"lbl2": {
"label": "Label 2",
"inherits": "lbl1"
},
"data2": {
"label": "Data 2",
"description": "Text to display in the right column corresponding to lbl2.",
"inherits": "data1"
},
"lbl3": {
"label": "Label 3",
"inherits": "lbl1"
},
"data3": {
"label": "Data 3",
"description": "Text to display in the right column corresponding to lbl3.",
"inherits": "data1"
},
"lbl4": {
"label": "Label 4",
"inherits": "lbl1"
},
"data4": {
"label": "Data 4",
"description": "Text to display in the right column corresponding to lbl4.",
"inherits": "data1"
},
"lbl5": {
"label": "Label 5",
"inherits": "lbl1"
},
"data5": {
"label": "Data 5",
"description": "Text to display in the right column corresponding to lbl5.",
"inherits": "data1"
},
"noinfo": {
"label": "Disable second header",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Disable the first \"In-universe information\" header."
},
"info-hdr": {
"label": "Second header text",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Text for display in second header (default = Information)."
},
"full_name": {
"label": "Full name",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The character's full name."
},
"nickname": {
"label": "Nickname",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "A nickname used by the character. If there is more than one nickname, use {{para|nicknames}}."
},
"nicknames": {
"label": "Nicknames",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Any nicknames used by the character. If there is only one nickname, use {{para|nickname}}."
},
"alias": {
"label": "Alias",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "An alias used by the character. If there is more than one alias, use {{para|aliases}}."
},
"aliases": {
"label": "Alias",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Any aliases used by the character. If there is only one alias, use {{para|alias}}."
},
"species": {
"label": "Species",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The species of the character. Use for non-human characters only."
},
"race": {
"label": "Race",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The race of the character. Use for non-human characters only."
},
"gender": {
"label": "Gender",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The gender of the character. Use only if not obvious."
},
"title": {
"label": "Title",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Titles the character was known by."
},
"occupation": {
"label": "Occupation",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The character's job or role."
},
"position": {
"label": "Position",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The character's job or role."
},
"class": {
"label": "Class",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The character class for RPG characters."
},
"affiliation": {
"label": "Affiliation",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The groups or teams the character belongs to."
},
"alignment": {
"label": "Alignment",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The character's Dungeons & Dragons alignment."
},
"fighting_style": {
"label": "Fighting style",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The primary fighting styles used by the character."
},
"weapon": {
"label": "Weapon",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The types of weapons the character uses."
},
"family": {
"label": "Family",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The character's family members."
},
"spouse": {
"label": "Spouse",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The character's spouses."
},
"spouses": {
"label": "Spouses",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The character's spouses."
},
"significant_other": {
"label": "Significant other",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The character's significant others. If there is more than one significant_other, use {{para|significant_others}}."
},
"significant_others": {
"label": "Significant others",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The character's significant others. If there is only one significant_other, use {{para|significant_other}}."
},
"children": {
"label": "Children",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The characters's children"
},
"relatives": {
"label": "Relatives",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The characters's relatives"
},
"religion": {
"label": "Religion",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The character's religion"
},
"origin": {
"label": "Origin",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The character's place of origin."
},
"home": {
"label": "Home",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The character's place of origin."
},
"nationality": {
"label": "Nationality",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The character's nationality."
},
"lbl21": {
"label": "Label 21",
"description": "Label to display in left column for custom fields under the 2nd header.",
"inherits": "lbl1"
},
"data21": {
"label": "Data 21",
"description": "Text to display in the right column corresponding to lbl21.",
"inherits": "data1"
},
"lbl22": {
"label": "Label 22",
"inherits": "lbl21"
},
"data22": {
"label": "Data 22",
"description": "Text to display in the right column corresponding to lbl22.",
"inherits": "data1"
},
"lbl23": {
"label": "Label 23",
"inherits": "lbl21"
},
"data23": {
"label": "Data 23",
"description": "Text to display in the right column corresponding to lbl23.",
"inherits": "data1"
},
"lbl24": {
"label": "Label 24",
"inherits": "lbl21"
},
"data24": {
"label": "Data 24",
"description": "Text to display in the right column corresponding to lbl24.",
"inherits": "data1"
},
"lbl25": {
"label": "Label 25",
"inherits": "lbl21"
},
"data25": {
"label": "Data 25",
"description": "Text to display in the right column corresponding to lbl25.",
"inherits": "data1"
},
"extra-hdr": {
"label": "Third header text",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Text for display in third header (default = No third header)."
},
"lbl31": {
"label": "Label 31",
"description": "Label to display in left column for custom fields under the 3rd header.",
"inherits": "lbl22"
},
"data31": {
"label": "Data 31",
"description": "Text to display in the right column corresponding to lbl31.",
"inherits": "data1"
},
"lbl32": {
"label": "Label 32",
"inherits": "lbl31"
},
"data32": {
"label": "Data 32",
"description": "Text to display in the right column corresponding to lbl32.",
"inherits": "data1"
},
"lbl33": {
"label": "Label 33",
"inherits": "lbl31"
},
"data33": {
"label": "Data 33",
"description": "Text to display in the right column corresponding to lbl33.",
"inherits": "data1"
},
"lbl34": {
"label": "Label 34",
"inherits": "lbl31"
},
"data34": {
"label": "Data 34",
"description": "Text to display in the right column corresponding to lbl34.",
"inherits": "data1"
},
"lbl35": {
"label": "Label 35",
"inherits": "lbl31"
},
"data35": {
"label": "Data 35",
"description": "Text to display in the right column corresponding to lbl35.",
"inherits": "data1"
}
},
"format": "block"
}
</templatedata>
=== All parameters (not for general use) ===
<pre>{{Infobox character
| color = <!-- headers background colour; the foreground colour is automatically computed -->
| name =
| series = <!-- or |franchise=; use without the italic on the outside -->
| multiple =
| image =
| image_upright =
| alt =
| caption =
| first_major = <!-- per [[MOS:MAJORWORK]] - major works include TV series, films, books, albums and games -->
| first_minor = <!-- or |first_issue=; Per [[MOS:MINORWORK]] - minor works include TV episodes, chapters, songs and game missions -->
| first_date =
| last_major =
| last_minor = <!-- or |last_issue= -->
| last_date =
| first =
| firstgame =
| last =
| creator = <!-- only the credited creators; use adapted_by= for adaptations -->
| based_on = <!-- if not an original creation, use {{based on|character|author}} -->
| adapted_by = <!-- for character adaption articles -->
| designer =
| portrayer =
| voice =
| motion_actor =
| lbl1 =
| data1 =
| lbl2 =
| data2 =
| lbl3 =
| data3 =
| lbl4 =
| data4 =
| lbl5 =
| data5 =
| noinfo =
| info-hdr =
| full_name =
| nickname = <!-- or |nicknames= -->
| alias = <!-- or |aliases= -->
| species = <!-- or |race=; for non-humans only -->
| gender = <!-- if not obvious -->
| title =
| occupation = <!-- or |position= or |class= -->
| affiliation = <!-- or |alignment= -->
| fighting_style =
| weapon =
| family =
| spouse = <!-- or |spouses= -->
| significant_other = <!-- or |significant_others= -->
| children =
| relatives =
| religion =
| origin = <!-- or |home= -->
| nationality =
| lbl21 =
| data21 =
| lbl22 =
| data22 =
| lbl23 =
| data23 =
| lbl24 =
| data24 =
| lbl25 =
| data25 =
| extra-hdr =
| lbl31 =
| data31 =
| lbl32 =
| data32 =
| lbl33 =
| data33 =
| lbl34 =
| data34 =
| lbl35 =
| data35 =
}}</pre>
== Example ==
{{Infobox character
| name = John Doe
| series = [[Criminal Minds]]
| image =
| caption =
| first_major = Criminal Minds
| first_minor = Pilot
| first_date = 2005
| last_major = Criminal Minds
| last_minor = Last One
| last_date = 2018
| creator = [[Agnes Nixon]]
| portrayer = [[Soupy Sales]]
| nickname = Doeboy
| alias = Jack Dew
| gender = Male
| title = Detective
| occupation = Law enforcement
| family = Doe
| spouse = Jane Doe
| significant_other =
| children = John Doe, Jr.
| relatives = Phil Doe (father), Nancy Doe (mother)
| religion = [[Christianity|Christian]]
| nationality = American
}}
<syntaxhighlight lang="moin">
{{Infobox character
| name = John Doe
| series = [[Criminal Minds]]
| image =
| caption =
| first_major = Criminal Minds
| first_minor = Pilot
| first_date = 2005
| last_major = Criminal Minds
| last_minor = Last One
| last_date = 2018
| creator = [[Agnes Nixon]]
| portrayer = [[Soupy Sales]]
| nickname = Doeboy
| alias = Jack Dew
| gender = Male
| title = Detective
| occupation = Law enforcement
| family = Doe
| spouse = Jane Doe
| significant_other =
| children = John Doe, Jr.
| relatives = Phil Doe (father), Nancy Doe (mother)
| religion = [[Christianity|Christian]]
| nationality = American
}}
</syntaxhighlight>
<includeonly>
[[Category:Templates]]
</includeonly>
c3b5673c7b9ea096939919c0cf7da9d3440d78e7
Help:Infobox/user style
12
80
164
2023-04-03T14:00:08Z
[[w>Maddy from Celeste
0
blatant self-promotion
wikitext
text/x-wiki
{{{heading|
==Infoboxes and user style ==
}}}
Users can have [[WP:User style|user CSS]] that hides<!--, moves, or makes collapsible--> any infoboxes in their own browsers.
To hide all infoboxes, add the following to [[Special:MyPage/common.css]] (for all [[WP:Skin|skins]], or [[Special:MyPage/skin.css]] for just the current skin), on a line by itself:
<syntaxhighlight lang="css">div.mw-parser-output .infobox { display: none; }</syntaxhighlight>
Alternatively, you can add the following code to [[Special:MyPage/common.js|your common.js]] or into a browser user script that is executed by an extension like [[Greasemonkey]]:
<syntaxhighlight lang="js">$('.infobox').hide();</syntaxhighlight>
Be aware that although{{#if:{{{guideline|}}}||, per [[WP:Manual of Style/Infoboxes]],}} all information in an infobox ideally should also be found in the main body of an article, there isn't perfect compliance with this guideline. For example, the full taxonomic hierarchy in {{tlx|Taxobox}}, and the OMIM and other medical database codes of {{tlx|Infobox disease}} are often not found in the main article content. The infobox is also often the location of the most significant, even only, image in an article. There is a userscript which removes infoboxes but moves the images contained to separate thumbnails: [[User:Maddy from Celeste/disinfobox.js]].<!--
Needs Special:Mypage/common.js options for:
* Making infoboxes collapsible
** Making them auto-collapsed
* Moving infoboxes to bottom of page
--><noinclude>
{{Documentation|content=
This documentation snippet is transcluded at [[Help:Infobox]], [[Template:Infobox/doc]], [[WP:Customisation#Hiding specific messages]], [[Help:User style]], [[WP:Manual of Style/Infoboxes]], and other places where this information is relevant.
As a template, this snippet takes a {{para|heading}} parameter to replace the level-2 <code>==Infoboxes and user style==</code> section heading code, as needed. E.g., for a <code>=== ... ===</code> level-3 heading: <code><nowiki>heading={{=}}{{=}}{{=}}Infoboxes and user style{{=}}{{=}}{{=}}</nowiki></code>
}}
</noinclude>
ba4dac68eb2bdc49a32f2a11b9afd52381bf06b5
Template:Collapse top
10
254
514
2023-04-07T02:02:13Z
[[w>Izno
0
per tech news
wikitext
text/x-wiki
<div style="margin-left:{{{indent|0}}}"><!-- NOTE: width renders incorrectly if added to main STYLE section -->
{| <!-- Template:Collapse top --> class="mw-collapsible mw-archivedtalk {{<includeonly>safesubst:</includeonly>#if:{{{expand|{{{collapse|}}}}}}||mw-collapsed}} {{{class|}}}" style="background: {{{bg1|transparent}}}; text-align: left; border: {{{border|1px}}} solid {{{b-color|Silver}}}; margin: 0.2em auto auto; width:{{<includeonly>safesubst:</includeonly>#if:{{{width|}}}|{{{width}}}|100%}}; clear: {{{clear|both}}}; padding: 1px;"
|-
! style="background: {{{bg|#{{main other|F0F2F5|CCFFCC}}}}}; font-size:87%; padding:0.2em 0.3em; text-align:{{<includeonly>safesubst:</includeonly>#if:{{{left|}}}|left|{{<includeonly>safesubst:</includeonly>#if:{{{align|}}}|left|center}}}}; {{<includeonly>safesubst:</includeonly>#if:{{{fc|}}}|color: {{{fc}}};|}}" | <div style="font-size:115%;{{<includeonly>safesubst:</includeonly>#if:{{{left|}}}||margin:0 4em}}">{{{1|{{{title|{{{reason|{{{header|{{{heading|{{{result|Extended content}}}}}}}}}}}}}}}}}}</div>
{{<includeonly>safesubst:</includeonly>#if:{{{warning|{{{2|}}}}}}
|{{<includeonly>safesubst:</includeonly>!}}-
{{<includeonly>safesubst:</includeonly>!}} style="text-align:center; font-style:italic;" {{<includeonly>safesubst:</includeonly>!}} {{{2|The following is a closed discussion. {{strongbad|Please do not modify it.}} }}} }}
|-
| style="border: solid {{{border2|1px Silver}}}; padding: {{{padding|0.6em}}}; background: {{{bg2|White}}};" {{<includeonly>safesubst:</includeonly>!}}<noinclude>
{{lorem ipsum|3}}
{{Collapse bottom}}
{{Documentation}}
</noinclude>
247cc43d5198baf8804d0926529cbbdd7be91113
Template:High-risk
10
309
624
2023-04-09T16:46:44Z
[[w>Nagsb
0
wikitext
text/x-wiki
#REDIRECT [[Template:High-use]]
{{Rcat shell|
{{R with Wikidata item}}
{{R from merge}}
{{R from template shortcut}}
}}
52c9a8c75748fd2b20183ed6c60e1f3c3a435cc9
Template:Uses TemplateStyles
10
89
180
2023-04-18T22:22:16Z
[[w>Grufo
0
Move the preview inside the documentation
wikitext
text/x-wiki
<includeonly>{{#invoke:Uses TemplateStyles|main}}</includeonly><noinclude>{{documentation}}
<!-- Categories go on the /doc subpage and interwikis go on Wikidata. -->
</noinclude>
60f2fc73c4d69b292455879f9fcb3c68f6c63c2a
Module:Convert/text
828
192
389
2023-04-19T04:48:47Z
[[w>Johnuniq
0
update from sandbox per [[Template talk:Convert#Module version 28]]
Scribunto
text/plain
-- Text used by Module:Convert for enwiki.
-- This is a separate module to simplify translation for use on another wiki.
-- See [[:en:Template:Convert/Transwiki guide]] if copying to another wiki.
-- Some units accept an SI prefix before the unit code, such as "kg" for kilogram.
local SIprefixes = {
-- The prefix field is what the prefix should be, if different from the prefix used.
['Q'] = { exponent = 30, name = 'quetta', },
['R'] = { exponent = 27, name = 'ronna', },
['Y'] = { exponent = 24, name = 'yotta', },
['Z'] = { exponent = 21, name = 'zetta', },
['E'] = { exponent = 18, name = 'exa' , },
['P'] = { exponent = 15, name = 'peta' , },
['T'] = { exponent = 12, name = 'tera' , },
['G'] = { exponent = 9, name = 'giga' , },
['M'] = { exponent = 6, name = 'mega' , },
['k'] = { exponent = 3, name = 'kilo' , },
['h'] = { exponent = 2, name = 'hecto', },
['da']= { exponent = 1, name = 'deca' , name_us = 'deka' },
['d'] = { exponent = -1, name = 'deci' , },
['c'] = { exponent = -2, name = 'centi', },
['m'] = { exponent = -3, name = 'milli', },
['μ'] = { exponent = -6, name = 'micro', }, -- key = 'GREEK SMALL LETTER MU' (U+03BC) utf-8 CE BC
['µ'] = { exponent = -6, name = 'micro', prefix = 'μ' }, -- key = 'MICRO SIGN' (U+00B5) utf-8 C2 B5
['u'] = { exponent = -6, name = 'micro', prefix = 'μ' }, -- not an SI prefix, but allow for people typing this
['n'] = { exponent = -9, name = 'nano' , },
['p'] = { exponent =-12, name = 'pico' , },
['f'] = { exponent =-15, name = 'femto', },
['a'] = { exponent =-18, name = 'atto' , },
['z'] = { exponent =-21, name = 'zepto', },
['y'] = { exponent =-24, name = 'yocto', },
['r'] = { exponent =-27, name = 'ronto', },
['q'] = { exponent =-30, name = 'quecto', },
}
-- Some units can be qualified with one of the following prefixes, when linked.
local customary_units = {
{ "US", link = "United States customary units" },
{ "U.S.", link = "United States customary units" },
{ "imperial", link = "Imperial units" },
{ "imp", link = "Imperial units" },
}
-- Names when using engineering notation (a prefix of "eN" where N is a number; example "e6km").
-- key = { "name", link = "article title", exponent = numeric_key_value }
-- If lk=on and link is defined, the name of the number will appear as a link.
local eng_scales = {
["3"] = { "thousand", exponent = 3 },
["6"] = { "million", exponent = 6 },
["9"] = { "billion", link = "1000000000 (number)", exponent = 9 },
["12"] = { "trillion", link = "1000000000000 (number)", exponent = 12 },
["15"] = { "quadrillion", link = "1000000000000000 (number)", exponent = 15 },
}
local all_categories = {
unit = "[[Category:Convert errors]]",
option = "[[Category:Convert errors]]",
warning = '[[Category:Convert invalid options]]',
tracking = '[[Category:Convert tracking]]',
}
-- For some error messages, the following puts the wanted style around
-- each unit code marked like '...%{ft%}...'.
local unitcode_regex = '%%([{}])'
local unitcode_replace = { ['{'] = '"', ['}'] = '"' } -- no longer need the more elaborate substitute used before 2013-09-28
-- All messages that may be displayed if a problem occurs.
local all_messages = {
-- Message format string: $1=title, $2=text, $3=category, $4=anchor.
-- Each displayed message starts with "Convert:" so can easily locate by searching article.
cvt_format = '<sup class="noprint Inline-Template" style="white-space:nowrap;">[<i>[[Help:Convert messages#$4|<span title="Convert: $1">convert: $2</span>]]</i>]</sup>$3<span class="error"></span>',
cvt_format2 = '<sup class="noprint Inline-Template" style="white-space:nowrap;">[[Help:Convert messages#$4|<span title="Convert: $1">$2</span>]]</sup>$3<span class="error"></span>',
cvt_format_preview = '<strong class="error">Error in convert: $1 [[Help:Convert messages#$4|(help)]]</strong>$3',
-- Each of following messages is a table:
-- { [1] = 'title', -- mouseover title text
-- [2] = 'text', -- link text displayed in article
-- [3] = 'category key', -- key to lookup category in all_categories
-- [4] = 'anchor', -- anchor for link to relevant section on help page
-- regex = gsub_regex,
-- replace = gsub_table,
-- } Mouseover title text Link text CatKey Anchor
cvt_bad_input = { 'input "$1" must be a number and unit' , 'invalid input' , 'option', 'invalid_input' },
cvt_bad_num = { 'Value "$1" must be a number' , 'invalid number' , 'option', 'invalid_number' },
cvt_big_prec = { 'Precision "$1" is too large' , 'precision too large' , 'option', 'precision_too_large' },
cvt_invalid_num = { 'Number has overflowed' , 'number overflow' , 'option', 'number_overflow' },
cvt_no_num = { 'Needs the number to be converted' , 'needs a number' , 'option', 'needs_number' },
cvt_no_num2 = { 'Needs another number for a range' , 'needs another number', 'option', 'needs_another_number' },
cvt_bad_altitude = { '"$1" needs an integer' , 'invalid altitude' , 'option', 'invalid_altitude' },
cvt_bad_frac = { '"$1" needs an integer above 1' , 'invalid fraction' , 'option', 'invalid_fraction' },
cvt_bad_prec = { 'Precision "$1" must be an integer' , 'invalid precision' , 'option', 'invalid_precision' },
cvt_bad_sigfig = { '"$1" needs a positive integer' , 'invalid sigfig' , 'option', 'invalid_sigfig' },
cvt_empty_option = { 'Ignored empty option "$1"' , 'empty option' , 'option', 'empty_option' },
cvt_deprecated = { 'Option "$1" is deprecated' , '*' , 'option', 'deprecated_option', format = 'cvt_format2', nowarn = true },
cvt_no_spell = { 'Spelling is not available' , 'bug, ask for help' , 'option', 'ask_for_help' },
cvt_unknown_option = { 'Ignored invalid option "$1"' , 'invalid option' , 'option', 'invalid_option' },
cvt_wd_fail = { 'Unable to access Wikidata' , 'wikidata problem' , 'option', 'wikidata_problem' },
cvt_bad_default = { 'Unit "$1" has an invalid default' , 'bug, ask for help' , 'unit' , 'ask_for_help' },
cvt_bad_unit = { 'Unit "$1" is invalid here' , 'unit invalid here' , 'unit' , 'unit_invalid_here' },
cvt_no_default = { 'Unit "$1" has no default output unit' , 'bug, ask for help' , 'unit' , 'ask_for_help' },
cvt_no_unit = { 'Needs name of unit' , 'needs unit name' , 'unit' , 'needs_unit_name' },
cvt_unknown = { 'Unit name "$1" is not known' , 'unknown unit' , 'unit' , 'unknown_unit' },
cvt_should_be = { '$1' , 'ambiguous unit' , 'unit' , 'ambiguous_unit', regex = unitcode_regex, replace = unitcode_replace },
cvt_mismatch = { 'Cannot convert "$1" to "$2"' , 'unit mismatch' , 'unit' , 'unit_mismatch' },
cvt_bug_convert = { 'Bug: Cannot convert between specified units', 'bug, ask for help' , 'unit' , 'ask_for_help' },
cvt_lookup = { 'Unit "$1" is incorrectly defined' , 'bug, ask for help' , 'unit' , 'ask_for_help' },
}
-- Text to join input value/unit with output value/unit.
local disp_joins = {
-- [1]=before output, [2]=after output, [3]=between outputs in a combination; default "; "
-- [wantname] gives default abbr=off
["or"] = { " or " , "" , " or ", wantname = true },
["sqbr-sp"] = { " [" , "]" },
["sqbr-nbsp"] = { " [" , "]" },
["comma"] = { ", " , "" , ", " },
["semicolon"] = { "; " , "" },
["slash-sp"] = { " / " , "" , wantname = true },
["slash-nbsp"] = { " / ", "" , wantname = true },
["slash-nosp"] = { "/" , "" , wantname = true },
["b"] = { " (" , ")" },
["(or)"] = { " (" , ")", " or " },
["br"] = { "<br />" , "" , wantname = true },
["br()"] = { "<br />(" , ")", wantname = true },
}
-- Text to separate values in a range.
local range_types = {
-- Specifying a table requires either:
-- * "off" and "on" values (for "abbr=off" and "abbr=on"), or
-- * "input" and "output" values (for LHS and RHS);
-- other fields are optional.
-- When "adj=on|abbr=off" applies, spaces in range text are replaced with hyphens.
-- With "exception = true", that also occurs with "adj=on|abbr=on".
-- If "adj" is defined here, that text (unchanged) is used with "adj=on".
["+"] = " + ",
[","] = ", ",
[", and"] = ", and ",
[", or"] = ", or ",
["by"] = " by ",
["-"] = "–",
["to about"] = " to about ",
["and"] = { off = " and ", on = " and ", exception = true },
["and(-)"] = { input = " and ", output = "–" },
["or"] = { off = " or " , on = " or " , exception = true },
["to"] = { off = " to " , on = " to " , exception = true },
["to(-)"] = { input = " to ", output = "–" },
["+/-"] = { off = " ± ", on = " ± ", adj = " ± ", is_range_change = true },
["by(x)"] = { input = " by ", output = " × ", out_range_x = true },
["x"] = { off = " by ", on = " × ", abbr_range_x = true },
["xx"] = " × ",
["*"] = "×",
["/"] = " / ", -- for a table of high/low temperatures with {{convert|83|/|63|F|disp=br()|abbr=values}}
}
local range_aliases = {
-- ["alternative name for a range"] = "standard range name"
["–"] = "-",
["–"] = "-",
["×"] = "x",
["×"] = "x",
["±"] = "+/-",
["±"] = "+/-",
}
-- Convert accepts range text delimited with whitespace, for example, {{convert|1 to 2|ft}}.
-- In addition, the following "words" are accepted without spaces, for example, {{convert|1-2|ft}}.
-- Words must be in correct order for searching, for example, 'x' after 'xx'.
local range_words = { '-', '–', 'xx', 'x', '*' }
local ranges = {
types = range_types,
aliases = range_aliases,
words = range_words,
}
-- Valid option names.
local en_option_name = {
-- ["local text for option name"] = "en name used in this module"
["$"] = "$",
["abbr"] = "abbr",
["adj"] = "adj",
["altitude_ft"] = "altitude_ft",
["altitude_m"] = "altitude_m",
["comma"] = "comma",
["debug"] = "debug",
["disp"] = "disp",
["frac"] = "frac",
["input"] = "input",
["lang"] = "lang",
["lk"] = "lk",
["order"] = "order",
["qid"] = "qid",
["qual"] = "qual",
["qualifier"] = "qual",
["round"] = "round",
["sigfig"] = "sigfig",
["sing"] = "adj", -- "sing" is an old alias for "adj"
["sortable"] = "sortable",
["sp"] = "sp",
["spell"] = "spell",
["stylein"] = "stylein",
["styleout"] = "styleout",
["tracking"] = "tracking",
}
-- Valid option values.
-- Convention: parms.opt_xxx refers to an option that is set here
-- (not intended to be set by the template which invokes this module).
-- Example: At enwiki, "abbr" includes:
-- ["values"] = "opt_values"
-- As a result, if the template uses abbr=values, Module:Convert sets:
-- parms["opt_values"] = true
-- parms["abbr"] = nil
-- Therefore parms.abbr will be nil, or will have one of the listed values
-- that do not start with "opt_".
-- An option value of form "xxx?" is the same as "xxx" but shows the input as deprecated.
local en_option_value = {
["$"] = 'TEXT', -- TEXT should be a currency symbol that will be used instead of "$"
["abbr"] = {
-- ["local text for option value"] = "en value used in this module"
["def"] = "", -- ignored (some wrapper templates call convert with "abbr=def" to mean "default abbreviation")
["h"] = "on", -- abbr=on + use "h" for hand unit (default)
["hh"] = "opt_hand_hh", -- abbr=on + use "hh" for hand unit
["in"] = "in", -- use symbol for LHS unit
["none"] = "off", -- old name for "off"
["off"] = "off", -- use name for all units
["on"] = "on", -- use symbol for all units
["out"] = "out", -- use symbol for RHS unit (default)
["unit"] = "unit", -- abbr=on but abbreviate units only: e6km → million km (not ×10⁶ km)
["values"] = "opt_values", -- show only input and output numbers, not units
["~"] = "opt_also_symbol", -- show input unit symbol as well as name
},
["adj"] = {
["mid"] = "opt_adjectival, opt_adj_mid", -- adj=on with user-specified text after input unit (between input and output)
["off"] = "", -- ignored (off is the default)
["on"] = "opt_adjectival", -- unit name is singular and hyphenated
["pre"] = "opt_one_preunit", -- user-specified text before input unit
["ri0"] = "opt_ri=0", -- round input with precision = 0
["ri1"] = "opt_ri=1", -- round input with precision = 1
["ri2"] = "opt_ri=2", -- round input with precision = 2
["ri3"] = "opt_ri=3", -- round input with precision = 3
},
["altitude_ft"] = 'INTEGER',
["altitude_m"] = 'INTEGER',
["comma"] = {
["5"] = "opt_comma5", -- only use numsep grouping if 5 or more digits
["gaps"] = "opt_gaps", -- use gaps, not numsep, to separate groups of digits
["gaps3"] = "opt_gaps, opt_gaps3", -- group only in threes rather than default of no gap before a single digit after decimal mark
["off"] = "opt_nocomma", -- no numsep in input or output numbers
},
["debug"] = {
["yes"] = "opt_sortable_debug", -- make the normally hidden sort key visible
},
["disp"] = {
["5"] = "opt_round=5?", -- round output value to nearest 5
["b"] = "b", -- join: '(...)'
["(or)"] = "(or)", -- join: '(...)' with 'or' between outputs in a combination
["br"] = "br", -- join: '<br />'
["br()"] = "br()", -- join: '<br />(...)'
["comma"] = "comma", -- join: ','
["flip"] = "opt_flip", -- reverse order of input/output
["number"] = "opt_output_number_only", -- display output value (not input, and not output symbol/name)
["or"] = "or", -- join: 'or'
["out"] = "opt_output_only",
["output number only"] = "opt_output_number_only",
["output only"] = "opt_output_only",
["preunit"] = "opt_two_preunits", -- user-specified text before input and output units
["semicolon"] = "semicolon", -- join: ';'
["sqbr"] = "sqbr", -- join: '[...]'
["table"] = "opt_table", -- output is suitable for a table cell with align="right"
["tablecen"] = "opt_tablecen", -- output is suitable for a table cell with align="center"
["unit"] = "opt_input_unit_only", -- display input symbol/name (not output, and not input value)
["unit or text"] = "opt_input_unit_only, opt_ignore_error", -- display input symbol/name, or given unit code if not known
["unit2"] = "opt_output_unit_only",
["x"] = "x", -- join: <first>...<second> (user-specified text)
},
["frac"] = 'INTEGER',
["input"] = 'TEXT', -- TEXT should be value><space><unitcode> or <wikidata-property-id>
["lang"] = { -- language for output digits (both en and local digits are always accepted for input)
["en"] = "opt_lang_en", -- use en digits for numbers, regardless of local language
["local"] = "opt_lang_local", -- use local digits for numbers (default, although config can change default to en)
},
["lk"] = {
["in"] = "in", -- link LHS unit name or symbol
["off"] = "off", -- do not link: same as default except for hand unit
["on"] = "on", -- link all unit names or symbols (but not twice for the same unit)
["out"] = "out", -- link RHS unit name or symbol
},
["order"] = {
["flip"] = "opt_flip", -- reverse order of input/output
["out"] = "opt_order_out", -- do not show input; instead, use order in output combination, with the first output shown as the input
},
["qid"] = 'TEXT', -- TEXT should be a Wikidata Q item identifier
["qual"] = 'TEXT', -- TEXT should be a Wikidata Q item identifier
["round"] = {
["0.5"] = "opt_round=0.5", -- round output value to nearest 0.5
["5"] = "opt_round=5", -- round output value to nearest 5
["10"] = "opt_round=10", -- round output value to nearest 10 (same as but clearer than "|-1")
["25"] = "opt_round=25", -- round output value to nearest 25
["50"] = "opt_round=50", -- round output value to nearest 50
["each"] = "opt_round_each", -- using default precision in a range, round each output separately (default uses highest precision of each item in range)
},
["sigfig"] = 'INTEGER',
["sortable"] = {
["off"] = "", -- ignored (off is the default)
["on"] = "opt_sortable_on", -- output sort key for use in a sortable table, based on value from converting to a standard base unit
["debug"] = "opt_sortable_on, opt_sortable_debug", -- |sortable=debug is the same as |sortable=on|debug=yes
},
["sp"] = {
["us"] = "opt_sp_us", -- use U.S. spelling (like "meter" instead of default "metre")
},
["spell"] = { -- only English spelling is supported; not scientific notation; only some fractions
["in"] = "opt_spell_in", -- spell input value in words
["In"] = "opt_spell_in, opt_spell_upper", -- spell input value in words with first letter uppercase
["on"] = "opt_spell_in, opt_spell_out", -- spell input and output values in words
["On"] = "opt_spell_in, opt_spell_out, opt_spell_upper", -- same, with first letter of first word in result uppercase
["us"] = "opt_sp_us", -- use U.S. spelling; same as sp=us so spell=us also works
},
["stylein"] = 'TEXT',
["styleout"] = 'TEXT',
["tracking"] = 'TEXT',
}
local titles = {
["frac"] = "Fraction/styles.css",
["sfrac"] = "Sfrac/styles.css",
}
return {
SIprefixes = SIprefixes,
all_categories = all_categories,
all_messages = all_messages,
currency = { ['$'] = true, ['£'] = true, ['€'] = true, ['₱'] = true, ['₽'] = true, ['¥'] = true },
customary_units = customary_units,
disp_joins = disp_joins,
en_option_name = en_option_name,
en_option_value = en_option_value,
eng_scales = eng_scales,
ranges = ranges,
titles = titles,
}
ff98cf24da87736f3469f82401084ca608335d55
Template:Country data Sweden
10
248
502
2023-04-19T15:46:04Z
[[w>Paine Ellsworth
0
per edit request on talk page - include flag variant
wikitext
text/x-wiki
{{ {{{1<noinclude>|country showdata</noinclude>}}}
| alias = Sweden
| flag alias = Flag of Sweden.svg
| flag alias-army = Naval Ensign of Sweden.svg
| flag alias-air force =Naval Ensign of Sweden.svg
| flag alias-1818 = Swedish and Norwegian merchant flag 1818-1844.svg
| flag alias-1844 = Swedish civil ensign (1844–1905).svg
| flag alias-1905 = Flag of Sweden (pre-1906).svg
| flag alias-naval = Naval Ensign of Sweden.svg
| flag alias-naval-1844 = Naval Ensign of Sweden (1844-1905).svg
| flag alias-naval-1815 = Swedish and Norwegian naval ensign (1815-1844).svg
| link alias-army = Swedish Army
| link alias-air force = Swedish Air Force
| link alias-naval = Swedish Navy
| flag alias-navy = Naval Ensign of Sweden.svg
| link alias-navy = Swedish Navy
| border-army =
| border-air force =
| border-naval =
| border-navy =
| border-naval-1815 =
| border-naval-1844 =
| size = {{{size|}}}
| name = {{{name|}}}
| altlink = {{{altlink|}}}
| altvar = {{{altvar|}}}
| variant = {{{variant|}}}
<noinclude>
| var1 = 1818
| var2 = 1844
| var3 = 1905
| var4 = naval-1844
| var5 = naval-1815
| redir1 = SWE
</noinclude>
}}
046def916df87772775106a1b2c5cc5e1590e529
Template:Country data Austria
10
242
490
2023-04-19T17:00:17Z
[[w>Paine Ellsworth
0
per edit request on talk page - include flag variants
wikitext
text/x-wiki
{{ {{{1<noinclude>|country showdata</noinclude>}}}
| alias = Austria
| flag alias = Flag of Austria.svg
| flag alias-empire = Flag of the Habsburg Monarchy.svg
| flag alias-state = Flag of Austria (state).svg
| flag alias-1230 = Flag of Austria (1230–1934).svg
| flag alias-war = Austria-Hungary-flag-1869-1914-naval-1786-1869-merchant.svg
| flag alias-1934 = State flag of Austria (1934–1938).svg
| flag alias-1938 = Flag of Germany (1935–1945).svg
| flag alias-army = Flag of Austria (state).svg
| flag alias-air force = Flag of Austria (state).svg
| link alias-army = Austrian Land Forces
| flag alias-naval = Flag of Austria (state).svg
| link alias-naval = Austrian Navy
| link alias-air force = Austrian Air Force
| flag alias-navy = Flag of Austria (state).svg
| link alias-navy = Austrian Navy
| size = {{{size|}}}
| name = {{{name|}}}
| altlink = {{{altlink|}}}
| variant = {{{variant|}}}
<noinclude>
| var1 = empire
| var2 = state
| var3 = 1230
| var4 = war
| var5 = 1934
| var6 = 1938
| redir1 = AUT
| redir2 = Archduchy of Austria
| related1 = Austria-Hungary
</noinclude>
}}
09169aeb2e7aab99900a74b755f38a6af79d73a8
Template:Elc
10
299
604
2023-04-19T17:10:44Z
[[w>Grufo
0
Add includeonly
wikitext
text/x-wiki
<includeonly><code>[<nowiki/>[{{{1}}}{{#if:{{{2|}}}|{{!}}{{{2}}}}}]<nowiki/>]{{{3|}}}</code></includeonly><!--
--><noinclude>
{{documentation}}
</noinclude>
d76ca6072fb7ca852811a573aa38e9026487417c
Template:Country data Poland
10
263
532
2023-04-23T23:42:12Z
[[w>Paine Ellsworth
0
per edit request on talk page - update flag of state
wikitext
text/x-wiki
{{ {{{1<noinclude>|country showdata</noinclude>}}}
| alias = Poland
| flag alias = Flag of Poland.svg
| flag alias-state = Flag of Poland (with coat of arms).svg
| flag alias-1815 = Flag of the Congress of Poland.svg
| flag alias-1919 = Flag of Poland (1919-1928).svg
| flag alias-1928 = Flag of Poland (1928–1980).svg
| flag alias-1955 = Flag of Poland (with coat of arms, 1955-1980).svg
| flag alias-1980 = Flag of Poland (with coat of arms, 1980-1990).svg
| flag alias-1990 = Flag of Poland (with coat of arms).svg
| flag alias-naval = PL navy flag IIIRP.svg
| border-naval =
| flag alias-naval-1919 = Naval Ensign of IIRP v1.svg
| border-naval-1919 =
| flag alias-naval-1946 = Naval Ensign of PRL v1.svg
| border-naval-1946 =
| flag alias-naval-auxiliary = Flaga pomocniczych jednostek pływających Polskiej Marynarki Wojennej.svg
| flag alias-naval-auxiliary-1955 = POL Bandera pjp PRL v1.svg
| link alias-naval = Polish Navy
| flag alias-navy = Naval Ensign of Poland.svg
| border-navy =
| link alias-navy = Polish Navy
| flag alias-marines = Flag of the Polish Land Forces.svg
| border-marines =
| link alias-marines = Polish 7th Coastal Defense Brigade
| flag alias-air force = PL air force flag IIIRP.svg
| border-air force =
| link alias-air force = Polish Air Force
| flag alias-army = Flag of the Polish Land Forces.svg
| border-army =
| link alias-army = Polish Land Forces
| size = {{{size|}}}
| size flag alias-naval = 25px
| size flag alias-naval-1919 = 25px
| size flag alias-naval-1946 = 25px
| size flag alias-air force = 25px
| name = {{{name|}}}
| altlink = {{{altlink|}}}
| variant = {{{variant|}}}
<noinclude>
| var1 = state
| var2 = 1815
| var3 = 1919
| var4 = 1928
| var5 = 1955
| var6 = 1980
| var7 = 1990
| var10 = naval-1919
| var11 = naval-1946
| var12 = naval-auxiliary
| var13 = naval-auxiliary-1955
| redir1 = POL
</noinclude>
}}
a5df6d9ca5a0da2e55a10a8eb85e931668b222a9
Template:Microformat message
10
1064
2189
2023-04-24T21:58:07Z
[[]]>GoldRingChip
0
large
wikitext
text/x-wiki
The [[Help:HTML in wikitext|HTML mark-up]] produced by this template includes {{#if:{{{type|}}} |{{{type}}} |an [[{{{format}}} microformat]]}} that makes {{{data}}} readily [[Parsing|parsable]] by computer programs. This aids tasks such as the cataloguing of articles and maintenance of databases. For more information about the use of microformats on Wikipedia, please visit [[Wikipedia:WikiProject Microformats|the Microformat WikiProject]].<!--
-->{{#if:{{{subtemplates<includeonly>|</includeonly>}}}
| <div style="margin-top:0.5em;margin-bottom:0.65em;">
; {{large|Subtemplates}}
{{{subtemplates}}}
'''''Please do not remove instances of these subtemplates.'''''
</div>}}<!--
-->{{#if:{{{subsection1|}}}
| <div style="margin-top:0.5em;margin-bottom:0.65em;"><!--(newline in case subsection begins with heading:)-->
{{{subsection1}}}
</div>}}<!--
-->{{#if:{{{1<includeonly>|</includeonly>}}} <!--(i.e. if at least one unnamed parameter supplied:)-->
| <div style="margin-top:0.5em;margin-bottom:0.65em;">
; {{large|Classes used}}
The [[HTML attribute|HTML class]]es of this microformat include:
: {{hlist
|item_style=font-size:110%;{{{itemstyle|}}}
|{{{1}}} |{{{2<includeonly>|</includeonly>}}} |{{{3|<noinclude>{{nobold|……}}</noinclude>}}}
|{{{4|}}} |{{{5|}}} |{{{6|}}} |{{{7|}}} |{{{8|}}} |{{{9|}}} |{{{10|}}} |{{{11|}}} |{{{12|}}} |{{{13|}}} |{{{14|}}} |{{{15|}}} |{{{16|}}} |{{{17|}}} |{{{18|}}} |{{{19|}}} |{{{20|}}}
}} </div>
{{longitem|style=line-height:1.3em|'''''Please do not rename or remove these classes{{#if:{{{nocollapse<includeonly>|</includeonly>}}} |<br/>nor collapse nested elements which use them}}.'''''}}<!--
-->}}<!--(end #if:[1])--><noinclude>
{{Documentation}}
</noinclude>
25d8c54d56c1c64f1b98e6c8b2a50054e6a9deb5
Template:Campaignbox Punic Wars
10
1061
2183
2023-04-27T18:46:41Z
[[]]>Schminnte
0
Reverted edits by [[Special:Contributions/12.46.200.58|12.46.200.58]] ([[User talk:12.46.200.58|talk]]) ([[WP:HG|HG]]) (3.4.12)
wikitext
text/x-wiki
{{Campaignbox
| name = Campaignbox Punic Wars
| title = [[Punic Wars]]
| listclass = hlist
| battles =
* [[First Punic War|First]]
* [[Mercenary War|Mercenary]]
* [[Second Punic War|Second]]
* [[Third Punic War|Third]]
}}<noinclude>
[[Category:Punic Wars navigational boxes|Punic wars]]
</noinclude>
68f988c5de0f66decd657e0721bfd60f1b4c7798
Template:Documentation subpage
10
63
130
2023-04-29T17:27:17Z
[[w>Paine Ellsworth
0
m
wikitext
text/x-wiki
<includeonly><!--
-->{{#ifeq:{{lc:{{SUBPAGENAME}}}} |{{{override|doc}}}
| <!--(this template has been transcluded on a /doc or /{{{override}}} page)-->
</includeonly><!--
-->{{#ifeq:{{{doc-notice|show}}} |show
| {{Mbox
| type = notice
| style = margin-bottom:1.0em;
| image = [[File:Edit-copy green.svg|40px|alt=|link=]]
| text =
{{strong|This is a [[Wikipedia:Template documentation|documentation]] [[Wikipedia:Subpages|subpage]]}} for {{terminate sentence|{{{1|[[:{{SUBJECTSPACE}}:{{BASEPAGENAME}}]]}}}}}<br />It may contain usage information, [[Wikipedia:Categorization|categories]] and other content that is not part of the original {{#if:{{{text2|}}} |{{{text2}}} |{{#if:{{{text1|}}} |{{{text1}}} |{{#ifeq:{{SUBJECTSPACE}} |{{ns:User}} |{{lc:{{SUBJECTSPACE}}}} template page |{{#if:{{SUBJECTSPACE}} |{{lc:{{SUBJECTSPACE}}}} page|article}}}}}}}}.
}}
}}<!--
-->{{DEFAULTSORT:{{{defaultsort|{{PAGENAME}}}}}}}<!--
-->{{#if:{{{inhibit|}}} |<!--(don't categorize)-->
| <includeonly><!--
-->{{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}
| [[Category:{{#switch:{{SUBJECTSPACE}} |Template=Template |Module=Module |User=User |#default=Wikipedia}} documentation pages]]
| [[Category:Documentation subpages without corresponding pages]]
}}<!--
--></includeonly>
}}<!--
(completing initial #ifeq: at start of template:)
--><includeonly>
| <!--(this template has not been transcluded on a /doc or /{{{override}}} page)-->
}}<!--
--></includeonly><noinclude>{{Documentation}}</noinclude>
41ca90af0945442788a2dbd08c8c54a61a23c057
Template:Coord
10
214
434
2023-04-30T08:14:15Z
[[w>Galobtter
0
Changed protection settings for "[[Template:Coord]]": Only purpose is to call fully-protected module ([Edit=Require administrator access] (indefinite) [Move=Require administrator access] (indefinite))
wikitext
text/x-wiki
<includeonly>{{#invoke:Coordinates|coord}}</includeonly><noinclude>
{{Documentation}}
<!-- Add categories to the /doc subpage, interwikis to Wikidata, not here -->
</noinclude>
05c1e2a95ff86fa91442c704f36a9f125b603492
Module:Protection banner/config
828
49
102
2023-05-08T11:41:01Z
[[w>Fayenatic london
0
Update categories from "fully-protected" to "fully protected", removing hyphen, per valid request at [[WP:CFDS]]
Scribunto
text/plain
-- This module provides configuration data for [[Module:Protection banner]].
return {
--------------------------------------------------------------------------------
--
-- BANNER DATA
--
--------------------------------------------------------------------------------
--[[
-- Banner data consists of six fields:
-- * text - the main protection text that appears at the top of protection
-- banners.
-- * explanation - the text that appears below the main protection text, used
-- to explain the details of the protection.
-- * tooltip - the tooltip text you see when you move the mouse over a small
-- padlock icon.
-- * link - the page that the small padlock icon links to.
-- * alt - the alt text for the small padlock icon. This is also used as tooltip
-- text for the large protection banners.
-- * image - the padlock image used in both protection banners and small padlock
-- icons.
--
-- The module checks in three separate tables to find a value for each field.
-- First it checks the banners table, which has values specific to the reason
-- for the page being protected. Then the module checks the defaultBanners
-- table, which has values specific to each protection level. Finally, the
-- module checks the masterBanner table, which holds data for protection
-- templates to use if no data has been found in the previous two tables.
--
-- The values in the banner data can take parameters. These are specified
-- using ${TEXTLIKETHIS} (a dollar sign preceding a parameter name
-- enclosed in curly braces).
--
-- Available parameters:
--
-- ${CURRENTVERSION} - a link to the page history or the move log, with the
-- display message "current-version-edit-display" or
-- "current-version-move-display".
--
-- ${EDITREQUEST} - a link to create an edit request for the current page.
--
-- ${EXPLANATIONBLURB} - an explanation blurb, e.g. "Please discuss any changes
-- on the talk page; you may submit a request to ask an administrator to make
-- an edit if it is minor or supported by consensus."
--
-- ${IMAGELINK} - a link to set the image to, depending on the protection
-- action and protection level.
--
-- ${INTROBLURB} - the PROTECTIONBLURB parameter, plus the expiry if an expiry
-- is set. E.g. "Editing of this page by new or unregistered users is currently
-- disabled until dd Month YYYY."
--
-- ${INTROFRAGMENT} - the same as ${INTROBLURB}, but without final punctuation
-- so that it can be used in run-on sentences.
--
-- ${PAGETYPE} - the type of the page, e.g. "article" or "template".
-- Defined in the cfg.pagetypes table.
--
-- ${PROTECTIONBLURB} - a blurb explaining the protection level of the page, e.g.
-- "Editing of this page by new or unregistered users is currently disabled"
--
-- ${PROTECTIONDATE} - the protection date, if it has been supplied to the
-- template.
--
-- ${PROTECTIONLEVEL} - the protection level, e.g. "fully protected" or
-- "semi-protected".
--
-- ${PROTECTIONLOG} - a link to the protection log or the pending changes log,
-- depending on the protection action.
--
-- ${TALKPAGE} - a link to the talk page. If a section is specified, links
-- straight to that talk page section.
--
-- ${TOOLTIPBLURB} - uses the PAGETYPE, PROTECTIONTYPE and EXPIRY parameters to
-- create a blurb like "This template is semi-protected", or "This article is
-- move-protected until DD Month YYYY".
--
-- ${VANDAL} - links for the specified username (or the root page name)
-- using Module:Vandal-m.
--
-- Functions
--
-- For advanced users, it is possible to use Lua functions instead of strings
-- in the banner config tables. Using functions gives flexibility that is not
-- possible just by using parameters. Functions take two arguments, the
-- protection object and the template arguments, and they must output a string.
--
-- For example:
--
-- text = function (protectionObj, args)
-- if protectionObj.level == 'autoconfirmed' then
-- return 'foo'
-- else
-- return 'bar'
-- end
-- end
--
-- Some protection object properties and methods that may be useful:
-- protectionObj.action - the protection action
-- protectionObj.level - the protection level
-- protectionObj.reason - the protection reason
-- protectionObj.expiry - the expiry. Nil if unset, the string "indef" if set
-- to indefinite, and the protection time in unix time if temporary.
-- protectionObj.protectionDate - the protection date in unix time, or nil if
-- unspecified.
-- protectionObj.bannerConfig - the banner config found by the module. Beware
-- of editing the config field used by the function, as it could create an
-- infinite loop.
-- protectionObj:isProtected - returns a boolean showing whether the page is
-- protected.
-- protectionObj:isTemporary - returns a boolean showing whether the expiry is
-- temporary.
-- protectionObj:isIncorrect - returns a boolean showing whether the protection
-- template is incorrect.
--]]
-- The master banner data, used if no values have been found in banners or
-- defaultBanners.
masterBanner = {
text = '${INTROBLURB}',
explanation = '${EXPLANATIONBLURB}',
tooltip = '${TOOLTIPBLURB}',
link = '${IMAGELINK}',
alt = 'Page ${PROTECTIONLEVEL}'
},
-- The default banner data. This holds banner data for different protection
-- levels.
-- *required* - this table needs edit, move, autoreview and upload subtables.
defaultBanners = {
edit = {},
move = {},
autoreview = {
default = {
alt = 'Page protected with pending changes',
tooltip = 'All edits by unregistered and new users are subject to review prior to becoming visible to unregistered users',
image = 'Pending-protection-shackle.svg'
}
},
upload = {}
},
-- The banner data. This holds banner data for different protection reasons.
-- In fact, the reasons specified in this table control which reasons are
-- valid inputs to the first positional parameter.
--
-- There is also a non-standard "description" field that can be used for items
-- in this table. This is a description of the protection reason for use in the
-- module documentation.
--
-- *required* - this table needs edit, move, autoreview and upload subtables.
banners = {
edit = {
blp = {
description = 'For pages protected to promote compliance with the'
.. ' [[Wikipedia:Biographies of living persons'
.. '|biographies of living persons]] policy',
text = '${INTROFRAGMENT} to promote compliance with'
.. ' [[Wikipedia:Biographies of living persons'
.. "|Wikipedia's policy on the biographies"
.. ' of living people]].',
tooltip = '${TOOLTIPFRAGMENT} to promote compliance with the policy on'
.. ' biographies of living persons',
},
dmca = {
description = 'For pages protected by the Wikimedia Foundation'
.. ' due to [[Digital Millennium Copyright Act]] takedown requests',
explanation = function (protectionObj, args)
local ret = 'Pursuant to a rights owner notice under the Digital'
.. ' Millennium Copyright Act (DMCA) regarding some content'
.. ' in this article, the Wikimedia Foundation acted under'
.. ' applicable law and took down and restricted the content'
.. ' in question.'
if args.notice then
ret = ret .. ' A copy of the received notice can be found here: '
.. args.notice .. '.'
end
ret = ret .. ' For more information, including websites discussing'
.. ' how to file a counter-notice, please see'
.. " [[Wikipedia:Office actions]] and the article's ${TALKPAGE}."
.. "'''Do not remove this template from the article until the"
.. " restrictions are withdrawn'''."
return ret
end,
image = 'Office-protection-shackle.svg',
},
dispute = {
description = 'For pages protected due to editing disputes',
text = function (protectionObj, args)
-- Find the value of "disputes".
local display = 'disputes'
local disputes
if args.section then
disputes = string.format(
'[[%s:%s#%s|%s]]',
mw.site.namespaces[protectionObj.title.namespace].talk.name,
protectionObj.title.text,
args.section,
display
)
else
disputes = display
end
-- Make the blurb, depending on the expiry.
local msg
if type(protectionObj.expiry) == 'number' then
msg = '${INTROFRAGMENT} or until editing %s have been resolved.'
else
msg = '${INTROFRAGMENT} until editing %s have been resolved.'
end
return string.format(msg, disputes)
end,
explanation = "This protection is '''not''' an endorsement of the"
.. ' ${CURRENTVERSION}. ${EXPLANATIONBLURB}',
tooltip = '${TOOLTIPFRAGMENT} due to editing disputes',
},
ecp = {
description = 'For articles in topic areas authorized by'
.. ' [[Wikipedia:Arbitration Committee|ArbCom]] or'
.. ' meets the criteria for community use',
tooltip = 'This ${PAGETYPE} is ${PROTECTIONLEVEL}',
alt = 'Extended-protected ${PAGETYPE}',
},
mainpage = {
description = 'For pages protected for being displayed on the [[Main Page]]',
text = 'This file is currently'
.. ' [[Wikipedia:This page is protected|protected]] from'
.. ' editing because it is currently or will soon be displayed'
.. ' on the [[Main Page]].',
explanation = 'Images on the Main Page are protected due to their high'
.. ' visibility. Please discuss any necessary changes on the ${TALKPAGE}.'
.. '<br /><span style="font-size:90%;">'
.. "'''Administrators:''' Once this image is definitely off the Main Page,"
.. ' please unprotect this file, or reduce to semi-protection,'
.. ' as appropriate.</span>',
},
office = {
description = 'For pages protected by the Wikimedia Foundation',
text = function (protectionObj, args)
local ret = 'This ${PAGETYPE} is currently under the'
.. ' scrutiny of the'
.. ' [[Wikipedia:Office actions|Wikimedia Foundation Office]]'
.. ' and is protected.'
if protectionObj.protectionDate then
ret = ret .. ' It has been protected since ${PROTECTIONDATE}.'
end
return ret
end,
explanation = "If you can edit this page, please discuss all changes and"
.. " additions on the ${TALKPAGE} first. '''Do not remove protection from this"
.. " page unless you are authorized by the Wikimedia Foundation to do"
.. " so.'''",
image = 'Office-protection-shackle.svg',
},
reset = {
description = 'For pages protected by the Wikimedia Foundation and'
.. ' "reset" to a bare-bones version',
text = 'This ${PAGETYPE} is currently under the'
.. ' scrutiny of the'
.. ' [[Wikipedia:Office actions|Wikimedia Foundation Office]]'
.. ' and is protected.',
explanation = function (protectionObj, args)
local ret = ''
if protectionObj.protectionDate then
ret = ret .. 'On ${PROTECTIONDATE} this ${PAGETYPE} was'
else
ret = ret .. 'This ${PAGETYPE} has been'
end
ret = ret .. ' reduced to a'
.. ' simplified, "bare bones" version so that it may be completely'
.. ' rewritten to ensure it meets the policies of'
.. ' [[WP:NPOV|Neutral Point of View]] and [[WP:V|Verifiability]].'
.. ' Standard Wikipedia policies will apply to its rewriting—which'
.. ' will eventually be open to all editors—and will be strictly'
.. ' enforced. The ${PAGETYPE} has been ${PROTECTIONLEVEL} while'
.. ' it is being rebuilt.\n\n'
.. 'Any insertion of material directly from'
.. ' pre-protection revisions of the ${PAGETYPE} will be removed, as'
.. ' will any material added to the ${PAGETYPE} that is not properly'
.. ' sourced. The associated talk page(s) were also cleared on the'
.. " same date.\n\n"
.. "If you can edit this page, please discuss all changes and"
.. " additions on the ${TALKPAGE} first. '''Do not override"
.. " this action, and do not remove protection from this page,"
.. " unless you are authorized by the Wikimedia Foundation"
.. " to do so. No editor may remove this notice.'''"
return ret
end,
image = 'Office-protection-shackle.svg',
},
sock = {
description = 'For pages protected due to'
.. ' [[Wikipedia:Sock puppetry|sock puppetry]]',
text = '${INTROFRAGMENT} to prevent [[Wikipedia:Sock puppetry|sock puppets]] of'
.. ' [[Wikipedia:Blocking policy|blocked]] or'
.. ' [[Wikipedia:Banning policy|banned users]]'
.. ' from editing it.',
tooltip = '${TOOLTIPFRAGMENT} to prevent sock puppets of blocked or banned users from'
.. ' editing it',
},
template = {
description = 'For [[Wikipedia:High-risk templates|high-risk]]'
.. ' templates and Lua modules',
text = 'This is a permanently [[Help:Protection|protected]] ${PAGETYPE},'
.. ' as it is [[Wikipedia:High-risk templates|high-risk]].',
explanation = 'Please discuss any changes on the ${TALKPAGE}; you may'
.. ' ${EDITREQUEST} to ask an'
.. ' [[Wikipedia:Administrators|administrator]] or'
.. ' [[Wikipedia:Template editor|template editor]] to make an edit if'
.. ' it is [[Help:Minor edit#When to mark an edit as a minor edit'
.. '|uncontroversial]] or supported by'
.. ' [[Wikipedia:Consensus|consensus]]. You can also'
.. ' [[Wikipedia:Requests for page protection|request]] that the page be'
.. ' unprotected.',
tooltip = 'This high-risk ${PAGETYPE} is permanently ${PROTECTIONLEVEL}'
.. ' to prevent vandalism',
alt = 'Permanently protected ${PAGETYPE}',
},
usertalk = {
description = 'For pages protected against disruptive edits by a'
.. ' particular user',
text = '${INTROFRAGMENT} to prevent ${VANDAL} from using it to make disruptive edits,'
.. ' such as abusing the'
.. ' {{[[Template:unblock|unblock]]}} template.',
explanation = 'If you cannot edit this user talk page and you need to'
.. ' make a change or leave a message, you can'
.. ' [[Wikipedia:Requests for page protection'
.. '#Current requests for edits to a protected page'
.. '|request an edit]],'
.. ' [[Wikipedia:Requests for page protection'
.. '#Current requests for reduction in protection level'
.. '|request unprotection]],'
.. ' [[Special:Userlogin|log in]],'
.. ' or [[Special:UserLogin/signup|create an account]].',
},
vandalism = {
description = 'For pages protected against'
.. ' [[Wikipedia:Vandalism|vandalism]]',
text = '${INTROFRAGMENT} due to [[Wikipedia:Vandalism|vandalism]].',
explanation = function (protectionObj, args)
local ret = ''
if protectionObj.level == 'sysop' then
ret = ret .. "This protection is '''not''' an endorsement of the"
.. ' ${CURRENTVERSION}. '
end
return ret .. '${EXPLANATIONBLURB}'
end,
tooltip = '${TOOLTIPFRAGMENT} due to vandalism',
}
},
move = {
dispute = {
description = 'For pages protected against page moves due to'
.. ' disputes over the page title',
explanation = "This protection is '''not''' an endorsement of the"
.. ' ${CURRENTVERSION}. ${EXPLANATIONBLURB}',
image = 'Move-protection-shackle.svg'
},
vandalism = {
description = 'For pages protected against'
.. ' [[Wikipedia:Vandalism#Page-move vandalism'
.. ' |page-move vandalism]]'
}
},
autoreview = {},
upload = {}
},
--------------------------------------------------------------------------------
--
-- GENERAL DATA TABLES
--
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
-- Protection blurbs
--------------------------------------------------------------------------------
-- This table produces the protection blurbs available with the
-- ${PROTECTIONBLURB} parameter. It is sorted by protection action and
-- protection level, and is checked by the module in the following order:
-- 1. page's protection action, page's protection level
-- 2. page's protection action, default protection level
-- 3. "edit" protection action, default protection level
--
-- It is possible to use banner parameters inside this table.
-- *required* - this table needs edit, move, autoreview and upload subtables.
protectionBlurbs = {
edit = {
default = 'This ${PAGETYPE} is currently [[Help:Protection|'
.. 'protected]] from editing',
autoconfirmed = 'Editing of this ${PAGETYPE} by [[Wikipedia:User access'
.. ' levels#New users|new]] or [[Wikipedia:User access levels#Unregistered'
.. ' users|unregistered]] users is currently [[Help:Protection|disabled]]',
extendedconfirmed = 'This ${PAGETYPE} is currently under extended confirmed protection',
},
move = {
default = 'This ${PAGETYPE} is currently [[Help:Protection|protected]]'
.. ' from [[Help:Moving a page|page moves]]'
},
autoreview = {
default = 'All edits made to this ${PAGETYPE} by'
.. ' [[Wikipedia:User access levels#New users|new]] or'
.. ' [[Wikipedia:User access levels#Unregistered users|unregistered]]'
.. ' users are currently'
.. ' [[Wikipedia:Pending changes|subject to review]]'
},
upload = {
default = 'Uploading new versions of this ${PAGETYPE} is currently disabled'
}
},
--------------------------------------------------------------------------------
-- Explanation blurbs
--------------------------------------------------------------------------------
-- This table produces the explanation blurbs available with the
-- ${EXPLANATIONBLURB} parameter. It is sorted by protection action,
-- protection level, and whether the page is a talk page or not. If the page is
-- a talk page it will have a talk key of "talk"; otherwise it will have a talk
-- key of "subject". The table is checked in the following order:
-- 1. page's protection action, page's protection level, page's talk key
-- 2. page's protection action, page's protection level, default talk key
-- 3. page's protection action, default protection level, page's talk key
-- 4. page's protection action, default protection level, default talk key
--
-- It is possible to use banner parameters inside this table.
-- *required* - this table needs edit, move, autoreview and upload subtables.
explanationBlurbs = {
edit = {
autoconfirmed = {
subject = 'See the [[Wikipedia:Protection policy|'
.. 'protection policy]] and ${PROTECTIONLOG} for more details. If you'
.. ' cannot edit this ${PAGETYPE} and you wish to make a change, you can'
.. ' ${EDITREQUEST}, discuss changes on the ${TALKPAGE},'
.. ' [[Wikipedia:Requests for page protection'
.. '#Current requests for reduction in protection level'
.. '|request unprotection]], [[Special:Userlogin|log in]], or'
.. ' [[Special:UserLogin/signup|create an account]].',
default = 'See the [[Wikipedia:Protection policy|'
.. 'protection policy]] and ${PROTECTIONLOG} for more details. If you'
.. ' cannot edit this ${PAGETYPE} and you wish to make a change, you can'
.. ' [[Wikipedia:Requests for page protection'
.. '#Current requests for reduction in protection level'
.. '|request unprotection]], [[Special:Userlogin|log in]], or'
.. ' [[Special:UserLogin/signup|create an account]].',
},
extendedconfirmed = {
default = 'Extended confirmed protection prevents edits from all unregistered editors'
.. ' and registered users with fewer than 30 days tenure and 500 edits.'
.. ' The [[Wikipedia:Protection policy#extended|policy on community use]]'
.. ' specifies that extended confirmed protection can be applied to combat'
.. ' disruption, if semi-protection has proven to be ineffective.'
.. ' Extended confirmed protection may also be applied to enforce'
.. ' [[Wikipedia:Arbitration Committee|arbitration sanctions]].'
.. ' Please discuss any changes on the ${TALKPAGE}; you may'
.. ' ${EDITREQUEST} to ask for uncontroversial changes supported by'
.. ' [[Wikipedia:Consensus|consensus]].'
},
default = {
subject = 'See the [[Wikipedia:Protection policy|'
.. 'protection policy]] and ${PROTECTIONLOG} for more details.'
.. ' Please discuss any changes on the ${TALKPAGE}; you'
.. ' may ${EDITREQUEST} to ask an'
.. ' [[Wikipedia:Administrators|administrator]] to make an edit if it'
.. ' is [[Help:Minor edit#When to mark an edit as a minor edit'
.. '|uncontroversial]] or supported by [[Wikipedia:Consensus'
.. '|consensus]]. You may also [[Wikipedia:Requests for'
.. ' page protection#Current requests for reduction in protection level'
.. '|request]] that this page be unprotected.',
default = 'See the [[Wikipedia:Protection policy|'
.. 'protection policy]] and ${PROTECTIONLOG} for more details.'
.. ' You may [[Wikipedia:Requests for page'
.. ' protection#Current requests for edits to a protected page|request an'
.. ' edit]] to this page, or [[Wikipedia:Requests for'
.. ' page protection#Current requests for reduction in protection level'
.. '|ask]] for it to be unprotected.'
}
},
move = {
default = {
subject = 'See the [[Wikipedia:Protection policy|'
.. 'protection policy]] and ${PROTECTIONLOG} for more details.'
.. ' The page may still be edited but cannot be moved'
.. ' until unprotected. Please discuss any suggested moves on the'
.. ' ${TALKPAGE} or at [[Wikipedia:Requested moves]]. You can also'
.. ' [[Wikipedia:Requests for page protection|request]] that the page be'
.. ' unprotected.',
default = 'See the [[Wikipedia:Protection policy|'
.. 'protection policy]] and ${PROTECTIONLOG} for more details.'
.. ' The page may still be edited but cannot be moved'
.. ' until unprotected. Please discuss any suggested moves at'
.. ' [[Wikipedia:Requested moves]]. You can also'
.. ' [[Wikipedia:Requests for page protection|request]] that the page be'
.. ' unprotected.'
}
},
autoreview = {
default = {
default = 'See the [[Wikipedia:Protection policy|'
.. 'protection policy]] and ${PROTECTIONLOG} for more details.'
.. ' Edits to this ${PAGETYPE} by new and unregistered users'
.. ' will not be visible to readers until they are accepted by'
.. ' a reviewer. To avoid the need for your edits to be'
.. ' reviewed, you may'
.. ' [[Wikipedia:Requests for page protection'
.. '#Current requests for reduction in protection level'
.. '|request unprotection]], [[Special:Userlogin|log in]], or'
.. ' [[Special:UserLogin/signup|create an account]].'
},
},
upload = {
default = {
default = 'See the [[Wikipedia:Protection policy|'
.. 'protection policy]] and ${PROTECTIONLOG} for more details.'
.. ' The page may still be edited but new versions of the file'
.. ' cannot be uploaded until it is unprotected. You can'
.. ' request that a new version be uploaded by using a'
.. ' [[Wikipedia:Edit requests|protected edit request]], or you'
.. ' can [[Wikipedia:Requests for page protection|request]]'
.. ' that the file be unprotected.'
}
}
},
--------------------------------------------------------------------------------
-- Protection levels
--------------------------------------------------------------------------------
-- This table provides the data for the ${PROTECTIONLEVEL} parameter, which
-- produces a short label for different protection levels. It is sorted by
-- protection action and protection level, and is checked in the following
-- order:
-- 1. page's protection action, page's protection level
-- 2. page's protection action, default protection level
-- 3. "edit" protection action, default protection level
--
-- It is possible to use banner parameters inside this table.
-- *required* - this table needs edit, move, autoreview and upload subtables.
protectionLevels = {
edit = {
default = 'protected',
templateeditor = 'template-protected',
extendedconfirmed = 'extended-protected',
autoconfirmed = 'semi-protected',
},
move = {
default = 'move-protected'
},
autoreview = {
},
upload = {
default = 'upload-protected'
}
},
--------------------------------------------------------------------------------
-- Images
--------------------------------------------------------------------------------
-- This table lists different padlock images for each protection action and
-- protection level. It is used if an image is not specified in any of the
-- banner data tables, and if the page does not satisfy the conditions for using
-- the ['image-filename-indef'] image. It is checked in the following order:
-- 1. page's protection action, page's protection level
-- 2. page's protection action, default protection level
images = {
edit = {
default = 'Full-protection-shackle.svg',
templateeditor = 'Template-protection-shackle.svg',
extendedconfirmed = 'Extended-protection-shackle.svg',
autoconfirmed = 'Semi-protection-shackle.svg'
},
move = {
default = 'Move-protection-shackle.svg',
},
autoreview = {
default = 'Pending-protection-shackle.svg'
},
upload = {
default = 'Upload-protection-shackle.svg'
}
},
-- Pages with a reason specified in this table will show the special "indef"
-- padlock, defined in the 'image-filename-indef' message, if no expiry is set.
indefImageReasons = {
template = true
},
--------------------------------------------------------------------------------
-- Image links
--------------------------------------------------------------------------------
-- This table provides the data for the ${IMAGELINK} parameter, which gets
-- the image link for small padlock icons based on the page's protection action
-- and protection level. It is checked in the following order:
-- 1. page's protection action, page's protection level
-- 2. page's protection action, default protection level
-- 3. "edit" protection action, default protection level
--
-- It is possible to use banner parameters inside this table.
-- *required* - this table needs edit, move, autoreview and upload subtables.
imageLinks = {
edit = {
default = 'Wikipedia:Protection policy#full',
templateeditor = 'Wikipedia:Protection policy#template',
extendedconfirmed = 'Wikipedia:Protection policy#extended',
autoconfirmed = 'Wikipedia:Protection policy#semi'
},
move = {
default = 'Wikipedia:Protection policy#move'
},
autoreview = {
default = 'Wikipedia:Protection policy#pending'
},
upload = {
default = 'Wikipedia:Protection policy#upload'
}
},
--------------------------------------------------------------------------------
-- Padlock indicator names
--------------------------------------------------------------------------------
-- This table provides the "name" attribute for the <indicator> extension tag
-- with which small padlock icons are generated. All indicator tags on a page
-- are displayed in alphabetical order based on this attribute, and with
-- indicator tags with duplicate names, the last tag on the page wins.
-- The attribute is chosen based on the protection action; table keys must be a
-- protection action name or the string "default".
padlockIndicatorNames = {
autoreview = 'pp-autoreview',
default = 'pp-default'
},
--------------------------------------------------------------------------------
-- Protection categories
--------------------------------------------------------------------------------
--[[
-- The protection categories are stored in the protectionCategories table.
-- Keys to this table are made up of the following strings:
--
-- 1. the expiry date
-- 2. the namespace
-- 3. the protection reason (e.g. "dispute" or "vandalism")
-- 4. the protection level (e.g. "sysop" or "autoconfirmed")
-- 5. the action (e.g. "edit" or "move")
--
-- When the module looks up a category in the table, first it will will check to
-- see a key exists that corresponds to all five parameters. For example, a
-- user page semi-protected from vandalism for two weeks would have the key
-- "temp-user-vandalism-autoconfirmed-edit". If no match is found, the module
-- changes the first part of the key to "all" and checks the table again. It
-- keeps checking increasingly generic key combinations until it finds the
-- field, or until it reaches the key "all-all-all-all-all".
--
-- The module uses a binary matrix to determine the order in which to search.
-- This is best demonstrated by a table. In this table, the "0" values
-- represent "all", and the "1" values represent the original data (e.g.
-- "indef" or "file" or "vandalism").
--
-- expiry namespace reason level action
-- order
-- 1 1 1 1 1 1
-- 2 0 1 1 1 1
-- 3 1 0 1 1 1
-- 4 0 0 1 1 1
-- 5 1 1 0 1 1
-- 6 0 1 0 1 1
-- 7 1 0 0 1 1
-- 8 0 0 0 1 1
-- 9 1 1 1 0 1
-- 10 0 1 1 0 1
-- 11 1 0 1 0 1
-- 12 0 0 1 0 1
-- 13 1 1 0 0 1
-- 14 0 1 0 0 1
-- 15 1 0 0 0 1
-- 16 0 0 0 0 1
-- 17 1 1 1 1 0
-- 18 0 1 1 1 0
-- 19 1 0 1 1 0
-- 20 0 0 1 1 0
-- 21 1 1 0 1 0
-- 22 0 1 0 1 0
-- 23 1 0 0 1 0
-- 24 0 0 0 1 0
-- 25 1 1 1 0 0
-- 26 0 1 1 0 0
-- 27 1 0 1 0 0
-- 28 0 0 1 0 0
-- 29 1 1 0 0 0
-- 30 0 1 0 0 0
-- 31 1 0 0 0 0
-- 32 0 0 0 0 0
--
-- In this scheme the action has the highest priority, as it is the last
-- to change, and the expiry has the least priority, as it changes the most.
-- The priorities of the expiry, the protection level and the action are
-- fixed, but the priorities of the reason and the namespace can be swapped
-- through the use of the cfg.bannerDataNamespaceHasPriority table.
--]]
-- If the reason specified to the template is listed in this table,
-- namespace data will take priority over reason data in the protectionCategories
-- table.
reasonsWithNamespacePriority = {
vandalism = true,
},
-- The string to use as a namespace key for the protectionCategories table for each
-- namespace number.
categoryNamespaceKeys = {
[ 2] = 'user',
[ 3] = 'user',
[ 4] = 'project',
[ 6] = 'file',
[ 8] = 'mediawiki',
[ 10] = 'template',
[ 12] = 'project',
[ 14] = 'category',
[100] = 'portal',
[828] = 'module',
},
protectionCategories = {
['all|all|all|all|all'] = 'Wikipedia fully protected pages',
['all|all|office|all|all'] = 'Wikipedia Office-protected pages',
['all|all|reset|all|all'] = 'Wikipedia Office-protected pages',
['all|all|dmca|all|all'] = 'Wikipedia Office-protected pages',
['all|all|mainpage|all|all'] = 'Wikipedia fully protected main page files',
['all|all|all|extendedconfirmed|all'] = 'Wikipedia extended-confirmed-protected pages',
['all|all|ecp|extendedconfirmed|all'] = 'Wikipedia extended-confirmed-protected pages',
['all|template|all|all|edit'] = 'Wikipedia fully protected templates',
['all|all|all|autoconfirmed|edit'] = 'Wikipedia semi-protected pages',
['indef|all|all|autoconfirmed|edit'] = 'Wikipedia indefinitely semi-protected pages',
['all|all|blp|autoconfirmed|edit'] = 'Wikipedia indefinitely semi-protected biographies of living people',
['temp|all|blp|autoconfirmed|edit'] = 'Wikipedia temporarily semi-protected biographies of living people',
['all|all|dispute|autoconfirmed|edit'] = 'Wikipedia pages semi-protected due to dispute',
['all|all|sock|autoconfirmed|edit'] = 'Wikipedia pages semi-protected from banned users',
['all|all|vandalism|autoconfirmed|edit'] = 'Wikipedia pages semi-protected against vandalism',
['all|category|all|autoconfirmed|edit'] = 'Wikipedia semi-protected categories',
['all|file|all|autoconfirmed|edit'] = 'Wikipedia semi-protected files',
['all|portal|all|autoconfirmed|edit'] = 'Wikipedia semi-protected portals',
['all|project|all|autoconfirmed|edit'] = 'Wikipedia semi-protected project pages',
['all|talk|all|autoconfirmed|edit'] = 'Wikipedia semi-protected talk pages',
['all|template|all|autoconfirmed|edit'] = 'Wikipedia semi-protected templates',
['all|user|all|autoconfirmed|edit'] = 'Wikipedia semi-protected user and user talk pages',
['all|all|all|templateeditor|edit'] = 'Wikipedia template-protected pages other than templates and modules',
['all|template|all|templateeditor|edit'] = 'Wikipedia template-protected templates',
['all|template|all|templateeditor|move'] = 'Wikipedia template-protected templates', -- move-protected templates
['all|all|blp|sysop|edit'] = 'Wikipedia indefinitely protected biographies of living people',
['temp|all|blp|sysop|edit'] = 'Wikipedia temporarily protected biographies of living people',
['all|all|dispute|sysop|edit'] = 'Wikipedia pages protected due to dispute',
['all|all|sock|sysop|edit'] = 'Wikipedia pages protected from banned users',
['all|all|vandalism|sysop|edit'] = 'Wikipedia pages protected against vandalism',
['all|category|all|sysop|edit'] = 'Wikipedia fully protected categories',
['all|file|all|sysop|edit'] = 'Wikipedia fully protected files',
['all|project|all|sysop|edit'] = 'Wikipedia fully protected project pages',
['all|talk|all|sysop|edit'] = 'Wikipedia fully protected talk pages',
['all|template|all|extendedconfirmed|edit'] = 'Wikipedia extended-confirmed-protected templates',
['all|template|all|sysop|edit'] = 'Wikipedia fully protected templates',
['all|user|all|sysop|edit'] = 'Wikipedia fully protected user and user talk pages',
['all|module|all|all|edit'] = 'Wikipedia fully protected modules',
['all|module|all|templateeditor|edit'] = 'Wikipedia template-protected modules',
['all|module|all|extendedconfirmed|edit'] = 'Wikipedia extended-confirmed-protected modules',
['all|module|all|autoconfirmed|edit'] = 'Wikipedia semi-protected modules',
['all|all|all|sysop|move'] = 'Wikipedia move-protected pages',
['indef|all|all|sysop|move'] = 'Wikipedia indefinitely move-protected pages',
['all|all|dispute|sysop|move'] = 'Wikipedia pages move-protected due to dispute',
['all|all|vandalism|sysop|move'] = 'Wikipedia pages move-protected due to vandalism',
['all|portal|all|sysop|move'] = 'Wikipedia move-protected portals',
['all|project|all|sysop|move'] = 'Wikipedia move-protected project pages',
['all|talk|all|sysop|move'] = 'Wikipedia move-protected talk pages',
['all|template|all|sysop|move'] = 'Wikipedia move-protected templates',
['all|user|all|sysop|move'] = 'Wikipedia move-protected user and user talk pages',
['all|all|all|autoconfirmed|autoreview'] = 'Wikipedia pending changes protected pages',
['all|file|all|all|upload'] = 'Wikipedia upload-protected files',
},
--------------------------------------------------------------------------------
-- Expiry category config
--------------------------------------------------------------------------------
-- This table configures the expiry category behaviour for each protection
-- action.
-- * If set to true, setting that action will always categorise the page if
-- an expiry parameter is not set.
-- * If set to false, setting that action will never categorise the page.
-- * If set to nil, the module will categorise the page if:
-- 1) an expiry parameter is not set, and
-- 2) a reason is provided, and
-- 3) the specified reason is not blacklisted in the reasonsWithoutExpiryCheck
-- table.
expiryCheckActions = {
edit = nil,
move = false,
autoreview = true,
upload = false
},
reasonsWithoutExpiryCheck = {
blp = true,
template = true,
},
--------------------------------------------------------------------------------
-- Pagetypes
--------------------------------------------------------------------------------
-- This table produces the page types available with the ${PAGETYPE} parameter.
-- Keys are namespace numbers, or the string "default" for the default value.
pagetypes = {
[0] = 'article',
[6] = 'file',
[10] = 'template',
[14] = 'category',
[828] = 'module',
default = 'page'
},
--------------------------------------------------------------------------------
-- Strings marking indefinite protection
--------------------------------------------------------------------------------
-- This table contains values passed to the expiry parameter that mean the page
-- is protected indefinitely.
indefStrings = {
['indef'] = true,
['indefinite'] = true,
['indefinitely'] = true,
['infinite'] = true,
},
--------------------------------------------------------------------------------
-- Group hierarchy
--------------------------------------------------------------------------------
-- This table maps each group to all groups that have a superset of the original
-- group's page editing permissions.
hierarchy = {
sysop = {},
reviewer = {'sysop'},
filemover = {'sysop'},
templateeditor = {'sysop'},
extendedconfirmed = {'sysop'},
autoconfirmed = {'reviewer', 'filemover', 'templateeditor', 'extendedconfirmed'},
user = {'autoconfirmed'},
['*'] = {'user'}
},
--------------------------------------------------------------------------------
-- Wrapper templates and their default arguments
--------------------------------------------------------------------------------
-- This table contains wrapper templates used with the module, and their
-- default arguments. Templates specified in this table should contain the
-- following invocation, and no other template content:
--
-- {{#invoke:Protection banner|main}}
--
-- If other content is desired, it can be added between
-- <noinclude>...</noinclude> tags.
--
-- When a user calls one of these wrapper templates, they will use the
-- default arguments automatically. However, users can override any of the
-- arguments.
wrappers = {
['Template:Pp'] = {},
['Template:Pp-extended'] = {'ecp'},
['Template:Pp-blp'] = {'blp'},
-- we don't need Template:Pp-create
['Template:Pp-dispute'] = {'dispute'},
['Template:Pp-main-page'] = {'mainpage'},
['Template:Pp-move'] = {action = 'move', catonly = 'yes'},
['Template:Pp-move-dispute'] = {'dispute', action = 'move', catonly = 'yes'},
-- we don't need Template:Pp-move-indef
['Template:Pp-move-vandalism'] = {'vandalism', action = 'move', catonly = 'yes'},
['Template:Pp-office'] = {'office'},
['Template:Pp-office-dmca'] = {'dmca'},
['Template:Pp-pc'] = {action = 'autoreview', small = true},
['Template:Pp-pc1'] = {action = 'autoreview', small = true},
['Template:Pp-reset'] = {'reset'},
['Template:Pp-semi-indef'] = {small = true},
['Template:Pp-sock'] = {'sock'},
['Template:Pp-template'] = {'template', small = true},
['Template:Pp-upload'] = {action = 'upload'},
['Template:Pp-usertalk'] = {'usertalk'},
['Template:Pp-vandalism'] = {'vandalism'},
},
--------------------------------------------------------------------------------
--
-- MESSAGES
--
--------------------------------------------------------------------------------
msg = {
--------------------------------------------------------------------------------
-- Intro blurb and intro fragment
--------------------------------------------------------------------------------
-- These messages specify what is produced by the ${INTROBLURB} and
-- ${INTROFRAGMENT} parameters. If the protection is temporary they use the
-- intro-blurb-expiry or intro-fragment-expiry, and if not they use
-- intro-blurb-noexpiry or intro-fragment-noexpiry.
-- It is possible to use banner parameters in these messages.
['intro-blurb-expiry'] = '${PROTECTIONBLURB} until ${EXPIRY}.',
['intro-blurb-noexpiry'] = '${PROTECTIONBLURB}.',
['intro-fragment-expiry'] = '${PROTECTIONBLURB} until ${EXPIRY},',
['intro-fragment-noexpiry'] = '${PROTECTIONBLURB}',
--------------------------------------------------------------------------------
-- Tooltip blurb
--------------------------------------------------------------------------------
-- These messages specify what is produced by the ${TOOLTIPBLURB} parameter.
-- If the protection is temporary the tooltip-blurb-expiry message is used, and
-- if not the tooltip-blurb-noexpiry message is used.
-- It is possible to use banner parameters in these messages.
['tooltip-blurb-expiry'] = 'This ${PAGETYPE} is ${PROTECTIONLEVEL} until ${EXPIRY}.',
['tooltip-blurb-noexpiry'] = 'This ${PAGETYPE} is ${PROTECTIONLEVEL}.',
['tooltip-fragment-expiry'] = 'This ${PAGETYPE} is ${PROTECTIONLEVEL} until ${EXPIRY},',
['tooltip-fragment-noexpiry'] = 'This ${PAGETYPE} is ${PROTECTIONLEVEL}',
--------------------------------------------------------------------------------
-- Special explanation blurb
--------------------------------------------------------------------------------
-- An explanation blurb for pages that cannot be unprotected, e.g. for pages
-- in the MediaWiki namespace.
-- It is possible to use banner parameters in this message.
['explanation-blurb-nounprotect'] = 'See the [[Wikipedia:Protection policy|'
.. 'protection policy]] and ${PROTECTIONLOG} for more details.'
.. ' Please discuss any changes on the ${TALKPAGE}; you'
.. ' may ${EDITREQUEST} to ask an'
.. ' [[Wikipedia:Administrators|administrator]] to make an edit if it'
.. ' is [[Help:Minor edit#When to mark an edit as a minor edit'
.. '|uncontroversial]] or supported by [[Wikipedia:Consensus'
.. '|consensus]].',
--------------------------------------------------------------------------------
-- Protection log display values
--------------------------------------------------------------------------------
-- These messages determine the display values for the protection log link
-- or the pending changes log link produced by the ${PROTECTIONLOG} parameter.
-- It is possible to use banner parameters in these messages.
['protection-log-display'] = 'protection log',
['pc-log-display'] = 'pending changes log',
--------------------------------------------------------------------------------
-- Current version display values
--------------------------------------------------------------------------------
-- These messages determine the display values for the page history link
-- or the move log link produced by the ${CURRENTVERSION} parameter.
-- It is possible to use banner parameters in these messages.
['current-version-move-display'] = 'current title',
['current-version-edit-display'] = 'current version',
--------------------------------------------------------------------------------
-- Talk page
--------------------------------------------------------------------------------
-- This message determines the display value of the talk page link produced
-- with the ${TALKPAGE} parameter.
-- It is possible to use banner parameters in this message.
['talk-page-link-display'] = 'talk page',
--------------------------------------------------------------------------------
-- Edit requests
--------------------------------------------------------------------------------
-- This message determines the display value of the edit request link produced
-- with the ${EDITREQUEST} parameter.
-- It is possible to use banner parameters in this message.
['edit-request-display'] = 'submit an edit request',
--------------------------------------------------------------------------------
-- Expiry date format
--------------------------------------------------------------------------------
-- This is the format for the blurb expiry date. It should be valid input for
-- the first parameter of the #time parser function.
['expiry-date-format'] = 'F j, Y "at" H:i e',
--------------------------------------------------------------------------------
-- Tracking categories
--------------------------------------------------------------------------------
-- These messages determine which tracking categories the module outputs.
['tracking-category-incorrect'] = 'Wikipedia pages with incorrect protection templates',
['tracking-category-template'] = 'Wikipedia template-protected pages other than templates and modules',
--------------------------------------------------------------------------------
-- Images
--------------------------------------------------------------------------------
-- These are images that are not defined by their protection action and protection level.
['image-filename-indef'] = 'Full-protection-shackle.svg',
['image-filename-default'] = 'Transparent.gif',
--------------------------------------------------------------------------------
-- End messages
--------------------------------------------------------------------------------
}
--------------------------------------------------------------------------------
-- End configuration
--------------------------------------------------------------------------------
}
a20552ae38cb5253a4fa29aa126abc74215a589f
Template:Longitem
10
1031
2123
2023-05-09T01:38:28Z
[[]]>Neveselbert
0
Undid revision 1153902556 by [[Special:Contributions/Neveselbert|Neveselbert]] ([[User talk:Neveselbert|talk]]) - backlinked
wikitext
text/x-wiki
<noinclude>{{#tag: code|
</noinclude>{{#ifeq: {{{1|+}}} | {{{1|-}}} | <div style="}}display: inline-block; line-height: 1.2em; padding: .1em 0; {{#ifeq: {{{1|+}}} | {{{1|-}}} | {{{style|}}}">{{{1|}}}</div> | <includeonly>width: 100%;</includeonly> }}<includeonly>{{#if:{{{2|}}}|[[Category:Pages using Template:Longitem with unnamed style parameter]]}}</includeonly><noinclude>
|lang=wikitext}}
{{documentation}}
</noinclude>
2919b818deb36b243e9f9517917cbcfaa2c8d4ec
Module:Convert/data
828
191
387
2023-05-10T03:20:18Z
[[w>Johnuniq
0
update from sandbox per [[Template talk:Convert#Module version 29]]
Scribunto
text/plain
-- Conversion data used by [[Module:Convert]] which uses mw.loadData() for
-- read-only access to this module so that it is loaded only once per page.
-- See [[:en:Template:Convert/Transwiki guide]] if copying to another wiki.
--
-- These data tables follow:
-- all_units all properties for a unit, including default output
-- default_exceptions exceptions for default output ('kg' and 'g' have different defaults)
-- link_exceptions exceptions for links ('kg' and 'g' have different links)
--
-- These tables are generated by a script which reads the wikitext of a page that
-- documents the required properties of each unit; see [[:en:Module:Convert/doc]].
---------------------------------------------------------------------------
-- Do not change the data in this table because it is created by running --
-- a script that reads the wikitext from a wiki page (see note above). --
---------------------------------------------------------------------------
local all_units = {
["Gy"] = {
_name1 = "gray",
_symbol = "Gy",
utype = "absorbed radiation dose",
scale = 1,
prefixes = 1,
default = "rad",
link = "Gray (unit)",
},
["rad"] = {
_name1 = "rad",
_symbol = "rad",
utype = "absorbed radiation dose",
scale = 0.01,
prefixes = 1,
default = "Gy",
link = "Rad (unit)",
},
["cm/s2"] = {
name1 = "centimetre per second squared",
name1_us = "centimeter per second squared",
name2 = "centimetres per second squared",
name2_us = "centimeters per second squared",
symbol = "cm/s<sup>2</sup>",
utype = "acceleration",
scale = 0.01,
default = "ft/s2",
link = "Gal (unit)",
},
["ft/s2"] = {
name1 = "foot per second squared",
name2 = "feet per second squared",
symbol = "ft/s<sup>2</sup>",
utype = "acceleration",
scale = 0.3048,
default = "m/s2",
},
["g0"] = {
name1 = "standard gravity",
name2 = "standard gravities",
symbol = "''g''<sub>0</sub>",
utype = "acceleration",
scale = 9.80665,
default = "m/s2",
},
["g-force"] = {
name2 = "''g''",
symbol = "''g''",
utype = "acceleration",
scale = 9.80665,
default = "m/s2",
link = "g-force",
},
["km/hs"] = {
name1 = "kilometre per hour per second",
name1_us = "kilometer per hour per second",
name2 = "kilometres per hour per second",
name2_us = "kilometers per hour per second",
symbol = "km/(h⋅s)",
utype = "acceleration",
scale = 0.27777777777777779,
default = "mph/s",
link = "Acceleration",
},
["km/s2"] = {
name1 = "kilometre per second squared",
name1_us = "kilometer per second squared",
name2 = "kilometres per second squared",
name2_us = "kilometers per second squared",
symbol = "km/s<sup>2</sup>",
utype = "acceleration",
scale = 1000,
default = "mph/s",
link = "Acceleration",
},
["m/s2"] = {
name1 = "metre per second squared",
name1_us = "meter per second squared",
name2 = "metres per second squared",
name2_us = "meters per second squared",
symbol = "m/s<sup>2</sup>",
utype = "acceleration",
scale = 1,
default = "ft/s2",
},
["mph/s"] = {
name1 = "mile per hour per second",
name2 = "miles per hour per second",
symbol = "mph/s",
utype = "acceleration",
scale = 0.44704,
default = "km/hs",
link = "Acceleration",
},
["km/h/s"] = {
target = "km/hs",
},
["standard gravity"] = {
target = "g0",
},
["1000sqft"] = {
name1 = "thousand square feet",
name2 = "thousand square feet",
symbol = "1000 sq ft",
utype = "area",
scale = 92.90304,
default = "m2",
link = "Square foot",
},
["a"] = {
_name1 = "are",
_symbol = "a",
utype = "area",
scale = 100,
prefixes = 1,
default = "sqft",
link = "Hectare#Are",
},
["acre"] = {
symbol = "acre",
usename = 1,
utype = "area",
scale = 4046.8564224,
default = "ha",
subdivs = { ["rood"] = { 4, default = "ha" }, ["sqperch"] = { 160, default = "ha" } },
},
["acre-sing"] = {
target = "acre",
},
["arpent"] = {
symbol = "arpent",
usename = 1,
utype = "area",
scale = 3418.89,
default = "ha",
},
["cda"] = {
name1 = "cuerda",
symbol = "cda",
utype = "area",
scale = 3930.395625,
default = "ha acre",
},
["daa"] = {
name1 = "decare",
symbol = "daa",
utype = "area",
scale = 1000,
default = "km2 sqmi",
},
["dunam"] = {
symbol = "dunam",
usename = 1,
utype = "area",
scale = 1000,
default = "km2 sqmi",
},
["dunum"] = {
symbol = "dunum",
usename = 1,
utype = "area",
scale = 1000,
default = "km2 sqmi",
link = "Dunam",
},
["ha"] = {
name1 = "hectare",
symbol = "ha",
utype = "area",
scale = 10000,
default = "acre",
},
["hectare"] = {
name1 = "hectare",
symbol = "ha",
usename = 1,
utype = "area",
scale = 10000,
default = "acre",
},
["Irish acre"] = {
name1 = "Irish acre",
symbol = "Irish acres",
utype = "area",
scale = 6555.2385024,
default = "ha",
link = "Acre (Irish)",
},
["m2"] = {
_name1 = "square metre",
_name1_us= "square meter",
_symbol = "m<sup>2</sup>",
prefix_position= 8,
utype = "area",
scale = 1,
prefixes = 2,
default = "sqft",
link = "Square metre",
},
["pondemaat"] = {
name1 = "pondemaat",
name2 = "pondemaat",
symbol = "pond",
utype = "area",
scale = 3674.363358816,
default = "m2",
link = ":nl:pondemaat",
},
["pyeong"] = {
name2 = "pyeong",
symbol = "pyeong",
usename = 1,
utype = "area",
scale = 3.3057851239669422,
default = "m2",
},
["rai"] = {
name2 = "rai",
symbol = "rai",
utype = "area",
scale = 1600,
default = "m2",
link = "Rai (unit)",
},
["rood"] = {
symbol = "rood",
usename = 1,
utype = "area",
scale = 1011.7141056,
default = "sqft m2",
subdivs = { ["sqperch"] = { 40, default = "m2" } },
link = "Rood (unit)",
},
["sqfoot"] = {
name1 = "square foot",
name2 = "square foot",
symbol = "sq ft",
utype = "area",
scale = 0.09290304,
default = "m2",
},
["sqft"] = {
name1 = "square foot",
name2 = "square feet",
symbol = "sq ft",
utype = "area",
scale = 0.09290304,
default = "m2",
},
["sqin"] = {
name1 = "square inch",
name2 = "square inches",
symbol = "sq in",
utype = "area",
scale = 0.00064516,
default = "cm2",
},
["sqmi"] = {
name1 = "square mile",
symbol = "sq mi",
utype = "area",
scale = 2589988.110336,
default = "km2",
},
["sqnmi"] = {
name1 = "square nautical mile",
symbol = "sq nmi",
utype = "area",
scale = 3429904,
default = "km2 sqmi",
link = "Nautical mile",
},
["sqperch"] = {
name2 = "perches",
symbol = "perch",
usename = 1,
utype = "area",
scale = 25.29285264,
default = "m2",
link = "Rod (unit)#Area and volume",
},
["sqverst"] = {
symbol = "square verst",
usename = 1,
utype = "area",
scale = 1138062.24,
default = "km2 sqmi",
link = "Verst",
},
["sqyd"] = {
name1 = "square yard",
symbol = "sq yd",
utype = "area",
scale = 0.83612736,
default = "m2",
},
["tsubo"] = {
name2 = "tsubo",
symbol = "tsubo",
usename = 1,
utype = "area",
scale = 3.3057851239669422,
default = "m2",
link = "Japanese units of measurement#Area",
},
["acres"] = {
target = "acre",
},
["are"] = {
target = "a",
},
["decare"] = {
target = "daa",
},
["foot2"] = {
target = "sqfoot",
},
["ft2"] = {
target = "sqft",
},
["in2"] = {
target = "sqin",
symbol = "in<sup>2</sup>",
},
["km²"] = {
target = "km2",
},
["mi2"] = {
target = "sqmi",
},
["million acre"] = {
target = "e6acre",
},
["million acres"] = {
target = "e6acre",
},
["million hectares"] = {
target = "e6ha",
},
["m²"] = {
target = "m2",
},
["nmi2"] = {
target = "sqnmi",
},
["pond"] = {
target = "pondemaat",
},
["sq arp"] = {
target = "arpent",
},
["sqkm"] = {
target = "km2",
},
["sqm"] = {
target = "m2",
},
["square verst"] = {
target = "sqverst",
},
["verst2"] = {
target = "sqverst",
},
["yd2"] = {
target = "sqyd",
},
["m2/ha"] = {
name1 = "square metre per hectare",
name1_us = "square meter per hectare",
name2 = "square metres per hectare",
name2_us = "square meters per hectare",
symbol = "m<sup>2</sup>/ha",
utype = "area per unit area",
scale = 0.0001,
default = "sqft/acre",
link = "Basal area",
},
["sqft/acre"] = {
name1 = "square foot per acre",
name2 = "square feet per acre",
symbol = "sq ft/acre",
utype = "area per unit area",
scale = 2.295684113865932e-5,
default = "m2/ha",
link = "Basal area",
},
["cent"] = {
name1 = "cent",
symbol = "¢",
utype = "cent",
scale = 1,
default = "cent",
link = "Cent (currency)",
},
["¢"] = {
target = "cent",
},
["A.h"] = {
name1 = "ampere hour",
symbol = "A⋅h",
utype = "charge",
scale = 3600,
default = "coulomb",
},
["coulomb"] = {
_name1 = "coulomb",
_symbol = "C",
utype = "charge",
scale = 1,
prefixes = 1,
default = "e",
link = "Coulomb",
},
["e"] = {
name1 = "elementary charge",
symbol = "''e''",
utype = "charge",
scale = 1.602176487e-19,
default = "coulomb",
},
["g-mol"] = {
name1 = "gram-mole",
symbol = "g‑mol",
utype = "chemical amount",
scale = 1,
default = "lbmol",
link = "Mole (unit)",
},
["gmol"] = {
name1 = "gram-mole",
symbol = "gmol",
utype = "chemical amount",
scale = 1,
default = "lbmol",
link = "Mole (unit)",
},
["kmol"] = {
name1 = "kilomole",
symbol = "kmol",
utype = "chemical amount",
scale = 1000,
default = "lbmol",
link = "Mole (unit)",
},
["lb-mol"] = {
name1 = "pound-mole",
symbol = "lb‑mol",
utype = "chemical amount",
scale = 453.59237,
default = "mol",
},
["lbmol"] = {
name1 = "pound-mole",
symbol = "lbmol",
utype = "chemical amount",
scale = 453.59237,
default = "mol",
},
["mol"] = {
name1 = "mole",
symbol = "mol",
utype = "chemical amount",
scale = 1,
default = "lbmol",
link = "Mole (unit)",
},
["kgCO2/L"] = {
name1 = "kilogram per litre",
name1_us = "kilogram per liter",
name2 = "kilograms per litre",
name2_us = "kilograms per liter",
symbol = "kg(CO<sub>2</sub>)/L",
utype = "co2 per unit volume",
scale = 1000,
default = "lbCO2/USgal",
link = "Exhaust gas",
},
["lbCO2/USgal"] = {
name1 = "pound per US gallon",
name2 = "pounds per US gallon",
symbol = "lbCO2/US gal",
utype = "co2 per unit volume",
scale = 119.82642731689663,
default = "kgCO2/L",
link = "Exhaust gas",
},
["oz/lb"] = {
per = { "oz", "lb" },
utype = "concentration",
default = "mg/kg",
},
["mg/kg"] = {
per = { "mg", "kg" },
utype = "concentration",
default = "oz/lb",
},
["g/dm3"] = {
name1 = "gram per cubic decimetre",
name1_us = "gram per cubic decimeter",
name2 = "grams per cubic decimetre",
name2_us = "grams per cubic decimeter",
symbol = "g/dm<sup>3</sup>",
utype = "density",
scale = 1,
default = "kg/m3",
link = "Density",
},
["g/L"] = {
name1 = "gram per litre",
name1_us = "gram per liter",
name2 = "grams per litre",
name2_us = "grams per liter",
symbol = "g/L",
utype = "density",
scale = 1,
default = "lb/cuin",
link = "Density",
},
["g/mL"] = {
name1 = "gram per millilitre",
name1_us = "gram per milliliter",
name2 = "grams per millilitre",
name2_us = "grams per milliliter",
symbol = "g/mL",
utype = "density",
scale = 1000,
default = "lb/cuin",
link = "Density",
},
["g/ml"] = {
name1 = "gram per millilitre",
name1_us = "gram per milliliter",
name2 = "grams per millilitre",
name2_us = "grams per milliliter",
symbol = "g/ml",
utype = "density",
scale = 1000,
default = "lb/cuin",
link = "Density",
},
["kg/dm3"] = {
name1 = "kilogram per cubic decimetre",
name1_us = "kilogram per cubic decimeter",
name2 = "kilograms per cubic decimetre",
name2_us = "kilograms per cubic decimeter",
symbol = "kg/dm<sup>3</sup>",
utype = "density",
scale = 1000,
default = "lb/cuft",
link = "Density",
},
["kg/L"] = {
name1 = "kilogram per litre",
name1_us = "kilogram per liter",
name2 = "kilograms per litre",
name2_us = "kilograms per liter",
symbol = "kg/L",
utype = "density",
scale = 1000,
default = "lb/USgal",
link = "Density",
},
["kg/l"] = {
name1 = "kilogram per litre",
name1_us = "kilogram per liter",
name2 = "kilograms per litre",
name2_us = "kilograms per liter",
symbol = "kg/l",
utype = "density",
scale = 1000,
default = "lb/USgal",
link = "Density",
},
["kg/m3"] = {
name1 = "kilogram per cubic metre",
name1_us = "kilogram per cubic meter",
name2 = "kilograms per cubic metre",
name2_us = "kilograms per cubic meter",
symbol = "kg/m<sup>3</sup>",
utype = "density",
scale = 1,
default = "lb/cuyd",
link = "Density",
},
["lb/cuft"] = {
name1 = "pound per cubic foot",
name2 = "pounds per cubic foot",
symbol = "lb/cu ft",
utype = "density",
scale = 16.018463373960142,
default = "g/cm3",
link = "Density",
},
["lb/cuin"] = {
name1 = "pound per cubic inch",
name2 = "pounds per cubic inch",
symbol = "lb/cu in",
utype = "density",
scale = 27679.904710203122,
default = "g/cm3",
link = "Density",
},
["lb/cuyd"] = {
name1 = "pound per cubic yard",
name2 = "pounds per cubic yard",
symbol = "lb/cu yd",
utype = "density",
scale = 0.5932764212577829,
default = "kg/m3",
link = "Density",
},
["lb/impgal"] = {
name1 = "pound per imperial gallon",
name2 = "pounds per imperial gallon",
symbol = "lb/imp gal",
utype = "density",
scale = 99.776372663101697,
default = "kg/L",
link = "Density",
},
["lb/in3"] = {
name1 = "pound per cubic inch",
name2 = "pounds per cubic inch",
symbol = "lb/cu in",
utype = "density",
scale = 27679.904710203122,
default = "g/cm3",
link = "Density",
},
["lb/U.S.gal"] = {
name1 = "pound per U.S. gallon",
name2 = "pounds per U.S. gallon",
symbol = "lb/U.S. gal",
utype = "density",
scale = 119.82642731689663,
default = "kg/L",
link = "Density",
},
["lb/USbu"] = {
name1 = "pound per US bushel",
name2 = "pounds per US bushel",
symbol = "lb/US bu",
utype = "density",
scale = 12.871859780974471,
default = "kg/m3",
link = "Bushel",
},
["lb/USgal"] = {
name1 = "pound per US gallon",
name2 = "pounds per US gallon",
symbol = "lb/US gal",
utype = "density",
scale = 119.82642731689663,
default = "kg/L",
link = "Density",
},
["lbm/cuin"] = {
name1 = "pound mass per cubic inch",
name2 = "pounds mass per cubic inch",
symbol = "lbm/cu in",
utype = "density",
scale = 27679.904710203122,
default = "g/cm3",
link = "Density",
},
["mg/L"] = {
name1 = "milligram per litre",
name1_us = "milligram per liter",
name2 = "milligrams per litre",
name2_us = "milligrams per liter",
symbol = "mg/L",
utype = "density",
scale = 0.001,
default = "lb/cuin",
link = "Density",
},
["oz/cuin"] = {
name1 = "ounce per cubic inch",
name2 = "ounces per cubic inch",
symbol = "oz/cu in",
utype = "density",
scale = 1729.9940443876951,
default = "g/cm3",
link = "Density",
},
["g/cm3"] = {
per = { "g", "cm3" },
utype = "density",
default = "lb/cuin",
},
["g/m3"] = {
per = { "g", "m3" },
utype = "density",
default = "lb/cuyd",
link = "Density",
},
["Mg/m3"] = {
per = { "Mg", "m3" },
utype = "density",
default = "lb/cuft",
},
["mg/l"] = {
per = { "mg", "ll" },
utype = "density",
default = "oz/cuin",
},
["μg/dL"] = {
per = { "μg", "dL" },
utype = "density",
default = "lb/cuin",
},
["μg/l"] = {
per = { "μg", "ll" },
utype = "density",
default = "oz/cuin",
},
["lb/ft3"] = {
target = "lb/cuft",
},
["lb/yd3"] = {
target = "lb/cuyd",
},
["lbm/in3"] = {
target = "lbm/cuin",
},
["mcg/dL"] = {
target = "μg/dL",
},
["oz/in3"] = {
target = "oz/cuin",
},
["ug/dL"] = {
target = "μg/dL",
},
["ug/l"] = {
target = "μg/l",
},
["B.O.T.U."] = {
name1 = "Board of Trade Unit",
symbol = "B.O.T.U.",
utype = "energy",
scale = 3600000,
default = "MJ",
link = "Kilowatt-hour",
},
["bboe"] = {
name1 = "barrel of oil equivalent",
name2 = "barrels of oil equivalent",
symbol = "bboe",
utype = "energy",
scale = 6117863200,
default = "GJ",
},
["BOE"] = {
name1 = "barrel of oil equivalent",
name2 = "barrels of oil equivalent",
symbol = "BOE",
utype = "energy",
scale = 6117863200,
default = "GJ",
},
["BTU"] = {
name1 = "British thermal unit",
symbol = "BTU",
utype = "energy",
scale = 1055.05585262,
default = "kJ",
},
["Btu"] = {
name1 = "British thermal unit",
symbol = "Btu",
utype = "energy",
scale = 1055.05585262,
default = "kJ",
},
["BTU-39F"] = {
name1 = "British thermal unit (39°F)",
name2 = "British thermal units (39°F)",
symbol = "BTU<sub>39°F</sub>",
utype = "energy",
scale = 1059.67,
default = "kJ",
link = "British thermal unit",
},
["Btu-39F"] = {
name1 = "British thermal unit (39°F)",
name2 = "British thermal units (39°F)",
symbol = "Btu<sub>39°F</sub>",
utype = "energy",
scale = 1059.67,
default = "kJ",
link = "British thermal unit",
},
["BTU-59F"] = {
name1 = "British thermal unit (59°F)",
name2 = "British thermal units (59°F)",
symbol = "BTU<sub>59°F</sub>",
utype = "energy",
scale = 1054.804,
default = "kJ",
link = "British thermal unit",
},
["Btu-59F"] = {
name1 = "British thermal unit (59°F)",
name2 = "British thermal units (59°F)",
symbol = "Btu<sub>59°F</sub>",
utype = "energy",
scale = 1054.804,
default = "kJ",
link = "British thermal unit",
},
["BTU-60F"] = {
name1 = "British thermal unit (60°F)",
name2 = "British thermal units (60°F)",
symbol = "BTU<sub>60°F</sub>",
utype = "energy",
scale = 1054.68,
default = "kJ",
link = "British thermal unit",
},
["Btu-60F"] = {
name1 = "British thermal unit (60°F)",
name2 = "British thermal units (60°F)",
symbol = "Btu<sub>60°F</sub>",
utype = "energy",
scale = 1054.68,
default = "kJ",
link = "British thermal unit",
},
["BTU-63F"] = {
name1 = "British thermal unit (63°F)",
name2 = "British thermal units (63°F)",
symbol = "BTU<sub>63°F</sub>",
utype = "energy",
scale = 1054.6,
default = "kJ",
link = "British thermal unit",
},
["Btu-63F"] = {
name1 = "British thermal unit (63°F)",
name2 = "British thermal units (63°F)",
symbol = "Btu<sub>63°F</sub>",
utype = "energy",
scale = 1054.6,
default = "kJ",
link = "British thermal unit",
},
["BTU-ISO"] = {
name1 = "British thermal unit (ISO)",
name2 = "British thermal units (ISO)",
symbol = "BTU<sub>ISO</sub>",
utype = "energy",
scale = 1055.056,
default = "kJ",
link = "British thermal unit",
},
["Btu-ISO"] = {
target = "BTU-ISO",
},
["BTU-IT"] = {
name1 = "British thermal unit (IT)",
name2 = "British thermal units (IT)",
symbol = "BTU<sub>IT</sub>",
utype = "energy",
scale = 1055.05585262,
default = "kJ",
link = "British thermal unit",
},
["Btu-IT"] = {
name1 = "British thermal unit (IT)",
name2 = "British thermal units (IT)",
symbol = "Btu<sub>IT</sub>",
utype = "energy",
scale = 1055.05585262,
default = "kJ",
link = "British thermal unit",
},
["BTU-mean"] = {
name1 = "British thermal unit (mean)",
name2 = "British thermal units (mean)",
symbol = "BTU<sub>mean</sub>",
utype = "energy",
scale = 1055.87,
default = "kJ",
link = "British thermal unit",
},
["Btu-mean"] = {
name1 = "British thermal unit (mean)",
name2 = "British thermal units (mean)",
symbol = "Btu<sub>mean</sub>",
utype = "energy",
scale = 1055.87,
default = "kJ",
link = "British thermal unit",
},
["BTU-th"] = {
name1 = "British thermal unit (thermochemical)",
name2 = "British thermal units (thermochemical)",
symbol = "BTU<sub>th</sub>",
utype = "energy",
scale = 1054.35026444,
default = "kJ",
link = "British thermal unit",
},
["Btu-th"] = {
name1 = "British thermal unit (thermochemical)",
name2 = "British thermal units (thermochemical)",
symbol = "Btu<sub>th</sub>",
utype = "energy",
scale = 1054.35026444,
default = "kJ",
link = "British thermal unit",
},
["Cal"] = {
name1 = "calorie",
symbol = "Cal",
utype = "energy",
scale = 4184,
default = "kJ",
},
["cal"] = {
name1 = "calorie",
symbol = "cal",
utype = "energy",
scale = 4.184,
default = "J",
},
["Cal-15"] = {
name1 = "Calorie (15°C)",
name2 = "Calories (15°C)",
symbol = "Cal<sub>15</sub>",
utype = "energy",
scale = 4185.8,
default = "kJ",
link = "Calorie",
},
["cal-15"] = {
name1 = "calorie (15°C)",
name2 = "calories (15°C)",
symbol = "cal<sub>15</sub>",
utype = "energy",
scale = 4.1858,
default = "J",
link = "Calorie",
},
["Cal-IT"] = {
name1 = "Calorie (International Steam Table)",
name2 = "Calories (International Steam Table)",
symbol = "Cal<sub>IT</sub>",
utype = "energy",
scale = 4186.8,
default = "kJ",
link = "Calorie",
},
["cal-IT"] = {
name1 = "calorie (International Steam Table)",
name2 = "calories (International Steam Table)",
symbol = "cal<sub>IT</sub>",
utype = "energy",
scale = 4.1868,
default = "J",
link = "Calorie",
},
["Cal-th"] = {
name1 = "Calorie (thermochemical)",
name2 = "Calories (thermochemical)",
symbol = "Cal<sub>th</sub>",
utype = "energy",
scale = 4184,
default = "kJ",
link = "Calorie",
},
["cal-th"] = {
name1 = "calorie (thermochemical)",
name2 = "calories (thermochemical)",
symbol = "cal<sub>th</sub>",
utype = "energy",
scale = 4.184,
default = "J",
link = "Calorie",
},
["CHU-IT"] = {
name1 = "Celsius heat unit (International Table)",
name2 = "Celsius heat units (International Table)",
symbol = "CHU<sub>IT</sub>",
utype = "energy",
scale = 1899.100534716,
default = "kJ",
link = "Conversion of units#Energy",
},
["cufootnaturalgas"] = {
name1 = "cubic foot of natural gas",
name2 = "cubic foot of natural gas",
symbol = "cuftnaturalgas",
usename = 1,
utype = "energy",
scale = 1055055.85262,
default = "MJ",
link = "Conversion of units#Energy",
},
["cuftnaturalgas"] = {
name1 = "cubic foot of natural gas",
name2 = "cubic feet of natural gas",
symbol = "cuftnaturalgas",
usename = 1,
utype = "energy",
scale = 1055055.85262,
default = "MJ",
link = "Conversion of units#Energy",
},
["Eh"] = {
name1 = "Hartree",
symbol = "''E''<sub>h</sub>",
utype = "energy",
scale = 4.35974417e-18,
default = "eV",
},
["erg"] = {
symbol = "erg",
utype = "energy",
scale = 0.0000001,
default = "μJ",
},
["eV"] = {
name1 = "electronvolt",
symbol = "eV",
utype = "energy",
scale = 1.602176487e-19,
default = "aJ",
},
["feV"] = {
name1 = "femtoelectronvolt",
symbol = "feV",
utype = "energy",
scale = 1.602176487e-34,
default = "yJ",
link = "Electronvolt",
},
["foe"] = {
symbol = "foe",
utype = "energy",
scale = 1e44,
default = "YJ",
link = "Foe (unit)",
},
["ftlb"] = {
name1 = "foot-pound",
symbol = "ft⋅lb",
utype = "energy",
alttype = "torque",
scale = 1.3558179483314004,
default = "J",
link = "Foot-pound (energy)",
},
["ftlb-f"] = {
name1 = "foot-pound force",
name2 = "foot-pounds force",
symbol = "ft⋅lb<sub>f</sub>",
utype = "energy",
alttype = "torque",
scale = 1.3558179483314004,
default = "J",
link = "Foot-pound (energy)",
},
["ftlbf"] = {
name1 = "foot-pound force",
name2 = "foot-pounds force",
symbol = "ft⋅lbf",
utype = "energy",
alttype = "torque",
scale = 1.3558179483314004,
default = "J",
link = "Foot-pound (energy)",
},
["ftpdl"] = {
name1 = "foot-poundal",
symbol = "ft⋅pdl",
utype = "energy",
scale = 0.0421401100938048,
default = "J",
},
["GeV"] = {
name1 = "gigaelectronvolt",
symbol = "GeV",
utype = "energy",
scale = 1.602176487e-10,
default = "nJ",
link = "Electronvolt",
},
["gTNT"] = {
name2 = "grams of TNT",
symbol = "gram of TNT",
usename = 1,
utype = "energy",
scale = 4184,
default = "kJ",
link = "TNT equivalent",
},
["Gtoe"] = {
name1 = "gigatonne of oil equivalent",
name2 = "gigatonnes of oil equivalent",
symbol = "Gtoe",
utype = "energy",
scale = 4.1868e19,
default = "EJ",
link = "Tonne of oil equivalent",
},
["GtonTNT"] = {
name2 = "gigatons of TNT",
symbol = "gigaton of TNT",
usename = 1,
utype = "energy",
scale = 4.184e18,
default = "EJ",
link = "TNT equivalent",
},
["GtTNT"] = {
name2 = "gigatonnes of TNT",
symbol = "gigatonne of TNT",
usename = 1,
utype = "energy",
scale = 4.184e18,
default = "EJ",
link = "TNT equivalent",
},
["GW.h"] = {
name1 = "gigawatt-hour",
symbol = "GW⋅h",
utype = "energy",
scale = 3.6e12,
default = "TJ",
link = "Kilowatt-hour",
},
["GWh"] = {
name1 = "gigawatt-hour",
symbol = "GWh",
utype = "energy",
scale = 3.6e12,
default = "TJ",
link = "Kilowatt-hour",
},
["hph"] = {
name1 = "horsepower-hour",
symbol = "hp⋅h",
utype = "energy",
scale = 2684519.537696172792,
default = "kWh",
link = "Horsepower",
},
["inlb"] = {
name1 = "inch-pound",
symbol = "in⋅lb",
utype = "energy",
alttype = "torque",
scale = 0.1129848290276167,
default = "mJ",
link = "Foot-pound (energy)",
},
["inlb-f"] = {
name1 = "inch-pound force",
name2 = "inch-pounds force",
symbol = "in⋅lb<sub>f</sub>",
utype = "energy",
alttype = "torque",
scale = 0.1129848290276167,
default = "mJ",
link = "Foot-pound (energy)",
},
["inlbf"] = {
name1 = "inch-pound force",
name2 = "inch-pounds force",
symbol = "in⋅lbf",
utype = "energy",
alttype = "torque",
scale = 0.1129848290276167,
default = "mJ",
link = "Foot-pound (energy)",
},
["inoz-f"] = {
name1 = "inch-ounce force",
name2 = "inch-ounces force",
symbol = "in⋅oz<sub>f</sub>",
utype = "energy",
alttype = "torque",
scale = 0.00706155181422604375,
default = "mJ",
link = "Foot-pound (energy)",
},
["inozf"] = {
name1 = "inch-ounce force",
name2 = "inch-ounces force",
symbol = "in⋅ozf",
utype = "energy",
alttype = "torque",
scale = 0.00706155181422604375,
default = "mJ",
link = "Foot-pound (energy)",
},
["J"] = {
_name1 = "joule",
_symbol = "J",
utype = "energy",
scale = 1,
prefixes = 1,
default = "cal",
link = "Joule",
},
["kBOE"] = {
name1 = "kilo barrel of oil equivalent",
name2 = "kilo barrels of oil equivalent",
symbol = "kBOE",
utype = "energy",
scale = 6.1178632e12,
default = "TJ",
link = "Barrel of oil equivalent",
},
["kcal"] = {
name1 = "kilocalorie",
symbol = "kcal",
utype = "energy",
scale = 4184,
default = "kJ",
link = "Calorie",
},
["kcal-15"] = {
name1 = "kilocalorie (15°C)",
name2 = "kilocalories (15°C)",
symbol = "kcal<sub>15</sub>",
utype = "energy",
scale = 4185.8,
default = "kJ",
link = "Calorie",
},
["kcal-IT"] = {
name1 = "kilocalorie (International Steam Table)",
name2 = "kilocalories (International Steam Table)",
symbol = "kcal<sub>IT</sub>",
utype = "energy",
scale = 4186.8,
default = "kJ",
link = "Calorie",
},
["kcal-th"] = {
name1 = "kilocalorie (thermochemical)",
name2 = "kilocalories (thermochemical)",
symbol = "kcal<sub>th</sub>",
utype = "energy",
scale = 4184,
default = "kJ",
link = "Calorie",
},
["kerg"] = {
name1 = "kiloerg",
symbol = "kerg",
utype = "energy",
scale = 0.0001,
default = "mJ",
link = "Erg",
},
["keV"] = {
name1 = "kiloelectronvolt",
symbol = "keV",
utype = "energy",
scale = 1.602176487e-16,
default = "fJ",
link = "Electronvolt",
},
["kgTNT"] = {
name2 = "kilograms of TNT",
symbol = "kilogram of TNT",
usename = 1,
utype = "energy",
scale = 4184000,
default = "MJ",
link = "TNT equivalent",
},
["kt(TNT)"] = {
name1 = "kilotonne",
name1_us = "kiloton",
symbol = "kt",
utype = "energy",
scale = 4.184e12,
default = "TJ",
link = "TNT equivalent",
},
["ktoe"] = {
name1 = "kilotonne of oil equivalent",
name2 = "kilotonnes of oil equivalent",
symbol = "ktoe",
utype = "energy",
scale = 4.1868e13,
default = "TJ",
link = "Tonne of oil equivalent",
},
["ktonTNT"] = {
name1 = "kiloton of TNT",
name2 = "kilotons of TNT",
symbol = "kt",
utype = "energy",
scale = 4.184e12,
default = "TJ",
link = "TNT equivalent",
},
["ktTNT"] = {
name2 = "kilotonnes of TNT",
symbol = "kilotonne of TNT",
usename = 1,
utype = "energy",
scale = 4.184e12,
default = "TJ",
link = "TNT equivalent",
},
["kW.h"] = {
name1 = "kilowatt-hour",
symbol = "kW⋅h",
utype = "energy",
scale = 3600000,
default = "MJ",
},
["kWh"] = {
name1 = "kilowatt-hour",
symbol = "kWh",
utype = "energy",
scale = 3600000,
default = "MJ",
},
["Mcal"] = {
name1 = "megacalorie",
symbol = "Mcal",
utype = "energy",
scale = 4184000,
default = "MJ",
link = "Calorie",
},
["mcal"] = {
name1 = "millicalorie",
symbol = "mcal",
utype = "energy",
scale = 0.004184,
default = "mJ",
link = "Calorie",
},
["Mcal-15"] = {
name1 = "megacalorie (15°C)",
name2 = "megacalories (15°C)",
symbol = "Mcal<sub>15</sub>",
utype = "energy",
scale = 4185800,
default = "MJ",
link = "Calorie",
},
["mcal-15"] = {
name1 = "millicalorie (15°C)",
name2 = "millicalories (15°C)",
symbol = "mcal<sub>15</sub>",
utype = "energy",
scale = 0.0041858,
default = "mJ",
link = "Calorie",
},
["Mcal-IT"] = {
name1 = "megacalorie (International Steam Table)",
name2 = "megacalories (International Steam Table)",
symbol = "Mcal<sub>IT</sub>",
utype = "energy",
scale = 4186800,
default = "MJ",
link = "Calorie",
},
["mcal-IT"] = {
name1 = "millicalorie (International Steam Table)",
name2 = "millicalories (International Steam Table)",
symbol = "mcal<sub>IT</sub>",
utype = "energy",
scale = 0.0041868,
default = "mJ",
link = "Calorie",
},
["Mcal-th"] = {
name1 = "megacalorie (thermochemical)",
name2 = "megacalories (thermochemical)",
symbol = "Mcal<sub>th</sub>",
utype = "energy",
scale = 4184000,
default = "MJ",
link = "Calorie",
},
["mcal-th"] = {
name1 = "millicalorie (thermochemical)",
name2 = "millicalories (thermochemical)",
symbol = "mcal<sub>th</sub>",
utype = "energy",
scale = 0.004184,
default = "mJ",
link = "Calorie",
},
["Merg"] = {
name1 = "megaerg",
symbol = "Merg",
utype = "energy",
scale = 0.1,
default = "J",
link = "Erg",
},
["merg"] = {
name1 = "millierg",
symbol = "merg",
utype = "energy",
scale = 0.0000000001,
default = "μJ",
link = "Erg",
},
["MeV"] = {
name1 = "megaelectronvolt",
symbol = "MeV",
utype = "energy",
scale = 1.602176487e-13,
default = "pJ",
link = "Electronvolt",
},
["meV"] = {
name1 = "millielectronvolt",
symbol = "meV",
utype = "energy",
scale = 1.602176487e-22,
default = "zJ",
link = "Electronvolt",
},
["MMBtu"] = {
name1 = "million British thermal units",
name2 = "million British thermal units",
symbol = "MMBtu",
utype = "energy",
scale = 1055055852.62,
default = "GJ",
link = "British thermal unit",
},
["Mt(TNT)"] = {
name1 = "megatonne",
name1_us = "megaton",
symbol = "Mt",
utype = "energy",
scale = 4.184e15,
default = "PJ",
link = "TNT equivalent",
},
["Mtoe"] = {
name1 = "megatonne of oil equivalent",
name2 = "megatonnes of oil equivalent",
symbol = "Mtoe",
utype = "energy",
scale = 4.1868e16,
default = "PJ",
link = "Tonne of oil equivalent",
},
["MtonTNT"] = {
name1 = "megaton of TNT",
name2 = "megatons of TNT",
symbol = "Mt",
utype = "energy",
scale = 4.184e15,
default = "PJ",
link = "TNT equivalent",
},
["mtonTNT"] = {
name2 = "millitons of TNT",
symbol = "milliton of TNT",
usename = 1,
utype = "energy",
scale = 4184000,
default = "MJ",
link = "TNT equivalent",
},
["MtTNT"] = {
name2 = "megatonnes of TNT",
symbol = "megatonne of TNT",
usename = 1,
utype = "energy",
scale = 4.184e15,
default = "PJ",
link = "TNT equivalent",
},
["mtTNT"] = {
name2 = "millitonnes of TNT",
symbol = "millitonne of TNT",
usename = 1,
utype = "energy",
scale = 4184000,
default = "MJ",
link = "TNT equivalent",
},
["MW.h"] = {
name1 = "megawatt-hour",
symbol = "MW⋅h",
utype = "energy",
scale = 3600000000,
default = "GJ",
link = "Kilowatt-hour",
},
["mW.h"] = {
name1 = "milliwatt-hour",
symbol = "mW⋅h",
utype = "energy",
scale = 3.6,
default = "J",
link = "Kilowatt-hour",
},
["MWh"] = {
name1 = "megawatt-hour",
symbol = "MWh",
utype = "energy",
scale = 3600000000,
default = "GJ",
link = "Kilowatt-hour",
},
["mWh"] = {
name1 = "milliwatt-hour",
symbol = "mWh",
utype = "energy",
scale = 3.6,
default = "J",
link = "Kilowatt-hour",
},
["neV"] = {
name1 = "nanoelectronvolt",
symbol = "neV",
utype = "energy",
scale = 1.602176487e-28,
default = "yJ",
link = "Electronvolt",
},
["PeV"] = {
name1 = "petaelectronvolt",
symbol = "PeV",
utype = "energy",
scale = 0.0001602176487,
default = "mJ",
link = "Electronvolt",
},
["peV"] = {
name1 = "picoelectronvolt",
symbol = "peV",
utype = "energy",
scale = 1.602176487e-31,
default = "yJ",
link = "Electronvolt",
},
["PSh"] = {
name1 = "Pferdestärkenstunde",
symbol = "PSh",
utype = "energy",
scale = 2647795.5,
default = "kWh",
},
["quad"] = {
name1 = "quadrillion British thermal units",
name2 = "quadrillion British thermal units",
symbol = "quad",
utype = "energy",
scale = 1.054804e18,
default = "EJ",
link = "Quad (unit)",
},
["Ry"] = {
name1 = "rydberg",
symbol = "Ry",
utype = "energy",
scale = 2.1798741e-18,
default = "eV",
link = "Rydberg constant",
},
["scf"] = {
name1 = "standard cubic foot",
name2 = "standard cubic feet",
symbol = "scf",
utype = "energy",
scale = 2869.2044809344,
default = "kJ",
},
["scfoot"] = {
name1 = "standard cubic foot",
name2 = "standard cubic foot",
symbol = "scf",
utype = "energy",
scale = 2869.2044809344,
default = "kJ",
},
["t(TNT)"] = {
name1 = "tonne",
name1_us = "ton",
symbol = "t",
utype = "energy",
scale = 4184000000,
default = "GJ",
link = "TNT equivalent",
},
["TeV"] = {
name1 = "teraelectronvolt",
symbol = "TeV",
utype = "energy",
scale = 1.602176487e-7,
default = "μJ",
link = "Electronvolt",
},
["th"] = {
name1 = "thermie",
symbol = "th",
utype = "energy",
scale = 4186800,
default = "MJ",
link = "Conversion of units#Energy",
},
["thm-EC"] = {
name1 = "therm (EC)",
name2 = "therms (EC)",
symbol = "thm (EC)",
utype = "energy",
scale = 105506000,
default = "MJ",
link = "Therm",
},
["thm-UK"] = {
name1 = "therm (UK)",
name2 = "therms (UK)",
symbol = "thm (UK)",
utype = "energy",
scale = 105505585.257348,
default = "MJ",
link = "Therm",
},
["thm-US"] = {
name1 = "therm (US)",
name1_us = "therm (U.S.)",
name2 = "therms (US)",
name2_us = "therms (U.S.)",
symbol = "thm (US)",
sym_us = "thm (U.S.)",
utype = "energy",
scale = 105480400,
default = "MJ",
link = "Therm",
},
["toe"] = {
name1 = "tonne of oil equivalent",
name2 = "tonnes of oil equivalent",
symbol = "toe",
utype = "energy",
scale = 41868000000,
default = "GJ",
},
["tonTNT"] = {
name2 = "tons of TNT",
symbol = "ton of TNT",
usename = 1,
utype = "energy",
scale = 4184000000,
default = "GJ",
link = "TNT equivalent",
},
["tTNT"] = {
name2 = "tonnes of TNT",
symbol = "tonne of TNT",
usename = 1,
utype = "energy",
scale = 4184000000,
default = "GJ",
link = "TNT equivalent",
},
["TtonTNT"] = {
name2 = "teratons of TNT",
symbol = "teraton of TNT",
usename = 1,
utype = "energy",
scale = 4.184e21,
default = "ZJ",
link = "TNT equivalent",
},
["TtTNT"] = {
name2 = "teratonnes of TNT",
symbol = "teratonne of TNT",
usename = 1,
utype = "energy",
scale = 4.184e21,
default = "ZJ",
link = "TNT equivalent",
},
["TW.h"] = {
name1 = "terawatt-hour",
symbol = "TW⋅h",
utype = "energy",
scale = 3.6e15,
default = "PJ",
link = "Kilowatt-hour",
},
["TWh"] = {
name1 = "terawatt-hour",
symbol = "TWh",
utype = "energy",
scale = 3.6e15,
default = "PJ",
link = "Kilowatt-hour",
},
["W.h"] = {
name1 = "watt-hour",
symbol = "W⋅h",
utype = "energy",
scale = 3600,
default = "kJ",
link = "Kilowatt-hour",
},
["Wh"] = {
name1 = "watt-hour",
symbol = "Wh",
utype = "energy",
scale = 3600,
default = "kJ",
link = "Kilowatt-hour",
},
["μerg"] = {
name1 = "microerg",
symbol = "μerg",
utype = "energy",
scale = 1e-13,
default = "nJ",
link = "Erg",
},
["μeV"] = {
name1 = "microelectronvolt",
symbol = "μeV",
utype = "energy",
scale = 1.602176487e-25,
default = "yJ",
link = "Electronvolt",
},
["μW.h"] = {
name1 = "microwatt-hour",
symbol = "μW⋅h",
utype = "energy",
scale = 0.0036,
default = "mJ",
link = "Kilowatt-hour",
},
["μWh"] = {
name1 = "microwatt-hour",
symbol = "μWh",
utype = "energy",
scale = 0.0036,
default = "mJ",
link = "Kilowatt-hour",
},
["-kW.h"] = {
target = "kW.h",
link = "Kilowatt hour",
},
["btu"] = {
target = "BTU",
},
["Calorie"] = {
target = "Cal",
},
["ft.lbf"] = {
target = "ftlbf",
},
["ft·lbf"] = {
target = "ftlbf",
},
["g-cal-15"] = {
target = "cal-15",
},
["g-cal-IT"] = {
target = "cal-IT",
},
["g-cal-th"] = {
target = "cal-th",
},
["g-kcal-15"] = {
target = "kcal-15",
},
["g-kcal-IT"] = {
target = "kcal-IT",
},
["g-kcal-th"] = {
target = "kcal-th",
},
["g-Mcal-15"] = {
target = "Mcal-15",
},
["g-mcal-15"] = {
target = "mcal-15",
},
["g-Mcal-IT"] = {
target = "Mcal-IT",
},
["g-mcal-IT"] = {
target = "mcal-IT",
},
["g-Mcal-th"] = {
target = "Mcal-th",
},
["g-mcal-th"] = {
target = "mcal-th",
},
["GW-h"] = {
target = "GW.h",
},
["GW·h"] = {
target = "GW.h",
},
["Hartree"] = {
target = "Eh",
},
["hp.h"] = {
target = "hph",
},
["in.lb-f"] = {
target = "inlb-f",
},
["in.lbf"] = {
target = "inlbf",
},
["in.oz-f"] = {
target = "inoz-f",
},
["in.ozf"] = {
target = "inozf",
},
["kbboe"] = {
target = "kBOE",
symbol = "kbboe",
},
["kg-cal-15"] = {
target = "Cal-15",
},
["kg-cal-IT"] = {
target = "Cal-IT",
},
["kg-cal-th"] = {
target = "Cal-th",
},
["kW-h"] = {
target = "kW.h",
},
["kW·h"] = {
target = "kW.h",
},
["MW-h"] = {
target = "MW.h",
},
["mW-h"] = {
target = "mW.h",
},
["MW·h"] = {
target = "MW.h",
},
["TW-h"] = {
target = "TW.h",
},
["uerg"] = {
target = "μerg",
},
["ueV"] = {
target = "μeV",
},
["uW-h"] = {
target = "μW.h",
},
["uW.h"] = {
target = "μW.h",
},
["uWh"] = {
target = "μWh",
},
["W-h"] = {
target = "W.h",
},
["eVpar"] = {
_name1 = "electronvolt",
_symbol = "eV",
utype = "energy per chemical amount",
scale = 96485.329522144166,
prefixes = 1,
default = "kcal/mol",
link = "Electronvolt",
},
["kcal/mol"] = {
per = { "kcal", "mol" },
utype = "energy per chemical amount",
default = "kJ/mol",
link = "Kilocalorie per mole",
},
["kJ/mol"] = {
per = { "kJ", "mol" },
utype = "energy per chemical amount",
default = "kcal/mol",
link = "Joule per mole",
},
["kWh/100 km"] = {
name1 = "kilowatt-hour per 100 kilometres",
name1_us = "kilowatt-hour per 100 kilometers",
name2 = "kilowatt-hours per 100 kilometres",
name2_us = "kilowatt-hours per 100 kilometers",
symbol = "kW⋅h/100 km",
utype = "energy per unit length",
scale = 36,
default = "MJ/km kWh/mi",
link = "Kilowatt-hour",
},
["kWh/100 mi"] = {
name1 = "kilowatt-hour per 100 miles",
name2 = "kilowatt-hours per 100 miles",
symbol = "kW⋅h/100 mi",
utype = "energy per unit length",
scale = 22.3694,
default = "mpge",
link = "Miles per gallon gasoline equivalent",
},
["MJ/100 km"] = {
name1 = "megajoule per 100 kilometres",
name1_us = "megajoule per 100 kilometers",
name2 = "megajoules per 100 kilometres",
name2_us = "megajoules per 100 kilometers",
symbol = "MJ/100 km",
utype = "energy per unit length",
scale = 10,
default = "BTU/mi",
link = "British thermal unit",
},
["mpge"] = {
name1 = "mile per gallon gasoline equivalent",
name2 = "miles per gallon gasoline equivalent",
symbol = "mpg‑e",
utype = "energy per unit length",
scale = 1.3263314048360777e-5,
invert = -1,
iscomplex= true,
default = "kWh/100 mi",
link = "Miles per gallon gasoline equivalent",
},
["BTU/mi"] = {
per = { "BTU", "mi" },
utype = "energy per unit length",
default = "v > 1525 ! M ! k ! J/km",
},
["kJ/km"] = {
per = { "kJ", "km" },
utype = "energy per unit length",
default = "BTU/mi",
},
["kWh/km"] = {
per = { "-kW.h", "km" },
utype = "energy per unit length",
default = "MJ/km kWh/mi",
},
["kWh/mi"] = {
per = { "-kW.h", "mi" },
utype = "energy per unit length",
default = "kWh/km MJ/km",
},
["MJ/km"] = {
per = { "MJ", "km" },
utype = "energy per unit length",
default = "BTU/mi",
},
["mpg-e"] = {
target = "mpge",
},
["BTU/lb"] = {
name1 = "British thermal unit per pound",
name2 = "British thermal units per pound",
symbol = "BTU/lb",
utype = "energy per unit mass",
scale = 2326,
default = "kJ/kg",
link = "British thermal unit",
},
["cal/g"] = {
name1 = "calorie per gram",
name2 = "calories per gram",
symbol = "cal/g",
utype = "energy per unit mass",
scale = 4184,
default = "J/g",
},
["GJ/kg"] = {
name1 = "gigajoule per kilogram",
name2 = "gigajoules per kilogram",
symbol = "GJ/kg",
utype = "energy per unit mass",
scale = 1e9,
default = "ktTNT/t",
link = "Specific energy",
},
["J/g"] = {
name1 = "joule per gram",
name2 = "joules per gram",
symbol = "J/g",
utype = "energy per unit mass",
scale = 1000,
default = "kcal/g",
link = "Specific energy",
},
["kcal/g"] = {
name1 = "kilocalorie per gram",
name2 = "kilocalories per gram",
symbol = "kcal/g",
utype = "energy per unit mass",
scale = 4184000,
default = "kJ/g",
},
["kJ/g"] = {
name1 = "kilojoule per gram",
name2 = "kilojoules per gram",
symbol = "kJ/g",
utype = "energy per unit mass",
scale = 1000000,
default = "kcal/g",
link = "Specific energy",
},
["kJ/kg"] = {
name1 = "kilojoule per kilogram",
name2 = "kilojoules per kilogram",
symbol = "kJ/kg",
utype = "energy per unit mass",
scale = 1000,
default = "BTU/lb",
link = "Specific energy",
},
["ktonTNT/MT"] = {
name2 = "kilotons of TNT per metric ton",
symbol = "kiloton of TNT per metric ton",
usename = 1,
utype = "energy per unit mass",
scale = 4184000000,
default = "GJ/kg",
link = "TNT equivalent",
},
["ktTNT/t"] = {
name2 = "kilotonnes of TNT per tonne",
symbol = "kilotonne of TNT per tonne",
usename = 1,
utype = "energy per unit mass",
scale = 4184000000,
default = "GJ/kg",
link = "TNT equivalent",
},
["MtonTNT/MT"] = {
name2 = "megatons of TNT per metric ton",
symbol = "megaton of TNT per metric ton",
usename = 1,
utype = "energy per unit mass",
scale = 4.184e12,
default = "TJ/kg",
link = "TNT equivalent",
},
["MtTNT/MT"] = {
name2 = "megatonnes of TNT per tonne",
symbol = "megatonne of TNT per tonne",
usename = 1,
utype = "energy per unit mass",
scale = 4.184e12,
default = "TJ/kg",
link = "TNT equivalent",
},
["TJ/kg"] = {
name1 = "terajoule per kilogram",
name2 = "terajoules per kilogram",
symbol = "TJ/kg",
utype = "energy per unit mass",
scale = 1e12,
default = "MtTNT/MT",
link = "Specific energy",
},
["Cal/g"] = {
per = { "Cal", "g" },
utype = "energy per unit mass",
default = "kJ/g",
},
["BTU/cuft"] = {
per = { "BTU", "cuft" },
utype = "energy per unit volume",
default = "kJ/L",
},
["Cal/12USoz(mL)serve"] = {
per = { "Cal", "-12USoz(mL)serve" },
utype = "energy per unit volume",
default = "kJ/L",
},
["Cal/12USoz(ml)serve"] = {
per = { "Cal", "-12USoz(ml)serve" },
utype = "energy per unit volume",
default = "kJ/l",
},
["Cal/12USozserve"] = {
per = { "Cal", "-12USozserve" },
utype = "energy per unit volume",
default = "kJ/L",
},
["Cal/USoz"] = {
per = { "Cal", "USoz" },
utype = "energy per unit volume",
default = "kJ/ml",
},
["kJ/L"] = {
per = { "kJ", "L" },
utype = "energy per unit volume",
default = "BTU/cuft",
},
["kJ/l"] = {
per = { "kJ", "ll" },
utype = "energy per unit volume",
default = "BTU/cuft",
},
["kJ/ml"] = {
per = { "kJ", "ml" },
utype = "energy per unit volume",
default = "Cal/USoz",
},
["MJ/m3"] = {
per = { "MJ", "m3" },
utype = "energy per unit volume",
default = "BTU/cuft",
},
["Sv"] = {
_name1 = "sievert",
_symbol = "Sv",
utype = "equivalent radiation dose",
scale = 1,
prefixes = 1,
default = "rem",
link = "Sievert",
},
["rem"] = {
_name1 = "rem",
_symbol = "rem",
utype = "equivalent radiation dose",
scale = 0.01,
prefixes = 1,
default = "Sv",
link = "Roentgen equivalent man",
},
["g/km"] = {
name1 = "gram per kilometre",
name1_us = "gram per kilometer",
name2 = "grams per kilometre",
name2_us = "grams per kilometer",
symbol = "g/km",
utype = "exhaust emission",
scale = 1e-6,
default = "oz/mi",
link = "Exhaust gas",
},
["g/mi"] = {
name1 = "gram per mile",
name2 = "grams per mile",
symbol = "g/mi",
utype = "exhaust emission",
scale = 6.2137119223733397e-7,
default = "g/km",
link = "Exhaust gas",
},
["gCO2/km"] = {
name1 = "gram of CO<sub>2</sub> per kilometre",
name1_us = "gram of CO<sub>2</sub> per kilometer",
name2 = "grams of CO<sub>2</sub> per kilometre",
name2_us = "grams of CO<sub>2</sub> per kilometer",
symbol = "g(CO<sub>2</sub>)/km",
utype = "exhaust emission",
scale = 1e-6,
default = "ozCO2/mi",
link = "Exhaust gas",
},
["gCO2/mi"] = {
name1 = "gram of CO<sub>2</sub> per mile",
name2 = "grams of CO<sub>2</sub> per mile",
symbol = "g(CO<sub>2</sub>)/mi",
utype = "exhaust emission",
scale = 6.2137119223733397e-7,
default = "gCO2/km",
link = "Exhaust gas",
},
["kg/km"] = {
name1 = "kilogram per kilometre",
name1_us = "kilogram per kilometer",
name2 = "kilograms per kilometre",
name2_us = "kilograms per kilometer",
symbol = "kg/km",
utype = "exhaust emission",
scale = 0.001,
default = "lb/mi",
link = "Exhaust gas",
},
["kgCO2/km"] = {
name1 = "kilogram of CO<sub>2</sub> per kilometre",
name1_us = "kilogram of CO<sub>2</sub> per kilometer",
name2 = "kilograms of CO<sub>2</sub> per kilometre",
name2_us = "kilograms of CO<sub>2</sub> per kilometer",
symbol = "kg(CO<sub>2</sub>)/km",
utype = "exhaust emission",
scale = 0.001,
default = "lbCO2/mi",
link = "Exhaust gas",
},
["lb/mi"] = {
name1 = "pound per mile",
name2 = "pounds per mile",
symbol = "lb/mi",
utype = "exhaust emission",
scale = 0.00028184923173665794,
default = "kg/km",
link = "Exhaust gas",
},
["lbCO2/mi"] = {
name1 = "pound of CO<sub>2</sub> per mile",
name2 = "pounds of CO<sub>2</sub> per mile",
symbol = "lb(CO<sub>2</sub>)/mi",
utype = "exhaust emission",
scale = 0.00028184923173665794,
default = "kgCO2/km",
link = "Exhaust gas",
},
["oz/mi"] = {
name1 = "ounce per mile",
name2 = "ounces per mile",
symbol = "oz/mi",
utype = "exhaust emission",
scale = 1.7615576983541121e-5,
default = "g/km",
link = "Exhaust gas",
},
["ozCO2/mi"] = {
name1 = "ounce of CO<sub>2</sub> per mile",
name2 = "ounces of CO<sub>2</sub> per mile",
symbol = "oz(CO<sub>2</sub>)/mi",
utype = "exhaust emission",
scale = 1.7615576983541121e-5,
default = "gCO2/km",
link = "Exhaust gas",
},
["cuft/a"] = {
name1 = "cubic foot per annum",
name2 = "cubic feet per annum",
symbol = "cu ft/a",
utype = "flow",
scale = 8.9730672142368242e-10,
default = "m3/a",
link = "Cubic foot per second",
},
["cuft/d"] = {
name1 = "cubic foot per day",
name2 = "cubic feet per day",
symbol = "cu ft/d",
utype = "flow",
scale = 3.2774128000000003e-7,
default = "m3/d",
link = "Cubic foot per second",
},
["cuft/h"] = {
name1 = "cubic foot per hour",
name2 = "cubic feet per hour",
symbol = "cu ft/h",
utype = "flow",
scale = 7.8657907200000004e-6,
default = "m3/h",
link = "Cubic foot per second",
},
["cuft/min"] = {
name1 = "cubic foot per minute",
name2 = "cubic feet per minute",
symbol = "cu ft/min",
utype = "flow",
scale = 0.00047194744319999999,
default = "m3/min",
},
["cuft/s"] = {
name1 = "cubic foot per second",
name2 = "cubic feet per second",
symbol = "cu ft/s",
utype = "flow",
scale = 28316846592e-12,
default = "m3/s",
},
["cumi/a"] = {
name1 = "cubic mile per annum",
name2 = "cubic miles per annum",
symbol = "cu mi/a",
utype = "flow",
scale = 132.08171170940057,
default = "km3/a",
link = "Cubic foot per second",
},
["cuyd/h"] = {
name1 = "cubic yard per hour",
name2 = "cubic yards per hour",
symbol = "cuyd/h",
utype = "flow",
scale = 0.00021237634944000001,
default = "m3/h",
link = "Cubic foot per second",
},
["cuyd/s"] = {
name1 = "cubic yard per second",
name2 = "cubic yards per second",
symbol = "cu yd/s",
utype = "flow",
scale = 0.76455485798400002,
default = "m3/s",
},
["Goilbbl/a"] = {
name1 = "billion barrels per year",
name2 = "billion barrels per year",
symbol = "Gbbl/a",
utype = "flow",
scale = 5.0380033629933836,
default = "v * 1.58987294928 < 10 ! e6 ! e9 ! m3/a",
link = "Barrel per day",
},
["impgal/h"] = {
name1 = "imperial gallon per hour",
name2 = "imperial gallons per hour",
symbol = "imp gal/h",
utype = "flow",
scale = 1.2628027777777779e-6,
default = "m3/h",
link = "Gallon",
},
["impgal/min"] = {
name1 = "imperial gallon per minute",
name2 = "imperial gallons per minute",
symbol = "imp gal/min",
utype = "flow",
scale = 7.5768166666666671e-5,
default = "m3/s",
link = "Gallon",
},
["impgal/s"] = {
name1 = "imperial gallon per second",
name2 = "imperial gallons per second",
symbol = "impgal/s",
utype = "flow",
scale = 0.00454609,
default = "m3/s",
link = "Imperial gallons per second",
},
["km3/a"] = {
name1 = "cubic kilometre per annum",
name1_us = "cubic kilometer per annum",
name2 = "cubic kilometres per annum",
name2_us = "cubic kilometers per annum",
symbol = "km<sup>3</sup>/a",
utype = "flow",
scale = 31.68808781402895,
default = "cumi/a",
link = "Cubic metre per second",
},
["km3/d"] = {
name1 = "cubic kilometre per day",
name1_us = "cubic kilometer per day",
name2 = "cubic kilometres per day",
name2_us = "cubic kilometers per day",
symbol = "km<sup>3</sup>/d",
utype = "flow",
scale = 11574.074074074075,
default = "cuft/d",
link = "Cubic metre per second",
},
["koilbbl/a"] = {
name1 = "thousand barrels per year",
name2 = "thousand barrels per year",
symbol = "kbbl/a",
utype = "flow",
scale = 5.0380033629933841e-6,
default = "v * 1.58987294928 < 10 ! ! e3 ! m3/a",
link = "Barrel per day",
},
["koilbbl/d"] = {
name1 = "thousand barrels per day",
name2 = "thousand barrels per day",
symbol = "kbbl/d",
utype = "flow",
scale = 0.0018401307283333335,
default = "v * 1.58987294928 < 10 ! ! e3 ! m3/d",
link = "Barrel per day",
},
["L/h"] = {
name1 = "litre per hour",
name1_us = "liter per hour",
name2 = "litres per hour",
name2_us = "liters per hour",
symbol = "L/h",
utype = "flow",
scale = 2.7777777777777776e-7,
default = "impgal/h USgal/h",
link = "Cubic metre per second",
},
["L/min"] = {
name1 = "litre per minute",
name1_us = "liter per minute",
name2 = "litres per minute",
name2_us = "liters per minute",
symbol = "L/min",
utype = "flow",
scale = 1.6666666666666667e-5,
default = "impgal/min USgal/min",
link = "Cubic metre per second",
},
["L/s"] = {
name1 = "litre per second",
name1_us = "liter per second",
name2 = "litres per second",
name2_us = "liters per second",
symbol = "L/s",
utype = "flow",
scale = 0.001,
default = "cuft/s",
link = "Cubic metre per second",
},
["m3/a"] = {
name1 = "cubic metre per annum",
name1_us = "cubic meter per annum",
name2 = "cubic metres per annum",
name2_us = "cubic meters per annum",
symbol = "m<sup>3</sup>/a",
utype = "flow",
scale = 3.1688087814028947e-8,
default = "cuft/a",
link = "Cubic metre per second",
},
["m3/d"] = {
name1 = "cubic metre per day",
name1_us = "cubic meter per day",
name2 = "cubic metres per day",
name2_us = "cubic meters per day",
symbol = "m<sup>3</sup>/d",
utype = "flow",
scale = 1.1574074074074073e-5,
default = "cuft/d",
link = "Cubic metre per second",
},
["m3/h"] = {
name1 = "cubic metre per hour",
name1_us = "cubic meter per hour",
name2 = "cubic metres per hour",
name2_us = "cubic meters per hour",
symbol = "m<sup>3</sup>/h",
utype = "flow",
scale = 0.00027777777777777778,
default = "cuft/h",
link = "Cubic metre per second",
},
["m3/min"] = {
name1 = "cubic metre per minute",
name1_us = "cubic meter per minute",
name2 = "cubic metres per minute",
name2_us = "cubic meters per minute",
symbol = "m<sup>3</sup>/min",
utype = "flow",
scale = 0.016666666666666666,
default = "cuft/min",
link = "Cubic metre per second",
},
["m3/s"] = {
name1 = "cubic metre per second",
name1_us = "cubic meter per second",
name2 = "cubic metres per second",
name2_us = "cubic meters per second",
symbol = "m<sup>3</sup>/s",
utype = "flow",
scale = 1,
default = "cuft/s",
},
["Moilbbl/a"] = {
name1 = "million barrels per year",
name2 = "million barrels per year",
symbol = "Mbbl/a",
utype = "flow",
scale = 0.0050380033629933837,
default = "v * 1.58987294928 < 10 ! e3 ! e6 ! m3/a",
link = "Barrel per day",
},
["Moilbbl/d"] = {
name1 = "million barrels per day",
name2 = "million barrels per day",
symbol = "Mbbl/d",
utype = "flow",
scale = 1.8401307283333335,
default = "v * 1.58987294928 < 10 ! e3 ! e6 ! m3/d",
link = "Barrel per day",
},
["oilbbl/a"] = {
name1 = "barrel per year",
name2 = "barrels per year",
symbol = "bbl/a",
utype = "flow",
scale = 5.0380033629933841e-9,
default = "m3/a",
link = "Barrel per day",
},
["oilbbl/d"] = {
name1 = "barrel per day",
name2 = "barrels per day",
symbol = "bbl/d",
utype = "flow",
scale = 1.8401307283333336e-6,
default = "m3/d",
},
["Toilbbl/a"] = {
name1 = "trillion barrels per year",
name2 = "trillion barrels per year",
symbol = "Tbbl/a",
utype = "flow",
scale = 5038.0033629933832,
default = "v * 1.58987294928 < 10 ! e9 ! e12 ! m3/a",
link = "Barrel per day",
},
["U.S.gal/d"] = {
name1 = "U.S. gallon per day",
name2 = "U.S. gallons per day",
symbol = "U.S. gal/d",
utype = "flow",
scale = 4.3812636388888893e-8,
default = "m3/s",
customary= 1,
},
["U.S.gal/h"] = {
name1 = "gallon per hour",
name2 = "gallons per hour",
symbol = "gal/h",
utype = "flow",
scale = 1.0515032733333334e-6,
default = "m3/h",
link = "Gallon",
customary= 2,
},
["U.S.gal/min"] = {
name1 = "U.S. gallon per minute",
name2 = "U.S. gallons per minute",
symbol = "U.S. gal/min",
utype = "flow",
scale = 6.3090196400000003e-5,
default = "m3/s",
link = "Gallon",
},
["USgal/a"] = {
name1 = "US gallon per year",
name2 = "US gallons per year",
symbol = "US gal/a",
utype = "flow",
scale = 1.1995246102365199e-10,
default = "m3/s",
},
["USgal/d"] = {
name1 = "US gallon per day",
name2 = "US gallons per day",
symbol = "US gal/d",
utype = "flow",
scale = 4.3812636388888893e-8,
default = "m3/s",
},
["USgal/h"] = {
name1 = "gallon per hour",
name2 = "gallons per hour",
symbol = "gal/h",
utype = "flow",
scale = 1.0515032733333334e-6,
default = "m3/h",
link = "Gallon",
customary= 1,
},
["USgal/min"] = {
name1 = "US gallon per minute",
name2 = "US gallons per minute",
symbol = "US gal/min",
utype = "flow",
scale = 6.3090196400000003e-5,
default = "m3/s",
link = "Gallon",
},
["USgal/s"] = {
name1 = "US gallon per second",
name1_us = "U.S. gallon per second",
name2 = "US gallons per second",
name2_us = "U.S. gallons per second",
symbol = "USgal/s",
utype = "flow",
scale = 0.003785411784,
default = "m3/s",
link = "US gallons per second",
},
["ft3/a"] = {
target = "cuft/a",
},
["ft3/d"] = {
target = "cuft/d",
},
["ft3/h"] = {
target = "cuft/h",
},
["ft3/s"] = {
target = "cuft/s",
},
["Gcuft/a"] = {
target = "e9cuft/a",
},
["Gcuft/d"] = {
target = "e9cuft/d",
},
["kcuft/a"] = {
target = "e3cuft/a",
},
["kcuft/d"] = {
target = "e3cuft/d",
},
["kcuft/s"] = {
target = "e3cuft/s",
},
["Mcuft/a"] = {
target = "e6cuft/a",
},
["Mcuft/d"] = {
target = "e6cuft/d",
},
["Mcuft/s"] = {
target = "e6cuft/s",
},
["m³/s"] = {
target = "m3/s",
},
["Tcuft/a"] = {
target = "e12cuft/a",
},
["Tcuft/d"] = {
target = "e12cuft/d",
},
["u.s.gal/min"] = {
target = "U.S.gal/min",
},
["usgal/min"] = {
target = "USgal/min",
},
["-LTf"] = {
name1 = "long ton-force",
name2 = "long tons-force",
symbol = "LTf",
utype = "force",
scale = 9964.01641818352,
default = "kN",
},
["-STf"] = {
name1 = "short ton-force",
name2 = "short tons-force",
symbol = "STf",
utype = "force",
scale = 8896.443230521,
default = "kN",
},
["dyn"] = {
name1 = "dyne",
symbol = "dyn",
utype = "force",
scale = 0.00001,
default = "gr-f",
},
["g-f"] = {
name1 = "gram-force",
name2 = "grams-force",
symbol = "g<sub>f</sub>",
utype = "force",
scale = 0.00980665,
default = "mN oz-f",
link = "Kilogram-force",
},
["gf"] = {
name1 = "gram-force",
name2 = "grams-force",
symbol = "gf",
utype = "force",
scale = 0.00980665,
default = "mN ozf",
link = "Kilogram-force",
},
["gr-f"] = {
name1 = "grain-force",
name2 = "grains-force",
symbol = "gr<sub>f</sub>",
utype = "force",
scale = 0.0006354602307515,
default = "μN",
link = "Pound (force)",
},
["grf"] = {
name1 = "grain-force",
name2 = "grains-force",
symbol = "grf",
utype = "force",
scale = 0.0006354602307515,
default = "μN",
link = "Pound (force)",
},
["kdyn"] = {
name1 = "kilodyne",
symbol = "kdyn",
utype = "force",
scale = 0.01,
default = "oz-f",
link = "Dyne",
},
["kg-f"] = {
name1 = "kilogram-force",
name2 = "kilograms-force",
symbol = "kg<sub>f</sub>",
utype = "force",
scale = 9.80665,
default = "N lb-f",
},
["kgf"] = {
name1 = "kilogram-force",
name2 = "kilograms-force",
symbol = "kgf",
utype = "force",
scale = 9.80665,
default = "N lbf",
},
["kp"] = {
name1 = "kilopond",
symbol = "kp",
utype = "force",
scale = 9.80665,
default = "N lb-f",
link = "Kilogram-force",
},
["L/T-f"] = {
name1 = "long ton-force",
name2 = "long tons-force",
symbol = "L/T<sub>f</sub>",
utype = "force",
scale = 9964.01641818352,
default = "kN",
},
["L/Tf"] = {
name1 = "long ton-force",
name2 = "long tons-force",
symbol = "L/Tf",
utype = "force",
scale = 9964.01641818352,
default = "kN",
},
["lb-f"] = {
name1 = "pound-force",
name2 = "pounds-force",
symbol = "lb<sub>f</sub>",
utype = "force",
scale = 4.4482216152605,
default = "N",
link = "Pound (force)",
},
["lbf"] = {
name1 = "pound-force",
name2 = "pounds-force",
symbol = "lbf",
utype = "force",
scale = 4.4482216152605,
default = "N",
link = "Pound (force)",
},
["lb(f)"] = {
name1 = "pound",
symbol = "lb",
utype = "force",
scale = 4.4482216152605,
default = "N",
link = "Pound (force)",
},
["LT-f"] = {
name1 = "long ton-force",
name2 = "long tons-force",
symbol = "LT<sub>f</sub>",
utype = "force",
scale = 9964.01641818352,
default = "kN",
},
["LTf"] = {
name1 = "long ton-force",
name2 = "long tons-force",
symbol = "LTf",
usename = 1,
utype = "force",
scale = 9964.01641818352,
default = "kN",
},
["Mdyn"] = {
name1 = "megadyne",
symbol = "Mdyn",
utype = "force",
scale = 10,
default = "lb-f",
link = "Dyne",
},
["mdyn"] = {
name1 = "millidyne",
symbol = "mdyn",
utype = "force",
scale = 0.00000001,
default = "gr-f",
link = "Dyne",
},
["mg-f"] = {
name1 = "milligram-force",
name2 = "milligrams-force",
symbol = "mg<sub>f</sub>",
utype = "force",
scale = 0.00000980665,
default = "μN gr-f",
link = "Kilogram-force",
},
["mgf"] = {
name1 = "milligram-force",
name2 = "milligrams-force",
symbol = "mgf",
utype = "force",
scale = 0.00000980665,
default = "μN grf",
link = "Kilogram-force",
},
["Mp"] = {
name1 = "megapond",
symbol = "Mp",
utype = "force",
scale = 9806.65,
default = "kN LT-f ST-f",
link = "Kilogram-force",
},
["mp"] = {
name1 = "millipond",
symbol = "mp",
utype = "force",
scale = 0.00000980665,
default = "μN gr-f",
link = "Kilogram-force",
},
["N"] = {
_name1 = "newton",
_symbol = "N",
utype = "force",
scale = 1,
prefixes = 1,
default = "lb-f",
link = "Newton (unit)",
},
["oz-f"] = {
name1 = "ounce-force",
name2 = "ounces-force",
symbol = "oz<sub>f</sub>",
utype = "force",
scale = 0.2780138203095378125,
default = "mN",
link = "Pound (force)",
},
["ozf"] = {
name1 = "ounce-force",
name2 = "ounces-force",
symbol = "ozf",
utype = "force",
scale = 0.2780138203095378125,
default = "mN",
link = "Pound (force)",
},
["p"] = {
name1 = "pond",
symbol = "p",
utype = "force",
scale = 0.00980665,
default = "mN oz-f",
link = "Kilogram-force",
},
["pdl"] = {
name1 = "poundal",
symbol = "pdl",
utype = "force",
scale = 0.138254954376,
default = "N",
},
["S/T-f"] = {
name1 = "short ton-force",
name2 = "short tons-force",
symbol = "S/T<sub>f</sub>",
utype = "force",
scale = 8896.443230521,
default = "kN",
},
["S/Tf"] = {
name1 = "short ton-force",
name2 = "short tons-force",
symbol = "S/Tf",
utype = "force",
scale = 8896.443230521,
default = "kN",
},
["ST-f"] = {
name1 = "short ton-force",
name2 = "short tons-force",
symbol = "ST<sub>f</sub>",
utype = "force",
scale = 8896.443230521,
default = "kN",
},
["STf"] = {
name1 = "short ton-force",
name2 = "short tons-force",
symbol = "STf",
usename = 1,
utype = "force",
scale = 8896.443230521,
default = "kN",
},
["t-f"] = {
name1 = "tonne-force",
name2 = "tonnes-force",
symbol = "t<sub>f</sub>",
utype = "force",
scale = 9806.65,
default = "kN LT-f ST-f",
link = "Ton-force#Tonne-force",
},
["tf"] = {
name1 = "tonne-force",
name2 = "tonnes-force",
symbol = "tf",
utype = "force",
scale = 9806.65,
default = "kN LTf STf",
link = "Ton-force#Tonne-force",
},
["dyne"] = {
target = "dyn",
},
["newtons"] = {
target = "N",
},
["poundal"] = {
target = "pdl",
},
["tonne-force"] = {
target = "tf",
},
["impgal/mi"] = {
per = { "@impgal", "mi" },
utype = "fuel efficiency",
invert = 1,
iscomplex= true,
default = "L/km USgal/mi",
},
["km/L"] = {
per = { "km", "L" },
utype = "fuel efficiency",
invert = -1,
iscomplex= true,
default = "mpgimp mpgus",
},
["km/l"] = {
per = { "km", "ll" },
utype = "fuel efficiency",
invert = -1,
iscomplex= true,
default = "mpgimp mpgus",
},
["L/100 km"] = {
per = { "L", "100km" },
utype = "fuel efficiency",
invert = 1,
iscomplex= true,
default = "mpgimp mpgus",
symlink = "[[Fuel economy in automobiles#Units of measure|L/100 km]]",
},
["l/100 km"] = {
per = { "ll", "100km" },
utype = "fuel efficiency",
invert = 1,
iscomplex= true,
default = "mpgimp mpgus",
symlink = "[[Fuel economy in automobiles#Units of measure|l/100 km]]",
},
["L/km"] = {
per = { "L", "km" },
utype = "fuel efficiency",
invert = 1,
iscomplex= true,
default = "mpgimp mpgus",
},
["l/km"] = {
per = { "ll", "km" },
utype = "fuel efficiency",
invert = 1,
iscomplex= true,
default = "mpgimp mpgus",
},
["mi/impqt"] = {
per = { "mi", "impqt" },
utype = "fuel efficiency",
invert = -1,
iscomplex= true,
default = "km/L",
},
["mi/U.S.qt"] = {
per = { "mi", "U.S.qt" },
utype = "fuel efficiency",
invert = -1,
iscomplex= true,
default = "km/L",
},
["mi/USqt"] = {
per = { "mi", "USqt" },
utype = "fuel efficiency",
invert = -1,
iscomplex= true,
default = "km/L",
},
["mi/usqt"] = {
per = { "mi", "usqt" },
utype = "fuel efficiency",
invert = -1,
iscomplex= true,
default = "km/L",
},
["mpgimp"] = {
per = { "mi", "@impgal" },
symbol = "mpg<sub>‑imp</sub>",
utype = "fuel efficiency",
invert = -1,
iscomplex= true,
default = "L/100 km+mpgus",
symlink = "[[Fuel economy in automobiles#Units of measure|mpg]]<sub>‑[[Imperial units|imp]]</sub>",
},
["mpgus"] = {
per = { "mi", "+USgal" },
symbol = "mpg<sub>‑US</sub>",
utype = "fuel efficiency",
invert = -1,
iscomplex= true,
default = "L/100 km+mpgimp",
symlink = "[[Fuel economy in automobiles#Units of measure|mpg]]<sub>‑[[United States customary units|US]]</sub>",
},
["U.S.gal/mi"] = {
per = { "*U.S.gal", "mi" },
sp_us = true,
utype = "fuel efficiency",
invert = 1,
iscomplex= true,
default = "L/km impgal/mi",
},
["usgal/mi"] = {
per = { "+USgal", "mi" },
utype = "fuel efficiency",
invert = 1,
iscomplex= true,
default = "L/km impgal/mi",
},
["L/100km"] = {
target = "L/100 km",
},
["l/100km"] = {
target = "l/100 km",
},
["mpg"] = {
shouldbe = "Use %{mpgus%} for miles per US gallon or %{mpgimp%} for miles per imperial gallon (not %{mpg%})",
},
["mpgU.S."] = {
target = "mpgus",
symbol = "mpg<sub>‑U.S.</sub>",
sp_us = true,
symlink = "[[Fuel economy in automobiles#Units of measure|mpg]]<sub>‑[[United States customary units|U.S.]]</sub>",
},
["mpgu.s."] = {
target = "mpgus",
symbol = "mpg<sub>‑U.S.</sub>",
sp_us = true,
symlink = "[[Fuel economy in automobiles#Units of measure|mpg]]<sub>‑[[United States customary units|U.S.]]</sub>",
},
["mpgUS"] = {
target = "mpgus",
},
["USgal/mi"] = {
target = "usgal/mi",
},
["kPa/m"] = {
per = { "kPa", "-m-frac" },
utype = "fracture gradient",
default = "psi/ft",
},
["psi/ft"] = {
per = { "psi", "-ft-frac" },
utype = "fracture gradient",
default = "kPa/m",
},
["cm/km"] = {
name1 = "centimetre per kilometre",
name1_us = "centimeter per kilometer",
name2 = "centimetres per kilometre",
name2_us = "centimeters per kilometer",
symbol = "cm/km",
utype = "gradient",
scale = 0.00001,
default = "ft/mi",
link = "Grade (slope)",
},
["ft/mi"] = {
name1 = "foot per mile",
name2 = "feet per mile",
symbol = "ft/mi",
utype = "gradient",
scale = 0.00018939393939393939,
default = "v < 5.28 ! c ! ! m/km",
link = "Grade (slope)",
},
["ft/nmi"] = {
name1 = "foot per nautical mile",
name2 = "feet per nautical mile",
symbol = "ft/nmi",
utype = "gradient",
scale = 0.00016457883369330455,
default = "v < 6.076 ! c ! ! m/km",
link = "Grade (slope)",
},
["in/ft"] = {
name1 = "inch per foot",
name2 = "inches per foot",
symbol = "in/ft",
utype = "gradient",
scale = 0.083333333333333329,
default = "mm/m",
link = "Grade (slope)",
},
["in/mi"] = {
name1 = "inch per mile",
name2 = "inches per mile",
symbol = "in/mi",
utype = "gradient",
scale = 1.5782828282828283e-5,
default = "v < 0.6336 ! m ! c ! m/km",
link = "Grade (slope)",
},
["m/km"] = {
name1 = "metre per kilometre",
name1_us = "meter per kilometer",
name2 = "metres per kilometre",
name2_us = "meters per kilometer",
symbol = "m/km",
utype = "gradient",
scale = 0.001,
default = "ft/mi",
link = "Grade (slope)",
},
["mm/km"] = {
name1 = "millimetre per kilometre",
name1_us = "millimeter per kilometer",
name2 = "millimetres per kilometre",
name2_us = "millimeters per kilometer",
symbol = "mm/km",
utype = "gradient",
scale = 0.000001,
default = "in/mi",
link = "Grade (slope)",
},
["mm/m"] = {
name1 = "millimetre per metre",
name1_us = "millimeter per meter",
name2 = "millimetres per metre",
name2_us = "millimeters per meter",
symbol = "mm/m",
utype = "gradient",
scale = 0.001,
default = "in/ft",
link = "Grade (slope)",
},
["admi"] = {
name1 = "admiralty mile",
symbol = "nmi (admiralty)",
utype = "length",
scale = 1853.184,
default = "km mi",
link = "Nautical mile",
},
["AU"] = {
name1 = "astronomical unit",
symbol = "AU",
utype = "length",
scale = 149597870700,
default = "km mi",
},
["Brnmi"] = {
name1 = "British nautical mile",
symbol = "(Brit) nmi",
utype = "length",
scale = 1853.184,
default = "km mi",
link = "Nautical mile",
},
["bu"] = {
name2 = "bu",
symbol = "bu",
usename = 1,
utype = "length",
scale = 0.0030303030303030303,
default = "mm",
link = "Japanese units of measurement#Length",
},
["ch"] = {
name1 = "chain",
symbol = "ch",
utype = "length",
scale = 20.1168,
default = "ft m",
subdivs = { ["ft"] = { 66, default = "m" }, ["yd"] = { 22, default = "m" } },
link = "Chain (unit)",
},
["chlk"] = {
name1 = "[[Chain (unit)|chain]]",
symbol = "[[Chain (unit)|ch]]",
utype = "length",
scale = 20.1168,
default = "ft m",
link = "",
},
["chain"] = {
symbol = "chain",
usename = 1,
utype = "length",
scale = 20.1168,
default = "ft m",
subdivs = { ["ft"] = { 66, default = "m" }, ["yd"] = { 22, default = "m" } },
link = "Chain (unit)",
},
["chainlk"] = {
symbol = "[[Chain (unit)|chain]]",
usename = 1,
utype = "length",
scale = 20.1168,
default = "ft m",
link = "",
},
["dpcm"] = {
name2 = "dot/cm",
symbol = "dot/cm",
utype = "length",
scale = 100,
invert = -1,
iscomplex= true,
default = "dpi",
link = "Dots per inch",
},
["dpi"] = {
name2 = "DPI",
symbol = "DPI",
utype = "length",
scale = 39.370078740157481,
invert = -1,
iscomplex= true,
default = "pitch",
link = "Dots per inch",
},
["fathom"] = {
symbol = "fathom",
usename = 1,
utype = "length",
scale = 1.8288,
default = "ft m",
},
["foot"] = {
name1 = "foot",
name2 = "foot",
symbol = "ft",
utype = "length",
scale = 0.3048,
default = "m",
subdivs = { ["in"] = { 12, default = "m" } },
link = "Foot (unit)",
},
["ft"] = {
name1 = "foot",
name2 = "feet",
symbol = "ft",
utype = "length",
scale = 0.3048,
exception= "integer_more_precision",
default = "m",
subdivs = { ["in"] = { 12, default = "m" } },
link = "Foot (unit)",
},
["furlong"] = {
symbol = "furlong",
usename = 1,
utype = "length",
scale = 201.168,
default = "ft m",
},
["Gly"] = {
name1 = "gigalight-year",
symbol = "Gly",
utype = "length",
scale = 9.4607304725808e24,
default = "Mpc",
link = "Light-year#Definitions",
},
["Gpc"] = {
name1 = "gigaparsec",
symbol = "Gpc",
utype = "length",
scale = 3.0856775814671916e25,
default = "Gly",
link = "Parsec#Megaparsecs and gigaparsecs",
},
["hand"] = {
name1 = "hand",
symbol = "h",
utype = "length",
builtin = "hand",
scale = 0.1016,
iscomplex= true,
default = "in cm",
link = "Hand (unit)",
},
["in"] = {
name1 = "inch",
name2 = "inches",
symbol = "in",
utype = "length",
scale = 0.0254,
exception= "subunit_more_precision",
default = "mm",
},
["inabbreviated"] = {
name2 = "in",
symbol = "in",
utype = "length",
scale = 0.0254,
default = "mm",
link = "Inch",
},
["kly"] = {
name1 = "kilolight-year",
symbol = "kly",
utype = "length",
scale = 9.4607304725808e18,
default = "pc",
link = "Light-year#Definitions",
},
["kpc"] = {
name1 = "kiloparsec",
symbol = "kpc",
utype = "length",
scale = 3.0856775814671916e19,
default = "kly",
link = "Parsec#Parsecs and kiloparsecs",
},
["LD"] = {
name1 = "lunar distance",
symbol = "LD",
utype = "length",
scale = 384403000,
default = "km mi",
link = "Lunar distance (astronomy)",
},
["league"] = {
symbol = "league",
usename = 1,
utype = "length",
scale = 4828.032,
default = "km",
link = "League (unit)",
},
["ly"] = {
name1 = "light-year",
symbol = "ly",
utype = "length",
scale = 9.4607304725808e15,
default = "AU",
},
["m"] = {
_name1 = "metre",
_name1_us= "meter",
_symbol = "m",
utype = "length",
scale = 1,
prefixes = 1,
default = "v > 0 and v < 3 ! ftin ! ft",
link = "Metre",
},
["mi"] = {
name1 = "mile",
symbol = "mi",
utype = "length",
scale = 1609.344,
default = "km",
subdivs = { ["ch"] = { 80, default = "km" }, ["chlk"] = { 80, default = "km" }, ["chain"] = { 80, default = "km" }, ["chainlk"] = { 80, default = "km" }, ["ft"] = { 5280, default = "km" }, ["furlong"] = { 8, default = "km" }, ["yd"] = { 1760, default = "km" } },
},
["mil"] = {
symbol = "mil",
usename = 1,
utype = "length",
scale = 0.0000254,
default = "mm",
link = "Thousandth of an inch",
},
["Mly"] = {
name1 = "megalight-year",
symbol = "Mly",
utype = "length",
scale = 9.4607304725808e21,
default = "kpc",
link = "Light-year#Definitions",
},
["Mpc"] = {
name1 = "megaparsec",
symbol = "Mpc",
utype = "length",
scale = 3.0856775814671916e22,
default = "Mly",
link = "Parsec#Megaparsecs and gigaparsecs",
},
["NM"] = {
name1 = "nautical mile",
symbol = "NM",
utype = "length",
scale = 1852,
default = "km mi",
},
["nmi"] = {
name1 = "nautical mile",
symbol = "nmi",
utype = "length",
scale = 1852,
default = "km mi",
},
["oldUKnmi"] = {
name1 = "nautical mile",
symbol = "nmi",
utype = "length",
scale = 1853.184,
default = "km mi",
},
["oldUSnmi"] = {
name1 = "nautical mile",
symbol = "nmi",
utype = "length",
scale = 1853.24496,
default = "km mi",
},
["pc"] = {
name1 = "parsec",
symbol = "pc",
utype = "length",
scale = 3.0856775814671916e16,
default = "ly",
},
["perch"] = {
name2 = "perches",
symbol = "perch",
usename = 1,
utype = "length",
scale = 5.0292,
default = "ft m",
link = "Rod (unit)",
},
["pitch"] = {
name2 = "μm",
symbol = "μm",
utype = "length",
scale = 1e-6,
default = "dpi",
defkey = "pitch",
linkey = "pitch",
link = "Dots per inch",
},
["pole"] = {
symbol = "pole",
usename = 1,
utype = "length",
scale = 5.0292,
default = "ft m",
link = "Rod (unit)",
},
["pre1954U.S.nmi"] = {
name1 = "(pre-1954 U.S.) nautical mile",
symbol = "(pre‑1954 U.S.) nmi",
utype = "length",
scale = 1853.24496,
default = "km mi",
link = "Nautical mile",
},
["pre1954USnmi"] = {
name1 = "(pre-1954 US) nautical mile",
name1_us = "(pre-1954 U.S.) nautical mile",
symbol = "(pre‑1954 US) nmi",
sym_us = "(pre‑1954 U.S.) nmi",
utype = "length",
scale = 1853.24496,
default = "km mi",
link = "Nautical mile",
},
["rd"] = {
name1 = "rod",
symbol = "rd",
utype = "length",
scale = 5.0292,
default = "ft m",
link = "Rod (unit)",
},
["royal cubit"] = {
name1 = "royal cubit",
symbol = "cu",
utype = "length",
scale = 0.524,
default = "mm",
},
["rtkm"] = {
name1 = "route kilometre",
name1_us = "route kilometer",
symbol = "km",
utype = "length",
scale = 1000,
default = "mi",
link = "Kilometre",
},
["rtmi"] = {
name1 = "route mile",
symbol = "mi",
utype = "length",
scale = 1609.344,
default = "km",
link = "Mile",
},
["shaku"] = {
name2 = "shaku",
symbol = "shaku",
usename = 1,
utype = "length",
scale = 0.30303030303030304,
default = "m",
link = "Shaku (unit)",
},
["sm"] = {
name1 = "smoot",
symbol = "sm",
utype = "length",
scale = 1.70180,
default = "m",
link = "Smoot (unit)",
},
["smi"] = {
name1 = "statute mile",
symbol = "mi",
utype = "length",
scale = 1609.344,
default = "km",
subdivs = { ["chain"] = { 80, default = "km" } },
},
["solar radius"] = {
name1 = "solar radius",
name2 = "solar radii",
symbol = "''R''<sub>☉</sub>",
utype = "length",
scale = 695700e3,
default = "km",
},
["sun"] = {
name2 = "sun",
symbol = "sun",
usename = 1,
utype = "length",
scale = 0.030303030303030304,
default = "mm",
link = "Japanese units of measurement#Length",
},
["thou"] = {
name2 = "thou",
symbol = "thou",
usename = 1,
utype = "length",
scale = 0.0000254,
default = "mm",
link = "Thousandth of an inch",
},
["verst"] = {
symbol = "verst",
usename = 1,
utype = "length",
scale = 1066.8,
default = "km mi",
},
["yd"] = {
name1 = "yard",
symbol = "yd",
utype = "length",
scale = 0.9144,
default = "m",
subdivs = { ["ft"] = { 3, default = "m" } },
},
["μin"] = {
name1 = "microinch",
name2 = "microinches",
symbol = "μin",
utype = "length",
scale = 0.0000000254,
default = "nm",
link = "SI prefix#Non-metric units",
},
["Å"] = {
name1 = "ångström",
symbol = "Å",
utype = "length",
scale = 0.0000000001,
default = "in",
},
["Hz"] = {
_name1 = "hertz",
_name2 = "hertz",
_symbol = "Hz",
utype = "length",
scale = 3.3356409519815204e-9,
invert = -1,
iscomplex= true,
prefixes = 1,
default = "m",
link = "Hertz",
},
["rpm"] = {
name1 = "revolution per minute",
name2 = "revolutions per minute",
symbol = "rpm",
utype = "length",
scale = 5.5594015866358675e-11,
invert = -1,
iscomplex= true,
default = "Hz",
link = "Revolutions per minute",
},
["-ft-frac"] = {
target = "ft",
link = "Fracture gradient",
},
["-in-stiff"] = {
target = "in",
link = "Stiffness",
},
["-m-frac"] = {
target = "m",
link = "Fracture gradient",
},
["-m-stiff"] = {
target = "m",
link = "Stiffness",
},
["100km"] = {
target = "km",
multiplier= 100,
},
["100mi"] = {
target = "mi",
multiplier= 100,
},
["100miles"] = {
target = "mi",
symbol = "miles",
multiplier= 100,
},
["admiralty nmi"] = {
target = "oldUKnmi",
},
["angstrom"] = {
target = "Å",
},
["au"] = {
target = "AU",
symbol = "au",
},
["feet"] = {
target = "ft",
},
["hands"] = {
target = "hand",
},
["inch"] = {
target = "in",
},
["inches"] = {
target = "in",
},
["light-year"] = {
target = "ly",
},
["meter"] = {
target = "m",
sp_us = true,
},
["meters"] = {
target = "m",
sp_us = true,
},
["metre"] = {
target = "m",
},
["metres"] = {
target = "m",
},
["micrometre"] = {
target = "μm",
},
["micron"] = {
target = "μm",
default = "μin",
},
["mile"] = {
target = "mi",
},
["miles"] = {
target = "mi",
},
["parsec"] = {
target = "pc",
},
["rod"] = {
target = "rd",
},
["smoot"] = {
target = "sm",
},
["uin"] = {
target = "μin",
},
["yard"] = {
target = "yd",
},
["yards"] = {
target = "yd",
},
["yds"] = {
target = "yd",
},
["dtex"] = {
name1 = "decitex",
name2 = "decitex",
symbol = "dtex",
utype = "linear density",
scale = 1e-7,
default = "lb/yd",
link = "Units of textile measurement#Units",
},
["kg/cm"] = {
name1 = "kilogram per centimetre",
name1_us = "kilogram per centimeter",
name2 = "kilograms per centimetre",
name2_us = "kilograms per centimeter",
symbol = "kg/cm",
utype = "linear density",
scale = 100,
default = "lb/yd",
link = "Linear density",
},
["kg/m"] = {
name1 = "kilogram per metre",
name1_us = "kilogram per meter",
name2 = "kilograms per metre",
name2_us = "kilograms per meter",
symbol = "kg/m",
utype = "linear density",
scale = 1,
default = "lb/yd",
link = "Linear density",
},
["lb/ft"] = {
name1 = "pound per foot",
name2 = "pounds per foot",
symbol = "lb/ft",
utype = "linear density",
scale = 1.4881639435695539,
default = "kg/m",
link = "Linear density",
},
["lb/yd"] = {
name1 = "pound per yard",
name2 = "pounds per yard",
symbol = "lb/yd",
utype = "linear density",
scale = 0.49605464785651798,
default = "kg/m",
link = "Linear density",
},
["G"] = {
_name1 = "gauss",
_name2 = "gauss",
_symbol = "G",
utype = "magnetic field strength",
scale = 0.0001,
prefixes = 1,
default = "T",
link = "Gauss (unit)",
},
["T"] = {
_name1 = "tesla",
_symbol = "T",
utype = "magnetic field strength",
scale = 1,
prefixes = 1,
default = "G",
link = "Tesla (unit)",
},
["A/m"] = {
name1 = "ampere per metre",
name1_us = "ampere per meter",
name2 = "amperes per metre",
name2_us = "amperes per meter",
symbol = "A/m",
utype = "magnetizing field",
scale = 1,
default = "Oe",
},
["kA/m"] = {
name1 = "kiloampere per metre",
name1_us = "kiloampere per meter",
name2 = "kiloamperes per metre",
name2_us = "kiloamperes per meter",
symbol = "kA/m",
utype = "magnetizing field",
scale = 1000,
default = "kOe",
link = "Ampere per metre",
},
["MA/m"] = {
name1 = "megaampere per metre",
name1_us = "megaampere per meter",
name2 = "megaamperes per metre",
name2_us = "megaamperes per meter",
symbol = "MA/m",
utype = "magnetizing field",
scale = 1e6,
default = "kOe",
link = "Ampere per metre",
},
["Oe"] = {
_name1 = "oersted",
_symbol = "Oe",
utype = "magnetizing field",
scale = 79.5774715,
prefixes = 1,
default = "kA/m",
link = "Oersted",
},
["-Lcwt"] = {
name1 = "hundredweight",
name2 = "hundredweight",
symbol = "cwt",
utype = "mass",
scale = 50.80234544,
default = "lb",
},
["-Scwt"] = {
name1 = "hundredweight",
name2 = "hundredweight",
symbol = "cwt",
utype = "mass",
scale = 45.359237,
default = "lb",
},
["-ST"] = {
name1 = "short ton",
symbol = "ST",
utype = "mass",
scale = 907.18474,
default = "t",
},
["carat"] = {
symbol = "carat",
usename = 1,
utype = "mass",
scale = 0.0002,
default = "g",
link = "Carat (mass)",
},
["drachm"] = {
name1_us = "dram",
symbol = "drachm",
usename = 1,
utype = "mass",
scale = 0.001771845195,
default = "g",
link = "Dram (unit)",
},
["dram"] = {
target = "drachm",
},
["dwt"] = {
name1 = "pennyweight",
symbol = "dwt",
utype = "mass",
scale = 0.00155517384,
default = "oz g",
},
["DWton"] = {
symbol = "deadweight ton",
usename = 1,
utype = "mass",
scale = 1016.0469088,
default = "DWtonne",
link = "Deadweight tonnage",
},
["DWtonne"] = {
name1_us = "deadweight metric ton",
symbol = "deadweight tonne",
sym_us = "~deadweight metric ton",
usename = 1,
utype = "mass",
scale = 1000,
default = "DWton",
link = "Deadweight tonnage",
},
["g"] = {
_name1 = "gram",
_symbol = "g",
utype = "mass",
scale = 0.001,
prefixes = 1,
default = "oz",
link = "Gram",
},
["gr"] = {
name1 = "grain",
symbol = "gr",
utype = "mass",
scale = 0.00006479891,
default = "g",
link = "Grain (unit)",
},
["Gt"] = {
name1 = "gigatonne",
symbol = "Gt",
utype = "mass",
scale = 1000000000000,
default = "LT ST",
link = "Tonne",
},
["impgalh2o"] = {
name1 = "imperial gallon of water",
name2 = "imperial gallons of water",
symbol = "imp gal H<sub>2</sub>O",
utype = "mass",
scale = 4.5359236999999499,
default = "lb kg",
link = "Imperial gallon",
},
["kt"] = {
name1 = "kilotonne",
symbol = "kt",
utype = "mass",
scale = 1000000,
default = "LT ST",
link = "Tonne",
},
["lb"] = {
name1 = "pound",
symbol = "lb",
utype = "mass",
scale = 0.45359237,
exception= "integer_more_precision",
default = "kg",
subdivs = { ["oz"] = { 16, default = "kg" } },
link = "Pound (mass)",
},
["Lcwt"] = {
name1 = "long hundredweight",
name2 = "long hundredweight",
symbol = "Lcwt",
usename = 1,
utype = "mass",
scale = 50.80234544,
default = "lb",
subdivs = { ["qtr"] = { 4, default = "kg" }, ["st"] = { 8, default = "kg" } },
link = "Hundredweight",
},
["long cwt"] = {
name1 = "long hundredweight",
name2 = "long hundredweight",
symbol = "long cwt",
utype = "mass",
scale = 50.80234544,
default = "lb kg",
subdivs = { ["qtr"] = { 4, default = "kg" } },
link = "Hundredweight",
},
["long qtr"] = {
name1 = "long quarter",
symbol = "long qtr",
utype = "mass",
scale = 12.70058636,
default = "lb kg",
},
["LT"] = {
symbol = "long ton",
usename = 1,
utype = "mass",
scale = 1016.0469088,
default = "t",
subdivs = { ["Lcwt"] = { 20, default = "t", unit = "-Lcwt" } },
},
["lt"] = {
name1 = "long ton",
symbol = "LT",
utype = "mass",
scale = 1016.0469088,
default = "t",
subdivs = { ["Lcwt"] = { 20, default = "t", unit = "-Lcwt" } },
},
["metric ton"] = {
symbol = "metric ton",
usename = 1,
utype = "mass",
scale = 1000,
default = "long ton",
link = "Tonne",
},
["MT"] = {
name1 = "metric ton",
symbol = "t",
utype = "mass",
scale = 1000,
default = "LT ST",
link = "Tonne",
},
["Mt"] = {
name1 = "megatonne",
symbol = "Mt",
utype = "mass",
scale = 1000000000,
default = "LT ST",
link = "Tonne",
},
["oz"] = {
name1 = "ounce",
symbol = "oz",
utype = "mass",
scale = 0.028349523125,
default = "g",
},
["ozt"] = {
name1 = "troy ounce",
symbol = "ozt",
utype = "mass",
scale = 0.0311034768,
default = "oz g",
},
["pdr"] = {
name1 = "pounder",
symbol = "pdr",
utype = "mass",
scale = 0.45359237,
default = "kg",
link = "Pound (mass)",
},
["qtr"] = {
name1 = "quarter",
symbol = "qtr",
utype = "mass",
scale = 12.70058636,
default = "lb kg",
subdivs = { ["lb"] = { 28, default = "kg" } },
link = "Long quarter",
},
["Scwt"] = {
name1 = "short hundredweight",
name2 = "short hundredweight",
symbol = "Scwt",
usename = 1,
utype = "mass",
scale = 45.359237,
default = "lb",
link = "Hundredweight",
},
["short cwt"] = {
name1 = "short hundredweight",
name2 = "short hundredweight",
symbol = "short cwt",
utype = "mass",
scale = 45.359237,
default = "lb kg",
link = "Hundredweight",
},
["short qtr"] = {
name1 = "short quarter",
symbol = "short qtr",
utype = "mass",
scale = 11.33980925,
default = "lb kg",
},
["ST"] = {
symbol = "short ton",
usename = 1,
utype = "mass",
scale = 907.18474,
default = "t",
subdivs = { ["Scwt"] = { 20, default = "t", unit = "-Scwt" } },
},
["shtn"] = {
name1 = "short ton",
symbol = "sh tn",
utype = "mass",
scale = 907.18474,
default = "t",
},
["shton"] = {
symbol = "ton",
usename = 1,
utype = "mass",
scale = 907.18474,
default = "t",
},
["solar mass"] = {
name1 = "solar mass",
name2 = "solar masses",
symbol = "''M''<sub>☉</sub>",
utype = "mass",
scale = 1.98855e30,
default = "kg",
},
["st"] = {
name1 = "stone",
name2 = "stone",
symbol = "st",
utype = "mass",
scale = 6.35029318,
default = "lb kg",
subdivs = { ["lb"] = { 14, default = "kg lb" } },
link = "Stone (unit)",
},
["t"] = {
name1 = "tonne",
name1_us = "metric ton",
symbol = "t",
utype = "mass",
scale = 1000,
default = "LT ST",
},
["tonne"] = {
name1 = "tonne",
name1_us = "metric ton",
symbol = "t",
utype = "mass",
scale = 1000,
default = "shton",
},
["troy pound"] = {
symbol = "troy pound",
usename = 1,
utype = "mass",
scale = 0.3732417216,
default = "lb kg",
link = "Troy weight",
},
["usgalh2o"] = {
name1 = "US gallon of water",
name1_us = "U.S. gallon of water",
name2 = "US gallons of water",
name2_us = "U.S. gallons of water",
symbol = "US gal H<sub>2</sub>O",
utype = "mass",
scale = 3.7776215836051126,
default = "lb kg",
link = "United States customary units#Fluid volume",
},
["viss"] = {
name2 = "viss",
symbol = "viss",
utype = "mass",
scale = 1.632932532,
default = "kg",
link = "Myanmar units of measurement#Mass",
},
["billion tonne"] = {
target = "e9t",
},
["kilogram"] = {
target = "kg",
},
["kilotonne"] = {
target = "kt",
},
["lbs"] = {
target = "lb",
},
["lbt"] = {
target = "troy pound",
},
["lcwt"] = {
target = "Lcwt",
},
["long ton"] = {
target = "LT",
},
["mcg"] = {
target = "μg",
},
["million tonne"] = {
target = "e6t",
},
["scwt"] = {
target = "Scwt",
},
["short ton"] = {
target = "ST",
},
["stone"] = {
target = "st",
},
["thousand tonne"] = {
target = "e3t",
},
["tonnes"] = {
target = "t",
},
["kg/kW"] = {
name1 = "kilogram per kilowatt",
name2 = "kilograms per kilowatt",
symbol = "kg/kW",
utype = "mass per unit power",
scale = 0.001,
default = "lb/hp",
link = "Kilowatt",
},
["lb/hp"] = {
name1 = "pound per horsepower",
name2 = "pounds per horsepower",
symbol = "lb/hp",
utype = "mass per unit power",
scale = 0.00060827738784176115,
default = "kg/kW",
link = "Horsepower",
},
["kg/h"] = {
per = { "kg", "h" },
utype = "mass per unit time",
default = "lb/h",
},
["lb/h"] = {
per = { "lb", "h" },
utype = "mass per unit time",
default = "kg/h",
},
["g-mol/d"] = {
name1 = "gram-mole per day",
name2 = "gram-moles per day",
symbol = "g‑mol/d",
utype = "molar rate",
scale = 1.1574074074074073e-5,
default = "μmol/s",
link = "Mole (unit)",
},
["g-mol/h"] = {
name1 = "gram-mole per hour",
name2 = "gram-moles per hour",
symbol = "g‑mol/h",
utype = "molar rate",
scale = 0.00027777777777777778,
default = "mmol/s",
link = "Mole (unit)",
},
["g-mol/min"] = {
name1 = "gram-mole per minute",
name2 = "gram-moles per minute",
symbol = "g‑mol/min",
utype = "molar rate",
scale = 0.016666666666666666,
default = "g-mol/s",
link = "Mole (unit)",
},
["g-mol/s"] = {
name1 = "gram-mole per second",
name2 = "gram-moles per second",
symbol = "g‑mol/s",
utype = "molar rate",
scale = 1,
default = "lb-mol/min",
link = "Mole (unit)",
},
["gmol/d"] = {
name1 = "gram-mole per day",
name2 = "gram-moles per day",
symbol = "gmol/d",
utype = "molar rate",
scale = 1.1574074074074073e-5,
default = "μmol/s",
link = "Mole (unit)",
},
["gmol/h"] = {
name1 = "gram-mole per hour",
name2 = "gram-moles per hour",
symbol = "gmol/h",
utype = "molar rate",
scale = 0.00027777777777777778,
default = "mmol/s",
link = "Mole (unit)",
},
["gmol/min"] = {
name1 = "gram-mole per minute",
name2 = "gram-moles per minute",
symbol = "gmol/min",
utype = "molar rate",
scale = 0.016666666666666666,
default = "gmol/s",
link = "Mole (unit)",
},
["gmol/s"] = {
name1 = "gram-mole per second",
name2 = "gram-moles per second",
symbol = "gmol/s",
utype = "molar rate",
scale = 1,
default = "lbmol/min",
link = "Mole (unit)",
},
["kmol/d"] = {
name1 = "kilomole per day",
name2 = "kilomoles per day",
symbol = "kmol/d",
utype = "molar rate",
scale = 0.011574074074074073,
default = "mmol/s",
link = "Mole (unit)",
},
["kmol/h"] = {
name1 = "kilomole per hour",
name2 = "kilomoles per hour",
symbol = "kmol/h",
utype = "molar rate",
scale = 0.27777777777777779,
default = "mol/s",
link = "Mole (unit)",
},
["kmol/min"] = {
name1 = "kilomole per minute",
name2 = "kilomoles per minute",
symbol = "kmol/min",
utype = "molar rate",
scale = 16.666666666666668,
default = "mol/s",
link = "Kilomole (unit)",
},
["kmol/s"] = {
name1 = "kilomole per second",
name2 = "kilomoles per second",
symbol = "kmol/s",
utype = "molar rate",
scale = 1000,
default = "lb-mol/s",
link = "Mole (unit)",
},
["lb-mol/d"] = {
name1 = "pound-mole per day",
name2 = "pound-moles per day",
symbol = "lb‑mol/d",
utype = "molar rate",
scale = 0.0052499116898148141,
default = "mmol/s",
link = "Pound-mole",
},
["lb-mol/h"] = {
name1 = "pound-mole per hour",
name2 = "pound-moles per hour",
symbol = "lb‑mol/h",
utype = "molar rate",
scale = 0.12599788055555555,
default = "mol/s",
link = "Pound-mole",
},
["lb-mol/min"] = {
name1 = "pound-mole per minute",
name2 = "pound-moles per minute",
symbol = "lb‑mol/min",
utype = "molar rate",
scale = 7.5598728333333334,
default = "mol/s",
link = "Pound-mole",
},
["lb-mol/s"] = {
name1 = "pound-mole per second",
name2 = "pound-moles per second",
symbol = "lb‑mol/s",
utype = "molar rate",
scale = 453.59237,
default = "kmol/s",
link = "Pound-mole",
},
["lbmol/d"] = {
name1 = "pound-mole per day",
name2 = "pound-moles per day",
symbol = "lbmol/d",
utype = "molar rate",
scale = 0.0052499116898148141,
default = "mmol/s",
link = "Pound-mole",
},
["lbmol/h"] = {
name1 = "pound-mole per hour",
name2 = "pound-moles per hour",
symbol = "lbmol/h",
utype = "molar rate",
scale = 0.12599788055555555,
default = "mol/s",
link = "Pound-mole",
},
["lbmol/min"] = {
name1 = "pound-mole per minute",
name2 = "pound-moles per minute",
symbol = "lbmol/min",
utype = "molar rate",
scale = 7.5598728333333334,
default = "mol/s",
link = "Pound-mole",
},
["lbmol/s"] = {
name1 = "pound-mole per second",
name2 = "pound-moles per second",
symbol = "lbmol/s",
utype = "molar rate",
scale = 453.59237,
default = "kmol/s",
link = "Pound-mole",
},
["mmol/s"] = {
name1 = "millimole per second",
name2 = "millimoles per second",
symbol = "mmol/s",
utype = "molar rate",
scale = 0.001,
default = "lb-mol/d",
link = "Mole (unit)",
},
["mol/d"] = {
name1 = "mole per day",
name2 = "moles per day",
symbol = "mol/d",
utype = "molar rate",
scale = 1.1574074074074073e-5,
default = "μmol/s",
link = "Mole (unit)",
},
["mol/h"] = {
name1 = "mole per hour",
name2 = "moles per hour",
symbol = "mol/h",
utype = "molar rate",
scale = 0.00027777777777777778,
default = "mmol/s",
link = "Mole (unit)",
},
["mol/min"] = {
name1 = "mole per minute",
name2 = "moles per minute",
symbol = "mol/min",
utype = "molar rate",
scale = 0.016666666666666666,
default = "mol/s",
link = "Mole (unit)",
},
["mol/s"] = {
name1 = "mole per second",
name2 = "moles per second",
symbol = "mol/s",
utype = "molar rate",
scale = 1,
default = "lb-mol/min",
link = "Mole (unit)",
},
["μmol/s"] = {
name1 = "micromole per second",
name2 = "micromoles per second",
symbol = "μmol/s",
utype = "molar rate",
scale = 0.000001,
default = "lb-mol/d",
link = "Mole (unit)",
},
["umol/s"] = {
target = "μmol/s",
},
["/acre"] = {
name1 = "per acre",
name2 = "per acre",
symbol = "/acre",
utype = "per unit area",
scale = 0.00024710538146716532,
default = "/ha",
link = "Acre",
},
["/ha"] = {
name1 = "per hectare",
name2 = "per hectare",
symbol = "/ha",
utype = "per unit area",
scale = 100e-6,
default = "/acre",
link = "Hectare",
},
["/sqcm"] = {
name1 = "per square centimetre",
name1_us = "per square centimeter",
name2 = "per square centimetre",
name2_us = "per square centimeter",
symbol = "/cm<sup>2</sup>",
utype = "per unit area",
scale = 1e4,
default = "/sqin",
link = "Square centimetre",
},
["/sqin"] = {
name1 = "per square inch",
name2 = "per square inch",
symbol = "/in<sup>2</sup>",
utype = "per unit area",
scale = 1550.0031000062002,
default = "/sqcm",
link = "Square inch",
},
["/sqkm"] = {
name1 = "per square kilometre",
name1_us = "per square kilometer",
name2 = "per square kilometre",
name2_us = "per square kilometer",
symbol = "/km<sup>2</sup>",
utype = "per unit area",
scale = 1e-6,
default = "/sqmi",
link = "Square kilometre",
},
["/sqmi"] = {
name1 = "per square mile",
name2 = "per square mile",
symbol = "/sq mi",
utype = "per unit area",
scale = 3.8610215854244582e-7,
default = "/sqkm",
link = "Square mile",
},
["PD/acre"] = {
name1 = "inhabitant per acre",
name2 = "inhabitants per acre",
symbol = "/acre",
utype = "per unit area",
scale = 0.00024710538146716532,
default = "PD/ha",
link = "Acre",
},
["PD/ha"] = {
name1 = "inhabitant per hectare",
name2 = "inhabitants per hectare",
symbol = "/ha",
utype = "per unit area",
scale = 100e-6,
default = "PD/acre",
link = "Hectare",
},
["PD/sqkm"] = {
name1 = "inhabitant per square kilometre",
name1_us = "inhabitant per square kilometer",
name2 = "inhabitants per square kilometre",
name2_us = "inhabitants per square kilometer",
symbol = "/km<sup>2</sup>",
utype = "per unit area",
scale = 1e-6,
default = "PD/sqmi",
link = "Square kilometre",
},
["PD/sqmi"] = {
name1 = "inhabitant per square mile",
name2 = "inhabitants per square mile",
symbol = "/sq mi",
utype = "per unit area",
scale = 3.8610215854244582e-7,
default = "PD/sqkm",
link = "Square mile",
},
["/cm2"] = {
target = "/sqcm",
},
["/in2"] = {
target = "/sqin",
},
["/km2"] = {
target = "/sqkm",
},
["pd/acre"] = {
target = "PD/acre",
},
["pd/ha"] = {
target = "PD/ha",
},
["PD/km2"] = {
target = "PD/sqkm",
},
["pd/km2"] = {
target = "PD/sqkm",
},
["PD/km²"] = {
target = "PD/sqkm",
},
["pd/sqkm"] = {
target = "PD/sqkm",
},
["pd/sqmi"] = {
target = "PD/sqmi",
},
["/l"] = {
name1 = "per litre",
name1_us = "per liter",
name2 = "per litre",
name2_us = "per liter",
symbol = "/l",
utype = "per unit volume",
scale = 1000,
default = "/usgal",
link = "Litre",
},
["/L"] = {
name1 = "per litre",
name1_us = "per liter",
name2 = "per litre",
name2_us = "per liter",
symbol = "/L",
utype = "per unit volume",
scale = 1000,
default = "/usgal",
link = "Litre",
},
["/USgal"] = {
name1 = "per gallon",
name2 = "per gallon",
symbol = "/gal",
utype = "per unit volume",
scale = 264.172052,
default = "/L",
link = "US gallon",
customary= 2,
},
["/usgal"] = {
target = "/USgal",
},
["bhp"] = {
name1 = "brake horsepower",
name2 = "brake horsepower",
symbol = "bhp",
utype = "power",
scale = 745.69987158227022,
default = "kW",
link = "Horsepower#Brake horsepower",
},
["Cal/d"] = {
name1 = "large calorie per day",
name2 = "large calories per day",
symbol = "Cal/d",
utype = "power",
scale = 0.048425925925925928,
default = "kJ/d",
link = "Calorie",
},
["Cal/h"] = {
name1 = "large calorie per hour",
name2 = "large calories per hour",
symbol = "Cal/h",
utype = "power",
scale = 1.1622222222222223,
default = "kJ/h",
link = "Calorie",
},
["cal/h"] = {
name1 = "calorie per hour",
name2 = "calories per hour",
symbol = "cal/h",
utype = "power",
scale = 0.0011622222222222223,
default = "W",
link = "Calorie",
},
["CV"] = {
name1 = "metric horsepower",
name2 = "metric horsepower",
symbol = "CV",
utype = "power",
scale = 735.49875,
default = "kW",
},
["hk"] = {
name1 = "metric horsepower",
name2 = "metric horsepower",
symbol = "hk",
utype = "power",
scale = 735.49875,
default = "kW",
},
["hp"] = {
name1 = "horsepower",
name2 = "horsepower",
symbol = "hp",
utype = "power",
scale = 745.69987158227022,
default = "kW",
},
["hp-electric"] = {
name1 = "electric horsepower",
name2 = "electric horsepower",
symbol = "hp",
utype = "power",
scale = 746,
default = "kW",
link = "Horsepower#Electrical horsepower",
},
["hp-electrical"] = {
name1 = "electrical horsepower",
name2 = "electrical horsepower",
symbol = "hp",
utype = "power",
scale = 746,
default = "kW",
link = "Horsepower#Electrical horsepower",
},
["hp-metric"] = {
name1 = "metric horsepower",
name2 = "metric horsepower",
symbol = "hp",
utype = "power",
scale = 735.49875,
default = "kW",
},
["ihp"] = {
name1 = "indicated horsepower",
name2 = "indicated horsepower",
symbol = "ihp",
utype = "power",
scale = 745.69987158227022,
default = "kW",
link = "Horsepower#Indicated horsepower",
},
["kcal/h"] = {
name1 = "kilocalorie per hour",
name2 = "kilocalories per hour",
symbol = "kcal/h",
utype = "power",
scale = 1.1622222222222223,
default = "kW",
link = "Calorie",
},
["kJ/d"] = {
name1 = "kilojoule per day",
name2 = "kilojoules per day",
symbol = "kJ/d",
utype = "power",
scale = 0.011574074074074073,
default = "Cal/d",
link = "Kilojoule",
},
["kJ/h"] = {
name1 = "kilojoule per hour",
name2 = "kilojoules per hour",
symbol = "kJ/h",
utype = "power",
scale = 0.27777777777777779,
default = "W",
link = "Kilojoule",
},
["PS"] = {
name1 = "metric horsepower",
name2 = "metric horsepower",
symbol = "PS",
utype = "power",
scale = 735.49875,
default = "kW",
},
["shp"] = {
name1 = "shaft horsepower",
name2 = "shaft horsepower",
symbol = "shp",
utype = "power",
scale = 745.69987158227022,
default = "kW",
link = "Horsepower#Shaft horsepower",
},
["W"] = {
_name1 = "watt",
_symbol = "W",
utype = "power",
scale = 1,
prefixes = 1,
default = "hp",
link = "Watt",
},
["BTU/h"] = {
per = { "BTU", "h" },
utype = "power",
default = "W",
},
["Btu/h"] = {
per = { "Btu", "h" },
utype = "power",
default = "W",
},
["BHP"] = {
target = "bhp",
},
["btu/h"] = {
target = "BTU/h",
},
["HP"] = {
target = "hp",
},
["Hp"] = {
target = "hp",
},
["hp-mechanical"] = {
target = "hp",
},
["IHP"] = {
target = "ihp",
},
["SHP"] = {
target = "shp",
},
["whp"] = {
target = "hp",
},
["hp/lb"] = {
name1 = "horsepower per pound",
name2 = "horsepower per pound",
symbol = "hp/lb",
utype = "power per unit mass",
scale = 1643.986806,
default = "kW/kg",
link = "Power-to-weight ratio",
},
["hp/LT"] = {
name1 = "horsepower per long ton",
name2 = "horsepower per long ton",
symbol = "hp/LT",
utype = "power per unit mass",
scale = 0.73392268125000004,
default = "kW/t",
link = "Power-to-weight ratio",
},
["hp/ST"] = {
name1 = "horsepower per short ton",
name2 = "horsepower per short ton",
symbol = "hp/ST",
utype = "power per unit mass",
scale = 0.821993403,
default = "kW/t",
link = "Power-to-weight ratio",
},
["hp/t"] = {
name1 = "horsepower per tonne",
name2 = "horsepower per tonne",
symbol = "hp/t",
utype = "power per unit mass",
scale = 0.74569987158227022,
default = "kW/t",
link = "Power-to-weight ratio",
},
["kW/kg"] = {
name1 = "kilowatt per kilogram",
name2 = "kilowatts per kilogram",
symbol = "kW/kg",
utype = "power per unit mass",
scale = 1000,
default = "hp/lb",
link = "Power-to-weight ratio",
},
["kW/t"] = {
name1 = "kilowatt per tonne",
name2 = "kilowatts per tonne",
symbol = "kW/t",
utype = "power per unit mass",
scale = 1,
default = "PS/t",
link = "Power-to-weight ratio",
},
["PS/t"] = {
name1 = "metric horsepower per tonne",
name2 = "metric horsepower per tonne",
symbol = "PS/t",
utype = "power per unit mass",
scale = 0.73549875,
default = "kW/t",
link = "Power-to-weight ratio",
},
["shp/lb"] = {
name1 = "shaft horsepower per pound",
name2 = "shaft horsepower per pound",
symbol = "shp/lb",
utype = "power per unit mass",
scale = 1643.986806,
default = "kW/kg",
link = "Power-to-weight ratio",
},
["hp/tonne"] = {
target = "hp/t",
symbol = "hp/tonne",
default = "kW/tonne",
},
["kW/tonne"] = {
target = "kW/t",
symbol = "kW/tonne",
},
["-lb/in2"] = {
name1 = "pound per square inch",
name2 = "pounds per square inch",
symbol = "lb/in<sup>2</sup>",
utype = "pressure",
scale = 6894.7572931683608,
default = "kPa kgf/cm2",
},
["atm"] = {
name1 = "standard atmosphere",
symbol = "atm",
utype = "pressure",
scale = 101325,
default = "kPa",
link = "Atmosphere (unit)",
},
["Ba"] = {
name1 = "barye",
symbol = "Ba",
utype = "pressure",
scale = 0.1,
default = "Pa",
},
["bar"] = {
symbol = "bar",
utype = "pressure",
scale = 100000,
default = "kPa",
link = "Bar (unit)",
},
["dbar"] = {
name1 = "decibar",
symbol = "dbar",
utype = "pressure",
scale = 10000,
default = "kPa",
link = "Bar (unit)",
},
["inHg"] = {
name1 = "inch of mercury",
name2 = "inches of mercury",
symbol = "inHg",
utype = "pressure",
scale = 3386.388640341,
default = "kPa",
},
["kBa"] = {
name1 = "kilobarye",
symbol = "kBa",
utype = "pressure",
scale = 100,
default = "hPa",
link = "Barye",
},
["kg-f/cm2"] = {
name1 = "kilogram-force per square centimetre",
name1_us = "kilogram-force per square centimeter",
name2 = "kilograms-force per square centimetre",
name2_us = "kilograms-force per square centimeter",
symbol = "kg<sub>f</sub>/cm<sup>2</sup>",
utype = "pressure",
scale = 98066.5,
default = "psi",
link = "Kilogram-force",
},
["kg/cm2"] = {
name1 = "kilogram per square centimetre",
name1_us = "kilogram per square centimeter",
name2 = "kilograms per square centimetre",
name2_us = "kilograms per square centimeter",
symbol = "kg/cm<sup>2</sup>",
utype = "pressure",
scale = 98066.5,
default = "psi",
link = "Kilogram-force",
},
["kgf/cm2"] = {
name1 = "kilogram-force per square centimetre",
name1_us = "kilogram-force per square centimeter",
name2 = "kilograms-force per square centimetre",
name2_us = "kilograms-force per square centimeter",
symbol = "kgf/cm<sup>2</sup>",
utype = "pressure",
scale = 98066.5,
default = "psi",
link = "Kilogram-force",
},
["ksi"] = {
name1 = "kilopound per square inch",
name2 = "kilopounds per square inch",
symbol = "ksi",
utype = "pressure",
scale = 6894757.2931683613,
default = "MPa",
link = "Pound per square inch",
},
["lbf/in2"] = {
name1 = "pound-force per square inch",
name2 = "pounds-force per square inch",
symbol = "lbf/in<sup>2</sup>",
utype = "pressure",
scale = 6894.7572931683608,
default = "kPa kgf/cm2",
},
["mb"] = {
name1 = "millibar",
symbol = "mb",
utype = "pressure",
scale = 100,
default = "hPa",
link = "Bar (unit)",
},
["mbar"] = {
name1 = "millibar",
symbol = "mbar",
utype = "pressure",
scale = 100,
default = "hPa",
link = "Bar (unit)",
},
["mmHg"] = {
name1 = "millimetre of mercury",
name1_us = "millimeter of mercury",
name2 = "millimetres of mercury",
name2_us = "millimeters of mercury",
symbol = "mmHg",
utype = "pressure",
scale = 133.322387415,
default = "kPa",
},
["Pa"] = {
_name1 = "pascal",
_symbol = "Pa",
utype = "pressure",
scale = 1,
prefixes = 1,
default = "psi",
link = "Pascal (unit)",
},
["psf"] = {
name1 = "pound per square foot",
name2 = "pounds per square foot",
symbol = "psf",
utype = "pressure",
scale = 47.880258980335839,
default = "kPa",
link = "Pound per square inch",
},
["psi"] = {
name1 = "pound per square inch",
name2 = "pounds per square inch",
symbol = "psi",
utype = "pressure",
scale = 6894.7572931683608,
default = "kPa",
},
["Torr"] = {
name1 = "torr",
symbol = "Torr",
utype = "pressure",
scale = 133.32236842105263,
default = "kPa",
},
["N/cm2"] = {
per = { "N", "cm2" },
utype = "pressure",
default = "psi",
},
["N/m2"] = {
per = { "N", "m2" },
utype = "pressure",
default = "psi",
},
["g/cm2"] = {
per = { "g", "cm2" },
utype = "pressure",
default = "lb/sqft",
multiplier= 9.80665,
},
["g/m2"] = {
per = { "g", "m2" },
utype = "pressure",
default = "lb/sqft",
multiplier= 9.80665,
},
["kg/ha"] = {
per = { "kg", "ha" },
utype = "pressure",
default = "lb/acre",
multiplier= 9.80665,
},
["kg/m2"] = {
per = { "kg", "m2" },
utype = "pressure",
default = "lb/sqft",
multiplier= 9.80665,
},
["lb/1000sqft"] = {
per = { "lb", "1000sqft" },
utype = "pressure",
default = "g/m2",
multiplier= 9.80665,
},
["lb/acre"] = {
per = { "lb", "acre" },
utype = "pressure",
default = "kg/ha",
multiplier= 9.80665,
},
["lb/sqft"] = {
per = { "lb", "sqft" },
utype = "pressure",
default = "kg/m2",
multiplier= 9.80665,
},
["lb/sqyd"] = {
per = { "lb", "sqyd" },
utype = "pressure",
default = "kg/m2",
multiplier= 9.80665,
},
["LT/acre"] = {
per = { "LT", "acre" },
utype = "pressure",
default = "t/ha",
multiplier= 9.80665,
},
["MT/ha"] = {
per = { "MT", "ha" },
utype = "pressure",
default = "LT/acre ST/acre",
multiplier= 9.80665,
},
["oz/sqft"] = {
per = { "oz", "sqft" },
utype = "pressure",
default = "g/m2",
multiplier= 9.80665,
},
["oz/sqyd"] = {
per = { "oz", "sqyd" },
utype = "pressure",
default = "g/m2",
multiplier= 9.80665,
},
["ST/acre"] = {
per = { "ST", "acre" },
utype = "pressure",
default = "t/ha",
multiplier= 9.80665,
},
["t/ha"] = {
per = { "t", "ha" },
utype = "pressure",
default = "LT/acre ST/acre",
multiplier= 9.80665,
},
["tonne/acre"] = {
per = { "tonne", "acre" },
utype = "pressure",
default = "tonne/ha",
multiplier= 9.80665,
},
["tonne/ha"] = {
per = { "tonne", "ha" },
utype = "pressure",
default = "tonne/acre",
multiplier= 9.80665,
},
["kgfpsqcm"] = {
target = "kgf/cm2",
},
["kgpsqcm"] = {
target = "kg/cm2",
},
["kN/m2"] = {
target = "kPa",
},
["lb/in2"] = {
target = "lbf/in2",
},
["torr"] = {
target = "Torr",
},
["Bq"] = {
_name1 = "becquerel",
_symbol = "Bq",
utype = "radioactivity",
scale = 1,
prefixes = 1,
default = "pCi",
link = "Becquerel",
},
["Ci"] = {
_name1 = "curie",
_symbol = "Ci",
utype = "radioactivity",
scale = 3.7e10,
prefixes = 1,
default = "GBq",
link = "Curie (unit)",
},
["Rd"] = {
_name1 = "rutherford",
_symbol = "Rd",
utype = "radioactivity",
scale = 1e6,
prefixes = 1,
default = "MBq",
link = "Rutherford (unit)",
},
["cm/h"] = {
name1 = "centimetre per hour",
name1_us = "centimeter per hour",
name2 = "centimetres per hour",
name2_us = "centimeters per hour",
symbol = "cm/h",
utype = "speed",
scale = 2.7777777777777775e-6,
default = "in/h",
link = "Metre per second",
},
["cm/s"] = {
name1 = "centimetre per second",
name1_us = "centimeter per second",
name2 = "centimetres per second",
name2_us = "centimeters per second",
symbol = "cm/s",
utype = "speed",
scale = 0.01,
default = "in/s",
link = "Metre per second",
},
["cm/year"] = {
name1 = "centimetre per year",
name1_us = "centimeter per year",
name2 = "centimetres per year",
name2_us = "centimeters per year",
symbol = "cm/year",
utype = "speed",
scale = 3.168873850681143e-10,
default = "in/year",
link = "Orders of magnitude (speed)",
},
["foot/s"] = {
name1 = "foot per second",
name2 = "foot per second",
symbol = "ft/s",
utype = "speed",
scale = 0.3048,
default = "m/s",
},
["ft/min"] = {
name1 = "foot per minute",
name2 = "feet per minute",
symbol = "ft/min",
utype = "speed",
scale = 0.00508,
default = "m/min",
link = "Feet per second",
},
["ft/s"] = {
name1 = "foot per second",
name2 = "feet per second",
symbol = "ft/s",
utype = "speed",
scale = 0.3048,
default = "m/s",
link = "Feet per second",
},
["furlong per fortnight"] = {
name2 = "furlongs per fortnight",
symbol = "furlong per fortnight",
usename = 1,
utype = "speed",
scale = 0.00016630952380952381,
default = "km/h mph",
link = "FFF system",
},
["in/h"] = {
name1 = "inch per hour",
name2 = "inches per hour",
symbol = "in/h",
utype = "speed",
scale = 7.0555555555555559e-6,
default = "cm/h",
link = "Inch",
},
["in/s"] = {
name1 = "inch per second",
name2 = "inches per second",
symbol = "in/s",
utype = "speed",
scale = 0.0254,
default = "cm/s",
link = "Inch",
},
["in/year"] = {
name1 = "inch per year",
name2 = "inches per year",
symbol = "in/year",
utype = "speed",
scale = 8.0489395807301024e-10,
default = "cm/year",
link = "Orders of magnitude (speed)",
},
["isp"] = {
name1 = "second",
symbol = "s",
utype = "speed",
scale = 9.80665,
default = "km/s",
link = "Specific impulse",
},
["km/d"] = {
name1 = "kilometre per day",
name1_us = "kilometer per day",
name2 = "kilometres per day",
name2_us = "kilometers per day",
symbol = "km/d",
utype = "speed",
scale = 1.1574074074074074e-2,
default = "mi/d",
link = "Orders of magnitude (speed)",
},
["km/h"] = {
name1 = "kilometre per hour",
name1_us = "kilometer per hour",
name2 = "kilometres per hour",
name2_us = "kilometers per hour",
symbol = "km/h",
utype = "speed",
scale = 0.27777777777777779,
default = "mph",
link = "Kilometres per hour",
},
["km/s"] = {
name1 = "kilometre per second",
name1_us = "kilometer per second",
name2 = "kilometres per second",
name2_us = "kilometers per second",
symbol = "km/s",
utype = "speed",
scale = 1000,
default = "mi/s",
link = "Metre per second",
},
["kn"] = {
name1 = "knot",
symbol = "kn",
utype = "speed",
scale = 0.51444444444444448,
default = "km/h mph",
link = "Knot (unit)",
},
["kNs/kg"] = {
name2 = "kN‑s/kg",
symbol = "kN‑s/kg",
utype = "speed",
scale = 1000,
default = "isp",
link = "Specific impulse",
},
["m/min"] = {
name1 = "metre per minute",
name1_us = "meter per minute",
name2 = "metres per minute",
name2_us = "meters per minute",
symbol = "m/min",
utype = "speed",
scale = 0.016666666666666666,
default = "ft/min",
link = "Metre per second",
},
["m/s"] = {
name1 = "metre per second",
name1_us = "meter per second",
name2 = "metres per second",
name2_us = "meters per second",
symbol = "m/s",
utype = "speed",
scale = 1,
default = "ft/s",
},
["Mach"] = {
name2 = "Mach",
symbol = "Mach",
utype = "speed",
builtin = "mach",
scale = 0,
iscomplex= true,
default = "km/h mph",
link = "Mach number",
},
["mi/d"] = {
name1 = "mile per day",
name2 = "miles per day",
symbol = "mi/d",
utype = "speed",
scale = 1.8626666666666667e-2,
default = "km/d",
link = "Orders of magnitude (speed)",
},
["mi/s"] = {
name1 = "mile per second",
name2 = "miles per second",
symbol = "mi/s",
utype = "speed",
scale = 1609.344,
default = "km/s",
link = "Mile",
},
["mm/h"] = {
name1 = "millimetre per hour",
name1_us = "millimeter per hour",
name2 = "millimetres per hour",
name2_us = "millimeters per hour",
symbol = "mm/h",
utype = "speed",
scale = 2.7777777777777781e-7,
default = "in/h",
link = "Metre per second",
},
["mph"] = {
name1 = "mile per hour",
name2 = "miles per hour",
symbol = "mph",
utype = "speed",
scale = 0.44704,
default = "km/h",
link = "Miles per hour",
},
["Ns/kg"] = {
name2 = "N‑s/kg",
symbol = "N‑s/kg",
utype = "speed",
scale = 1,
default = "isp",
link = "Specific impulse",
},
["si tsfc"] = {
name2 = "g/(kN⋅s)",
symbol = "g/(kN⋅s)",
utype = "speed",
scale = 9.9999628621379242e-7,
invert = -1,
iscomplex= true,
default = "tsfc",
link = "Thrust specific fuel consumption",
},
["tsfc"] = {
name2 = "lb/(lbf⋅h)",
symbol = "lb/(lbf⋅h)",
utype = "speed",
scale = 2.832545036049801e-5,
invert = -1,
iscomplex= true,
default = "si tsfc",
link = "Thrust specific fuel consumption",
},
["cm/y"] = {
target = "cm/year",
},
["cm/yr"] = {
target = "cm/year",
},
["in/y"] = {
target = "in/year",
},
["in/yr"] = {
target = "in/year",
},
["knot"] = {
target = "kn",
},
["knots"] = {
target = "kn",
},
["kph"] = {
target = "km/h",
},
["mi/h"] = {
target = "mph",
},
["mm/s"] = {
per = { "mm", "s" },
utype = "speed",
default = "in/s",
link = "Metre per second",
},
["C"] = {
name1 = "degree Celsius",
name2 = "degrees Celsius",
symbol = "°C",
usesymbol= 1,
utype = "temperature",
scale = 1,
offset = -273.15,
iscomplex= true,
istemperature= true,
default = "F",
link = "Celsius",
},
["F"] = {
name1 = "degree Fahrenheit",
name2 = "degrees Fahrenheit",
symbol = "°F",
usesymbol= 1,
utype = "temperature",
scale = 0.55555555555555558,
offset = 32-273.15*(9/5),
iscomplex= true,
istemperature= true,
default = "C",
link = "Fahrenheit",
},
["K"] = {
_name1 = "kelvin",
_symbol = "K",
usesymbol= 1,
utype = "temperature",
scale = 1,
offset = 0,
iscomplex= true,
istemperature= true,
prefixes = 1,
default = "C F",
link = "Kelvin",
},
["keVT"] = {
name1 = "kiloelectronvolt",
symbol = "keV",
utype = "temperature",
scale = 11.604505e6,
offset = 0,
iscomplex= true,
default = "MK",
link = "Electronvolt",
},
["R"] = {
name1 = "degree Rankine",
name2 = "degrees Rankine",
symbol = "°R",
usesymbol= 1,
utype = "temperature",
scale = 0.55555555555555558,
offset = 0,
iscomplex= true,
istemperature= true,
default = "K F C",
link = "Rankine scale",
},
["Celsius"] = {
target = "C",
},
["°C"] = {
target = "C",
},
["°F"] = {
target = "F",
},
["°R"] = {
target = "R",
},
["C-change"] = {
name1 = "degree Celsius change",
name2 = "degrees Celsius change",
symbol = "°C",
usesymbol= 1,
utype = "temperature change",
scale = 1,
default = "F-change",
link = "Celsius",
},
["F-change"] = {
name1 = "degree Fahrenheit change",
name2 = "degrees Fahrenheit change",
symbol = "°F",
usesymbol= 1,
utype = "temperature change",
scale = 0.55555555555555558,
default = "C-change",
link = "Fahrenheit",
},
["K-change"] = {
name1 = "kelvin change",
name2 = "kelvins change",
symbol = "K",
usesymbol= 1,
utype = "temperature change",
scale = 1,
default = "F-change",
link = "Kelvin",
},
["°C-change"] = {
target = "C-change",
},
["°F-change"] = {
target = "F-change",
},
["century"] = {
name1 = "century",
name2 = "centuries",
symbol = "ha",
utype = "time",
scale = 3155760000,
default = "Gs",
},
["d"] = {
name1 = "day",
symbol = "d",
utype = "time",
scale = 86400,
default = "ks",
},
["decade"] = {
name1 = "decade",
symbol = "daa",
utype = "time",
scale = 315576000,
default = "Ms",
},
["dog year"] = {
name1 = "dog year",
symbol = "dog yr",
utype = "time",
scale = 220903200,
default = "years",
link = "List of unusual units of measurement#Dog year",
},
["fortnight"] = {
symbol = "fortnight",
usename = 1,
utype = "time",
scale = 1209600,
default = "week",
},
["h"] = {
name1 = "hour",
symbol = "h",
utype = "time",
scale = 3600,
default = "ks",
},
["long billion year"] = {
name1 = "billion years",
name2 = "billion years",
symbol = "Ta",
utype = "time",
scale = 31557600000000000000,
default = "Es",
link = "Annum",
},
["millennium"] = {
name1 = "millennium",
name2 = "millennia",
symbol = "ka",
utype = "time",
scale = 31557600000,
default = "Gs",
},
["milliard year"] = {
name1 = "milliard years",
name2 = "milliard years",
symbol = "Ga",
utype = "time",
scale = 31557600000000000,
default = "Ps",
link = "Annum",
},
["million year"] = {
name1 = "million years",
name2 = "million years",
symbol = "Ma",
utype = "time",
scale = 31557600000000,
default = "Ts",
link = "Annum",
},
["min"] = {
name1 = "minute",
symbol = "min",
utype = "time",
scale = 60,
default = "s",
},
["month"] = {
symbol = "month",
usename = 1,
utype = "time",
scale = 2629800,
default = "Ms",
},
["months"] = {
name1 = "month",
symbol = "mo",
utype = "time",
scale = 2629800,
default = "year",
},
["s"] = {
_name1 = "second",
_symbol = "s",
utype = "time",
scale = 1,
prefixes = 1,
default = "v < 7200 ! min ! h",
link = "Second",
},
["short billion year"] = {
name1 = "billion years",
name2 = "billion years",
symbol = "Ga",
utype = "time",
scale = 31557600000000000,
default = "Ps",
link = "Annum",
},
["short trillion year"] = {
name1 = "trillion years",
name2 = "trillion years",
symbol = "Ta",
utype = "time",
scale = 31557600000000000000,
default = "Es",
link = "Annum",
},
["thousand million year"] = {
name1 = "thousand million years",
name2 = "thousand million years",
symbol = "Ga",
utype = "time",
scale = 31557600000000000,
default = "Ps",
link = "Annum",
},
["wk"] = {
symbol = "week",
usename = 1,
utype = "time",
scale = 604800,
default = "Ms",
},
["year"] = {
name1 = "year",
symbol = "a",
utype = "time",
scale = 31557600,
default = "Ms",
link = "Annum",
},
["years"] = {
name1 = "year",
symbol = "yr",
utype = "time",
scale = 31557600,
default = "Ms",
link = "Annum",
},
["byr"] = {
target = "short billion year",
},
["day"] = {
target = "d",
},
["days"] = {
target = "d",
},
["dog yr"] = {
target = "dog year",
},
["Gyr"] = {
target = "thousand million year",
},
["hour"] = {
target = "h",
},
["hours"] = {
target = "h",
},
["kMyr"] = {
target = "thousand million year",
},
["kmyr"] = {
target = "thousand million year",
},
["kyr"] = {
target = "millennium",
},
["long byr"] = {
target = "long billion year",
},
["minute"] = {
target = "min",
},
["minutes"] = {
target = "min",
},
["mth"] = {
target = "month",
},
["Myr"] = {
target = "million year",
},
["myr"] = {
target = "million year",
},
["sec"] = {
target = "s",
},
["second"] = {
target = "s",
},
["seconds"] = {
target = "s",
},
["tmyr"] = {
target = "thousand million year",
},
["tryr"] = {
target = "short trillion year",
},
["tyr"] = {
target = "millennium",
},
["week"] = {
target = "wk",
},
["weeks"] = {
target = "wk",
},
["yr"] = {
target = "year",
},
["kg.m"] = {
name1 = "kilogram metre",
name1_us = "kilogram meter",
symbol = "kg⋅m",
utype = "torque",
scale = 9.80665,
default = "Nm lbft",
link = "Kilogram metre (torque)",
},
["kgf.m"] = {
name1 = "kilogram force-metre",
name1_us = "kilogram force-meter",
symbol = "kgf⋅m",
utype = "torque",
scale = 9.80665,
default = "Nm lbfft",
link = "Kilogram metre (torque)",
},
["kgm"] = {
name1 = "kilogram metre",
name1_us = "kilogram meter",
symbol = "kg⋅m",
utype = "torque",
scale = 9.80665,
default = "Nm lbfft",
link = "Kilogram metre (torque)",
},
["kpm"] = {
name1 = "kilopond metre",
name1_us = "kilopond meter",
symbol = "kp⋅m",
utype = "torque",
scale = 9.80665,
default = "Nm lbft",
link = "Kilogram metre (torque)",
},
["lb-fft"] = {
name1 = "pound force-foot",
name2 = "pound force-feet",
symbol = "ft⋅lb<sub>f</sub>",
utype = "torque",
scale = 1.3558179483314004,
default = "Nm",
link = "Pound-foot (torque)",
},
["lb.ft"] = {
name1 = "pound force-foot",
name2 = "pound force-feet",
symbol = "lb⋅ft",
utype = "torque",
scale = 1.3558179483314004,
default = "Nm",
link = "Pound-foot (torque)",
},
["lb.in"] = {
name1 = "pound force-inch",
symbol = "lb⋅in",
utype = "torque",
scale = 0.1129848290276167,
default = "mN.m",
link = "Pound-foot (torque)",
},
["lbfft"] = {
name1 = "pound force-foot",
name2 = "pound force-feet",
symbol = "lbf⋅ft",
utype = "torque",
scale = 1.3558179483314004,
default = "Nm",
link = "Pound-foot (torque)",
},
["lbft"] = {
name1 = "pound-foot",
name2 = "pound-feet",
symbol = "lb⋅ft",
utype = "torque",
scale = 1.3558179483314004,
default = "Nm",
link = "Pound-foot (torque)",
},
["m.kg-f"] = {
name1 = "metre kilogram-force",
name1_us = "meter kilogram-force",
name2 = "metre kilograms-force",
name2_us = "meter kilograms-force",
symbol = "m⋅kg<sub>f</sub>",
utype = "torque",
scale = 9.80665,
default = "Nm lbfft",
link = "Kilogram metre (torque)",
},
["m.kgf"] = {
name1 = "metre kilogram-force",
name1_us = "meter kilogram-force",
name2 = "metre kilograms-force",
name2_us = "meter kilograms-force",
symbol = "m⋅kgf",
utype = "torque",
scale = 9.80665,
default = "Nm lbfft",
link = "Kilogram metre (torque)",
},
["mN.m"] = {
name1 = "millinewton-metre",
name1_us = "millinewton-meter",
symbol = "mN⋅m",
utype = "torque",
scale = 0.001,
default = "lb.in",
link = "Newton-metre",
},
["Nm"] = {
_name1 = "newton-metre",
_name1_us= "newton-meter",
_symbol = "N⋅m",
utype = "torque",
alttype = "energy",
scale = 1,
prefixes = 1,
default = "lbfft",
link = "Newton-metre",
},
["kN/m"] = {
per = { "kN", "-m-stiff" },
utype = "torque",
default = "lbf/in",
},
["lbf/in"] = {
per = { "lbf", "-in-stiff" },
utype = "torque",
default = "kN/m",
},
["lb-f.ft"] = {
target = "lb-fft",
},
["lbf.ft"] = {
target = "lbfft",
},
["lbf·ft"] = {
target = "lbfft",
},
["lb·ft"] = {
target = "lb.ft",
},
["mkg-f"] = {
target = "m.kg-f",
},
["mkgf"] = {
target = "m.kgf",
},
["N.m"] = {
target = "Nm",
},
["N·m"] = {
target = "Nm",
},
["ton-mile"] = {
symbol = "ton-mile",
usename = 1,
utype = "transportation",
scale = 1.4599723182105602,
default = "tkm",
},
["tkm"] = {
name1 = "tonne-kilometre",
name1_us = "tonne-kilometer",
symbol = "tkm",
utype = "transportation",
scale = 1,
default = "ton-mile",
},
["-12USoz(mL)serve"] = {
name1_us = "12 U.S. fl oz (355 mL) serving",
symbol = "12 US fl oz (355 mL) serving",
sym_us = "12 U.S. fl oz (355 mL) serving",
utype = "volume",
scale = 0.00035488235475000004,
default = "mL",
link = "Beverage can#Standard sizes",
},
["-12USoz(ml)serve"] = {
name1_us = "12 U.S. fl oz (355 ml) serving",
symbol = "12 US fl oz (355 ml) serving",
sym_us = "12 U.S. fl oz (355 ml) serving",
utype = "volume",
scale = 0.00035488235475000004,
default = "ml",
link = "Beverage can#Standard sizes",
},
["-12USozserve"] = {
name1_us = "12 U.S. fl oz serving",
symbol = "12 US fl oz serving",
sym_us = "12 U.S. fl oz serving",
utype = "volume",
scale = 0.00035488235475000004,
default = "mL",
link = "Beverage can#Standard sizes",
},
["acre-foot"] = {
name1 = "acre-foot",
name2 = "acre-foot",
symbol = "acre⋅ft",
utype = "volume",
scale = 1233.48183754752,
default = "m3",
},
["acre-ft"] = {
name1 = "acre-foot",
name2 = "acre-feet",
symbol = "acre⋅ft",
utype = "volume",
scale = 1233.48183754752,
default = "m3",
},
["AUtbsp"] = {
name1 = "Australian tablespoon",
symbol = "AU tbsp",
utype = "volume",
scale = 0.000020,
default = "ml",
},
["Bcuft"] = {
name1 = "billion cubic foot",
name2 = "billion cubic feet",
symbol = "billion cu ft",
utype = "volume",
scale = 28316846.592,
default = "Gl",
link = "Cubic foot",
},
["bdft"] = {
name1 = "board foot",
name2 = "board feet",
symbol = "bd ft",
utype = "volume",
scale = 0.0023597372167,
default = "m3",
},
["board feet"] = {
name2 = "board feet",
symbol = "board foot",
usename = 1,
utype = "volume",
scale = 0.0023597372167,
default = "m3",
},
["board foot"] = {
name2 = "board foot",
symbol = "board foot",
usename = 1,
utype = "volume",
scale = 0.0023597372167,
default = "m3",
},
["cc"] = {
name1 = "cubic centimetre",
name1_us = "cubic centimeter",
symbol = "cc",
utype = "volume",
scale = 0.000001,
default = "cuin",
},
["CID"] = {
name1 = "cubic inch",
name2 = "cubic inches",
symbol = "cu in",
utype = "volume",
scale = 0.000016387064,
default = "cc",
link = "Cubic inch#Engine displacement",
},
["cord"] = {
symbol = "cord",
utype = "volume",
scale = 3.624556363776,
default = "m3",
link = "Cord (unit)",
},
["cufoot"] = {
name1 = "cubic foot",
name2 = "cubic foot",
symbol = "cu ft",
utype = "volume",
scale = 0.028316846592,
default = "m3",
},
["cuft"] = {
name1 = "cubic foot",
name2 = "cubic feet",
symbol = "cu ft",
utype = "volume",
scale = 0.028316846592,
default = "m3",
},
["cuin"] = {
name1 = "cubic inch",
name2 = "cubic inches",
symbol = "cu in",
utype = "volume",
scale = 0.000016387064,
default = "cm3",
},
["cumi"] = {
name1 = "cubic mile",
symbol = "cu mi",
utype = "volume",
scale = 4168181825.440579584,
default = "km3",
},
["cuyd"] = {
name1 = "cubic yard",
symbol = "cu yd",
utype = "volume",
scale = 0.764554857984,
default = "m3",
},
["firkin"] = {
symbol = "firkin",
usename = 1,
utype = "volume",
scale = 0.04091481,
default = "L impgal USgal",
link = "Firkin (unit)",
},
["foot3"] = {
target = "cufoot",
},
["Goilbbl"] = {
name1 = "billion barrels",
name2 = "billion barrels",
symbol = "Gbbl",
utype = "volume",
scale = 158987294.928,
default = "v * 1.58987294928 < 10 ! e6 ! e9 ! m3",
link = "Barrel (unit)#Oil barrel",
},
["gr water"] = {
name1 = "grains water",
name2 = "grains water",
symbol = "gr H<sub>2</sub>O",
utype = "volume",
scale = 0.00000006479891,
default = "cm3",
link = "Grain (unit)",
},
["grt"] = {
name1 = "gross register ton",
symbol = "grt",
utype = "volume",
scale = 2.8316846592,
default = "m3",
link = "Gross register tonnage",
},
["impbbl"] = {
name1 = "imperial barrel",
symbol = "imp bbl",
utype = "volume",
scale = 0.16365924,
default = "L impgal USgal",
link = "Barrel (unit)",
},
["impbsh"] = {
name1 = "imperial bushel",
symbol = "imp bsh",
utype = "volume",
scale = 0.03636872,
default = "L impgal USdrygal",
},
["impbu"] = {
name1 = "imperial bushel",
symbol = "imp bu",
utype = "volume",
scale = 0.03636872,
default = "m3",
},
["impgal"] = {
name1 = "imperial gallon",
symbol = "imp gal",
utype = "volume",
scale = 0.00454609,
default = "L USgal",
},
["impgi"] = {
name1 = "gill",
symbol = "gi",
utype = "volume",
scale = 0.0001420653125,
default = "ml USoz",
link = "Gill (unit)",
},
["impkenning"] = {
name1 = "imperial kenning",
symbol = "kenning",
utype = "volume",
scale = 0.01818436,
default = "L USdrygal",
link = "Kenning (unit)",
},
["impoz"] = {
name1 = "imperial fluid ounce",
symbol = "imp fl oz",
utype = "volume",
scale = 0.0000284130625,
default = "ml USoz",
},
["imppk"] = {
name1 = "imperial peck",
symbol = "pk",
utype = "volume",
scale = 0.00909218,
default = "L USdrygal",
link = "Peck",
},
["imppt"] = {
name1 = "imperial pint",
symbol = "imp pt",
utype = "volume",
scale = 0.00056826125,
default = "L",
},
["impqt"] = {
name1 = "imperial quart",
symbol = "imp qt",
utype = "volume",
scale = 0.0011365225,
default = "ml USoz",
customary= 3,
},
["kilderkin"] = {
symbol = "kilderkin",
usename = 1,
utype = "volume",
scale = 0.08182962,
default = "L impgal USgal",
},
["koilbbl"] = {
name1 = "thousand barrels",
name2 = "thousand barrels",
symbol = "kbbl",
utype = "volume",
scale = 158.987294928,
default = "v * 1.58987294928 < 10 ! ! e3 ! m3",
link = "Barrel (unit)#Oil barrel",
},
["L"] = {
_name1 = "litre",
_name1_us= "liter",
_symbol = "L",
utype = "volume",
scale = 0.001,
prefixes = 1,
default = "impgal USgal",
link = "Litre",
},
["l"] = {
_name1 = "litre",
_name1_us= "liter",
_symbol = "l",
utype = "volume",
scale = 0.001,
prefixes = 1,
default = "impgal USgal",
link = "Litre",
},
["ll"] = {
name1 = "litre",
name1_us = "liter",
symbol = "l",
utype = "volume",
scale = 0.001,
default = "impgal USgal",
},
["m3"] = {
_name1 = "cubic metre",
_name1_us= "cubic meter",
_symbol = "m<sup>3</sup>",
prefix_position= 7,
utype = "volume",
scale = 1,
prefixes = 3,
default = "cuft",
link = "Cubic metre",
},
["Mbbl"] = {
name1 = "thousand barrels",
name2 = "thousand barrels",
symbol = "Mbbl",
utype = "volume",
scale = 158.987294928,
default = "v * 1.58987294928 < 10 ! e3 ! ! m3",
link = "Barrel (unit)#Oil barrel",
},
["MMoilbbl"] = {
name1 = "million barrels",
name2 = "million barrels",
symbol = "MMbbl",
utype = "volume",
scale = 158987.294928,
default = "v * 1.58987294928 < 10 ! e3 ! e6 ! m3",
link = "Barrel (unit)#Oil barrel",
},
["Moilbbl"] = {
name1 = "million barrels",
name2 = "million barrels",
symbol = "Mbbl",
utype = "volume",
scale = 158987.294928,
default = "v * 1.58987294928 < 10 ! e3 ! e6 ! m3",
link = "Barrel (unit)#Oil barrel",
},
["MTON"] = {
name1 = "measurement ton",
symbol = "MTON",
utype = "volume",
scale = 1.13267386368,
default = "m3",
},
["MUSgal"] = {
name1 = "million US gallons",
name1_us = "million U.S. gallons",
name2 = "million US gallons",
name2_us = "million U.S. gallons",
symbol = "million US gal",
sym_us = "million U.S. gal",
utype = "volume",
scale = 3785.411784,
default = "Ml",
link = "US gallon",
},
["oilbbl"] = {
name1 = "barrel",
symbol = "bbl",
utype = "volume",
scale = 0.158987294928,
default = "m3",
link = "Barrel (unit)#Oil barrel",
},
["stere"] = {
symbol = "stere",
usename = 1,
utype = "volume",
scale = 1,
default = "cuft",
},
["Toilbbl"] = {
name1 = "trillion barrels",
name2 = "trillion barrels",
symbol = "Tbbl",
utype = "volume",
scale = 158987294928,
default = "v * 1.58987294928 < 10 ! e9 ! e12 ! m3",
link = "Barrel (unit)#Oil barrel",
},
["USbbl"] = {
name1 = "US barrel",
name1_us = "U.S. barrel",
symbol = "US bbl",
sym_us = "U.S. bbl",
utype = "volume",
scale = 0.119240471196,
default = "L USgal impgal",
link = "Barrel (unit)",
},
["USbeerbbl"] = {
name1 = "US beer barrel",
name1_us = "U.S. beer barrel",
symbol = "US bbl",
sym_us = "U.S. bbl",
utype = "volume",
scale = 0.117347765304,
default = "L USgal impgal",
link = "Barrel (unit)",
},
["USbsh"] = {
name1 = "US bushel",
name1_us = "U.S. bushel",
symbol = "US bsh",
sym_us = "U.S. bsh",
utype = "volume",
scale = 0.03523907016688,
default = "L USdrygal impgal",
link = "Bushel",
},
["USbu"] = {
name1 = "US bushel",
name1_us = "U.S. bushel",
symbol = "US bu",
sym_us = "U.S. bu",
utype = "volume",
scale = 0.03523907016688,
default = "L USdrygal impgal",
link = "Bushel",
},
["USdrybbl"] = {
name1 = "US dry barrel",
name1_us = "U.S. dry barrel",
symbol = "US dry bbl",
sym_us = "U.S. dry bbl",
utype = "volume",
scale = 0.11562819898508,
default = "m3",
link = "Barrel (unit)",
},
["USdrygal"] = {
name1 = "US dry gallon",
name1_us = "U.S. dry gallon",
symbol = "US dry gal",
sym_us = "U.S. dry gal",
utype = "volume",
scale = 0.00440488377086,
default = "L",
link = "Gallon",
},
["USdrypt"] = {
name1 = "US dry pint",
name1_us = "U.S. dry pint",
symbol = "US dry pt",
sym_us = "U.S. dry pt",
utype = "volume",
scale = 0.0005506104713575,
default = "ml",
link = "Pint",
},
["USdryqt"] = {
name1 = "US dry quart",
name1_us = "U.S. dry quart",
symbol = "US dry qt",
sym_us = "U.S. dry qt",
utype = "volume",
scale = 0.001101220942715,
default = "ml",
link = "Quart",
},
["USflgal"] = {
name1 = "US gallon",
name1_us = "U.S. gallon",
symbol = "US fl gal",
sym_us = "U.S. fl gal",
utype = "volume",
scale = 0.003785411784,
default = "L impgal",
link = "Gallon",
},
["USgal"] = {
name1 = "US gallon",
name1_us = "U.S. gallon",
symbol = "US gal",
sym_us = "U.S. gal",
utype = "volume",
scale = 0.003785411784,
default = "L impgal",
},
["USgi"] = {
name1 = "gill",
symbol = "gi",
utype = "volume",
scale = 0.0001182941183,
default = "ml impoz",
link = "Gill (unit)",
},
["USkenning"] = {
name1 = "US kenning",
name1_us = "U.S. kenning",
symbol = "US kenning",
sym_us = "U.S. kenning",
utype = "volume",
scale = 0.01761953508344,
default = "L impgal",
link = "Kenning (unit)",
},
["USmin"] = {
name1 = "US minim",
name1_us = "U.S. minim",
symbol = "US min",
sym_us = "U.S. min",
utype = "volume",
scale = 0.000000061611519921875,
default = "ml",
link = "Minim (unit)",
},
["USoz"] = {
name1 = "US fluid ounce",
name1_us = "U.S. fluid ounce",
symbol = "US fl oz",
sym_us = "U.S. fl oz",
utype = "volume",
scale = 0.0000295735295625,
default = "ml",
},
["USpk"] = {
name1 = "US peck",
name1_us = "U.S. peck",
symbol = "US pk",
sym_us = "U.S. pk",
utype = "volume",
scale = 0.00880976754172,
default = "L impgal",
link = "Peck",
},
["USpt"] = {
name1 = "US pint",
name1_us = "U.S. pint",
symbol = "US pt",
sym_us = "U.S. pt",
utype = "volume",
scale = 0.000473176473,
default = "L imppt",
link = "Pint",
},
["USqt"] = {
name1 = "US quart",
name1_us = "U.S. quart",
symbol = "US qt",
sym_us = "U.S. qt",
utype = "volume",
scale = 0.000946352946,
default = "ml",
link = "Quart",
customary= 1,
},
["USquart"] = {
name1 = "US quart",
name1_us = "U.S. quart",
symbol = "US qt",
sym_us = "U.S. qt",
utype = "volume",
scale = 0.000946352946,
default = "ml impoz",
link = "Quart",
},
["UStbsp"] = {
name1 = "US tablespoon",
name1_us = "U.S. tablespoon",
symbol = "US tbsp",
sym_us = "U.S. tbsp",
utype = "volume",
scale = 1.4786764781250001e-5,
default = "ml",
},
["winecase"] = {
symbol = "case",
usename = 1,
utype = "volume",
scale = 0.009,
default = "L",
link = "Case (goods)",
},
["*U.S.drygal"] = {
target = "USdrygal",
sp_us = true,
customary= 2,
},
["*U.S.gal"] = {
target = "USgal",
sp_us = true,
customary= 2,
},
["+USdrygal"] = {
target = "USdrygal",
customary= 1,
},
["+usfloz"] = {
target = "USoz",
link = "Fluid ounce",
customary= 1,
},
["+USgal"] = {
target = "USgal",
customary= 1,
},
["+USoz"] = {
target = "USoz",
customary= 1,
},
["@impgal"] = {
target = "impgal",
link = "Gallon",
customary= 3,
},
["acre feet"] = {
target = "acre-ft",
},
["acre foot"] = {
target = "acre-foot",
},
["acre ft"] = {
target = "acre-ft",
},
["acre-feet"] = {
target = "acre-ft",
},
["acre.foot"] = {
target = "acre-foot",
},
["acre.ft"] = {
target = "acre-ft",
},
["acre·ft"] = {
target = "acre-ft",
},
["bushels"] = {
target = "USbsh",
},
["cid"] = {
target = "CID",
},
["ft3"] = {
target = "cuft",
},
["gal"] = {
target = "USgal",
},
["gallon"] = {
shouldbe = "Use %{USgal%} for US gallons or %{impgal%} for imperial gallons (not %{gallon%})",
},
["gallons"] = {
shouldbe = "Use %{USgal%} for US gallons or %{impgal%} for imperial gallons (not %{gallons%})",
},
["Gcuft"] = {
target = "e9cuft",
},
["impfloz"] = {
target = "impoz",
},
["Impgal"] = {
target = "impgal",
},
["in3"] = {
target = "cuin",
symbol = "in<sup>3</sup>",
},
["hm³"] = {
target = "hm3",
},
["kcuft"] = {
target = "e3cuft",
},
["kcum"] = {
target = "e3m3",
},
["km³"] = {
target = "km3",
},
["liter"] = {
target = "L",
sp_us = true,
},
["liters"] = {
target = "L",
sp_us = true,
},
["litre"] = {
target = "L",
},
["litres"] = {
target = "L",
},
["Mcuft"] = {
target = "e6cuft",
},
["Mcum"] = {
target = "e6m3",
},
["Mft3"] = {
target = "e6cuft",
},
["mi3"] = {
target = "cumi",
},
["m³"] = {
target = "m3",
},
["Pcuft"] = {
target = "e15cuft",
},
["pt"] = {
shouldbe = "Use %{USpt%} for US pints or %{imppt%} for imperial pints (not %{pt%})",
},
["qt"] = {
shouldbe = "Use %{USqt%} for US quarts or %{impqt%} for imperial quarts (not %{qt%})",
},
["Tcuft"] = {
target = "e12cuft",
},
["Tft3"] = {
target = "e12cuft",
},
["U.S.bbl"] = {
target = "USbbl",
sp_us = true,
default = "L U.S.gal impgal",
},
["U.S.beerbbl"] = {
target = "USbeerbbl",
sp_us = true,
default = "L U.S.gal impgal",
},
["U.S.bsh"] = {
target = "USbsh",
sp_us = true,
default = "L U.S.drygal impgal",
},
["U.S.bu"] = {
target = "USbu",
sp_us = true,
default = "L U.S.drygal impgal",
},
["U.S.drybbl"] = {
target = "USdrybbl",
sp_us = true,
},
["U.S.drygal"] = {
target = "USdrygal",
sp_us = true,
},
["U.S.drypt"] = {
target = "USdrypt",
sp_us = true,
},
["U.S.dryqt"] = {
target = "USdryqt",
sp_us = true,
},
["U.S.flgal"] = {
target = "USflgal",
sp_us = true,
},
["U.S.floz"] = {
target = "USoz",
sp_us = true,
},
["U.S.gal"] = {
target = "USgal",
sp_us = true,
link = "U.S. gallon",
},
["u.s.gal"] = {
target = "USgal",
sp_us = true,
link = "U.S. gallon",
},
["U.S.gi"] = {
target = "USgi",
sp_us = true,
},
["U.S.kenning"] = {
target = "USkenning",
sp_us = true,
},
["U.S.oz"] = {
target = "USoz",
sp_us = true,
},
["U.S.pk"] = {
target = "USpk",
sp_us = true,
},
["U.S.pt"] = {
target = "USpt",
sp_us = true,
},
["U.S.qt"] = {
target = "USqt",
sp_us = true,
default = "L impqt",
customary= 2,
},
["usbbl"] = {
target = "USbbl",
},
["usbeerbbl"] = {
target = "USbeerbbl",
},
["usbsh"] = {
target = "USbsh",
},
["usbu"] = {
target = "USbu",
},
["usdrybbl"] = {
target = "USdrybbl",
},
["usdrygal"] = {
target = "USdrygal",
},
["usdrypt"] = {
target = "USdrypt",
},
["usdryqt"] = {
target = "USdryqt",
},
["USfloz"] = {
target = "USoz",
},
["usfloz"] = {
target = "USoz",
},
["USGAL"] = {
target = "USgal",
},
["usgal"] = {
target = "USgal",
},
["usgi"] = {
target = "USgi",
},
["uskenning"] = {
target = "USkenning",
},
["usoz"] = {
target = "USoz",
},
["uspk"] = {
target = "USpk",
},
["uspt"] = {
target = "USpt",
},
["usqt"] = {
target = "USqt",
},
["yd3"] = {
target = "cuyd",
},
["cuft/sqmi"] = {
per = { "cuft", "sqmi" },
utype = "volume per unit area",
default = "m3/km2",
},
["m3/ha"] = {
name1 = "cubic metre per hectare",
name1_us = "cubic meter per hectare",
name2 = "cubic metres per hectare",
name2_us = "cubic meters per hectare",
symbol = "m<sup>3</sup>/ha",
utype = "volume per unit area",
scale = 0.0001,
default = "USbu/acre",
link = "Hectare",
},
["m3/km2"] = {
per = { "m3", "km2" },
utype = "volume per unit area",
default = "cuft/sqmi",
},
["U.S.gal/acre"] = {
per = { "U.S.gal", "acre" },
utype = "volume per unit area",
default = "m3/km2",
},
["USbu/acre"] = {
name2 = "US bushels per acre",
symbol = "US bushel per acre",
usename = 1,
utype = "volume per unit area",
scale = 8.7077638761350888e-6,
default = "m3/ha",
link = "Bushel",
},
["USgal/acre"] = {
per = { "USgal", "acre" },
utype = "volume per unit area",
default = "m3/km2",
},
["cuyd/mi"] = {
per = { "cuyd", "mi" },
utype = "volume per unit length",
default = "m3/km",
},
["m3/km"] = {
per = { "m3", "km" },
utype = "volume per unit length",
default = "cuyd/mi",
},
["mich"] = {
combination= { "ch", "mi" },
multiple = { 80 },
utype = "length",
},
["michlk"] = {
combination= { "chlk", "mi" },
multiple = { 80 },
utype = "length",
},
["michainlk"] = {
combination= { "chainlk", "mi" },
multiple = { 80 },
utype = "length",
},
["miyd"] = {
combination= { "yd", "mi" },
multiple = { 1760 },
utype = "length",
},
["miydftin"] = {
combination= { "in", "ft", "yd", "mi" },
multiple = { 12, 3, 1760 },
utype = "length",
},
["mift"] = {
combination= { "ft", "mi" },
multiple = { 5280 },
utype = "length",
},
["ydftin"] = {
combination= { "in", "ft", "yd" },
multiple = { 12, 3 },
utype = "length",
},
["ydft"] = {
combination= { "ft", "yd" },
multiple = { 3 },
utype = "length",
},
["ftin"] = {
combination= { "in", "ft" },
multiple = { 12 },
utype = "length",
},
["footin"] = {
combination= { "in", "foot" },
multiple = { 12 },
utype = "length",
},
["handin"] = {
combination= { "in", "hand" },
multiple = { 4 },
utype = "length",
},
["lboz"] = {
combination= { "oz", "lb" },
multiple = { 16 },
utype = "mass",
},
["stlb"] = {
combination= { "lb", "st" },
multiple = { 14 },
utype = "mass",
},
["stlboz"] = {
combination= { "oz", "lb", "st" },
multiple = { 16, 14 },
utype = "mass",
},
["st and lb"] = {
combination= { "lb", "st" },
multiple = { 14 },
utype = "mass",
},
["GN LTf"] = {
combination= { "GN", "-LTf" },
utype = "force",
},
["GN LTf STf"] = {
combination= { "GN", "-LTf", "-STf" },
utype = "force",
},
["GN STf"] = {
combination= { "GN", "-STf" },
utype = "force",
},
["GN STf LTf"] = {
combination= { "GN", "-STf", "-LTf" },
utype = "force",
},
["kN LTf"] = {
combination= { "kN", "-LTf" },
utype = "force",
},
["kN LTf STf"] = {
combination= { "kN", "-LTf", "-STf" },
utype = "force",
},
["kN STf"] = {
combination= { "kN", "-STf" },
utype = "force",
},
["kN STf LTf"] = {
combination= { "kN", "-STf", "-LTf" },
utype = "force",
},
["LTf STf"] = {
combination= { "-LTf", "-STf" },
utype = "force",
},
["MN LTf"] = {
combination= { "MN", "-LTf" },
utype = "force",
},
["MN LTf STf"] = {
combination= { "MN", "-LTf", "-STf" },
utype = "force",
},
["MN STf"] = {
combination= { "MN", "-STf" },
utype = "force",
},
["MN STf LTf"] = {
combination= { "MN", "-STf", "-LTf" },
utype = "force",
},
["STf LTf"] = {
combination= { "-STf", "-LTf" },
utype = "force",
},
["L/100 km mpgimp"] = {
combination= { "L/100 km", "mpgimp" },
utype = "fuel efficiency",
},
["l/100 km mpgimp"] = {
combination= { "l/100 km", "mpgimp" },
utype = "fuel efficiency",
},
["L/100 km mpgUS"] = {
combination= { "L/100 km", "mpgus" },
utype = "fuel efficiency",
},
["L/100 km mpgus"] = {
combination= { "L/100 km", "mpgus" },
utype = "fuel efficiency",
},
["l/100 km mpgus"] = {
combination= { "l/100 km", "mpgus" },
utype = "fuel efficiency",
},
["mpgimp L/100 km"] = {
combination= { "mpgimp", "L/100 km" },
utype = "fuel efficiency",
},
["LT ST t"] = {
combination= { "lt", "-ST", "t" },
utype = "mass",
},
["LT t ST"] = {
combination= { "lt", "t", "-ST" },
utype = "mass",
},
["ST LT t"] = {
combination= { "-ST", "lt", "t" },
utype = "mass",
},
["ST t LT"] = {
combination= { "-ST", "t", "lt" },
utype = "mass",
},
["t LT ST"] = {
combination= { "t", "lt", "-ST" },
utype = "mass",
},
["ton"] = {
combination= { "LT", "ST" },
utype = "mass",
},
["kPa kg/cm2"] = {
combination= { "kPa", "kgf/cm2" },
utype = "pressure",
},
["kPa lb/in2"] = {
combination= { "kPa", "-lb/in2" },
utype = "pressure",
},
["floz"] = {
combination= { "impoz", "USoz" },
utype = "volume",
},
}
---------------------------------------------------------------------------
-- Do not change the data in this table because it is created by running --
-- a script that reads the wikitext from a wiki page (see note above). --
---------------------------------------------------------------------------
local default_exceptions = {
-- Prefixed units with a default different from that of the base unit.
-- Each key item is a prefixed symbol (unitcode for engineering notation).
["cm<sup>2</sup>"] = "sqin",
["dm<sup>2</sup>"] = "sqin",
["e3acre"] = "km2",
["e3m2"] = "e6sqft",
["e6acre"] = "km2",
["e6ha"] = "e6acre",
["e6km2"] = "e6sqmi",
["e6m2"] = "e6sqft",
["e6sqft"] = "v * 9.290304 < 100 ! e3 ! e6 ! m2",
["e6sqmi"] = "e6km2",
["hm<sup>2</sup>"] = "acre",
["km<sup>2</sup>"] = "sqmi",
["mm<sup>2</sup>"] = "sqin",
["aJ"] = "eV",
["e3BTU"] = "MJ",
["e6BTU"] = "GJ",
["EJ"] = "kWh",
["fJ"] = "keV",
["GJ"] = "kWh",
["MJ"] = "kWh",
["PJ"] = "kWh",
["pJ"] = "MeV",
["TJ"] = "kWh",
["YJ"] = "kWh",
["yJ"] = "μeV",
["ZJ"] = "kWh",
["zJ"] = "meV",
["e12cuft/a"] = "v * 2.8316846592 < 100 ! e9 ! e12 ! m3/a",
["e12cuft/d"] = "v * 2.8316846592 < 100 ! e9 ! e12 ! m3/d",
["e12m3/a"] = "Tcuft/a",
["e12m3/d"] = "Tcuft/d",
["e3cuft/a"] = "v * 2.8316846592 < 100 ! ! e3 ! m3/a",
["e3cuft/d"] = "v * 2.8316846592 < 100 ! ! e3 ! m3/d",
["e3cuft/s"] = "v * 2.8316846592 < 100 ! ! e3 ! m3/s",
["e3m3/a"] = "v < 28.316846592 ! k ! M ! cuft/a",
["e3m3/d"] = "v < 28.316846592 ! k ! M ! cuft/d",
["e3m3/s"] = "v < 28.316846592 ! k ! M ! cuft/s",
["e3USgal/a"] = "v * 3.785411784 < 1000 ! ! e3 ! m3/a",
["e6cuft/a"] = "v * 2.8316846592 < 100 ! e3 ! e6 ! m3/a",
["e6cuft/d"] = "v * 2.8316846592 < 100 ! e3 ! e6 ! m3/d",
["e6cuft/s"] = "v * 2.8316846592 < 100 ! e3 ! e6 ! m3/s",
["e6m3/a"] = "v < 28.316846592 ! M ! G ! cuft/a",
["e6m3/d"] = "v < 28.316846592 ! M ! G ! cuft/d",
["e6m3/s"] = "v < 28.316846592 ! e6 ! e9 ! cuft/s",
["e6USgal/a"] = "v * 3.785411784 < 1000 ! e3 ! e6 ! m3/a",
["e9cuft/a"] = "m3/a",
["e9cuft/d"] = "v * 2.8316846592 < 100 ! e6 ! e9 ! m3/d",
["e9m3/a"] = "v < 28.316846592 ! G ! T ! cuft/a",
["e9m3/d"] = "v < 28.316846592 ! G ! T ! cuft/d",
["e9m3/s"] = "v < 28.316846592 ! e9 ! e12 ! cuft/s",
["e9USgal/a"] = "v * 3.785411784 < 1000 ! e6 ! e9 ! m3/a",
["e9USgal/s"] = "v * 3.785411784 < 1000 ! e6 ! e9 ! m3/s",
["nN"] = "gr-f",
["μN"] = "gr-f",
["mN"] = "oz-f",
["am"] = "in",
["cm"] = "in",
["dam"] = "ft",
["dm"] = "in",
["e12km"] = "e12mi",
["e12mi"] = "e12km",
["e3AU"] = "ly",
["e3km"] = "e3mi",
["e3mi"] = "e3km",
["e6km"] = "e6mi",
["e6mi"] = "e6km",
["e9km"] = "AU",
["e9mi"] = "e9km",
["Em"] = "mi",
["fm"] = "in",
["Gm"] = "mi",
["hm"] = "ft",
["km"] = "mi",
["mm"] = "in",
["Mm"] = "mi",
["nm"] = "in",
["Pm"] = "mi",
["pm"] = "in",
["Tm"] = "mi",
["Ym"] = "mi",
["ym"] = "in",
["Zm"] = "mi",
["zm"] = "in",
["μm"] = "in",
["e12lb"] = "v * 4.5359237 < 10 ! Mt ! Gt",
["e3lb"] = "v * 4.5359237 < 10 ! kg ! t",
["e3ozt"] = "v * 0.311034768 < 10 ! kg ! t",
["e3t"] = "LT ST",
["e6carat"] = "t",
["e6lb"] = "v * 4.5359237 < 10 ! t ! kilotonne",
["e6ozt"] = "lb kg",
["e6ST"] = "Mt",
["e6t"] = "LT ST",
["e9lb"] = "v * 4.5359237 < 10 ! kilotonne ! Mt",
["e9t"] = "LT ST",
["Gg"] = "lb",
["kg"] = "lb",
["mg"] = "gr",
["Mg"] = "LT ST",
["ng"] = "gr",
["μg"] = "gr",
["mBq"] = "fCi",
["kBq"] = "nCi",
["MBq"] = "μCi",
["GBq"] = "mCi",
["TBq"] = "Ci",
["PBq"] = "kCi",
["EBq"] = "kCi",
["fCi"] = "mBq",
["pCi"] = "Bq",
["nCi"] = "Bq",
["μCi"] = "kBq",
["mCi"] = "MBq",
["kCi"] = "TBq",
["MCi"] = "PBq",
["ns"] = "μs",
["μs"] = "ms",
["ms"] = "s",
["ks"] = "h",
["Ms"] = "week",
["Gs"] = "decade",
["Ts"] = "millennium",
["Ps"] = "million year",
["Es"] = "thousand million year",
["MK"] = "keVT",
["cL"] = "impoz usoz",
["cl"] = "impoz usoz",
["cm<sup>3</sup>"] = "cuin",
["dL"] = "impoz usoz",
["dl"] = "impoz usoz",
["mm<sup>3</sup>"] = "cuin",
["dm<sup>3</sup>"] = "cuin",
["e12cuft"] = "v * 2.8316846592 < 100 ! e9 ! e12 ! m3",
["e12impgal"] = "v * 4.54609 < 1000 ! T ! P ! l",
["e12m3"] = "v < 28.316846592 ! T ! P ! cuft",
["e12U.S.gal"] = "v * 3.785411784 < 1000 ! T ! P ! l",
["e12USgal"] = "v * 3.785411784 < 1000 ! T ! P ! l",
["e15cuft"] = "v * 2.8316846592 < 100 ! e12 ! e15 ! m3",
["e15m3"] = "Pcuft",
["e3bdft"] = "v * 0.23597372167 < 100 ! e3 ! e6 ! m3",
["e3cuft"] = "v * 2.8316846592 < 100 ! ! e3 ! m3",
["e3impgal"] = "v * 4.54609 < 1000 ! k ! M ! l",
["e3m3"] = "v < 28.316846592 ! k ! M ! cuft",
["e3U.S.gal"] = "v * 3.785411784 < 1000 ! k ! M ! l",
["e3USgal"] = "v * 3.785411784 < 1000 ! k ! M ! l",
["e6bdft"] = "v * 0.23597372167 < 100 ! e3 ! e6 ! m3",
["e6cuft"] = "v * 2.8316846592 < 100 ! e3 ! e6 ! m3",
["e6cuyd"] = "v * 7.64554857984 < 10 ! e3 ! e6 ! m3",
["e6impgal"] = "v * 4.54609 < 1000 ! M ! G ! l",
["e6L"] = "USgal",
["e6m3"] = "v < 28.316846592 ! M ! G ! cuft",
["e6U.S.gal"] = "v * 3.785411784 < 1000 ! M ! G ! l",
["e6USgal"] = "v * 3.785411784 < 1000 ! M ! G ! l",
["e9bdft"] = "v * 0.23597372167 < 100 ! e6 ! e9 ! m3",
["e9cuft"] = "v * 2.8316846592 < 100 ! e6 ! e9 ! m3",
["e9impgal"] = "v * 4.54609 < 1000 ! G ! T ! l",
["e9m3"] = "v < 28.316846592 ! G ! T ! cuft",
["e9U.S.gal"] = "v * 3.785411784 < 1000 ! G ! T ! l",
["e9USgal"] = "v * 3.785411784 < 1000 ! G ! T ! l",
["GL"] = "cuft",
["Gl"] = "cuft",
["kL"] = "cuft",
["kl"] = "cuft",
["km<sup>3</sup>"] = "cumi",
["mL"] = "impoz usoz",
["ml"] = "impoz usoz",
["Ml"] = "v < 28.316846592 ! e3 ! e6 ! cuft",
["ML"] = "v < 28.316846592 ! e3 ! e6 ! cuft",
["TL"] = "cumi",
["Tl"] = "cumi",
["μL"] = "cuin",
["μl"] = "cuin",
}
---------------------------------------------------------------------------
-- Do not change the data in this table because it is created by running --
-- a script that reads the wikitext from a wiki page (see note above). --
---------------------------------------------------------------------------
local link_exceptions = {
-- Prefixed units with a linked article different from that of the base unit.
-- Each key item is a prefixed symbol (not unitcode).
["mm<sup>2</sup>"] = "Square millimetre",
["cm<sup>2</sup>"] = "Square centimetre",
["dm<sup>2</sup>"] = "Square decimetre",
["km<sup>2</sup>"] = "Square kilometre",
["kJ"] = "Kilojoule",
["MJ"] = "Megajoule",
["GJ"] = "Gigajoule",
["TJ"] = "Terajoule",
["fm"] = "Femtometre",
["pm"] = "Picometre",
["nm"] = "Nanometre",
["μm"] = "Micrometre",
["mm"] = "Millimetre",
["cm"] = "Centimetre",
["dm"] = "Decimetre",
["dam"] = "Decametre",
["hm"] = "Hectometre",
["km"] = "Kilometre",
["Mm"] = "Megametre",
["Gm"] = "Gigametre",
["Tm"] = "Terametre",
["Pm"] = "Petametre",
["Em"] = "Exametre",
["Zm"] = "Zettametre",
["Ym"] = "Yottametre",
["μg"] = "Microgram",
["mg"] = "Milligram",
["kg"] = "Kilogram",
["Mg"] = "Tonne",
["yW"] = "Yoctowatt",
["zW"] = "Zeptowatt",
["aW"] = "Attowatt",
["fW"] = "Femtowatt",
["pW"] = "Picowatt",
["nW"] = "Nanowatt",
["μW"] = "Microwatt",
["mW"] = "Milliwatt",
["kW"] = "Kilowatt",
["MW"] = "Megawatt",
["GW"] = "Gigawatt",
["TW"] = "Terawatt",
["PW"] = "Petawatt",
["EW"] = "Exawatt",
["ZW"] = "Zettawatt",
["YW"] = "Yottawatt",
["as"] = "Attosecond",
["fs"] = "Femtosecond",
["ps"] = "Picosecond",
["ns"] = "Nanosecond",
["μs"] = "Microsecond",
["ms"] = "Millisecond",
["ks"] = "Kilosecond",
["Ms"] = "Megasecond",
["Gs"] = "Gigasecond",
["Ts"] = "Terasecond",
["Ps"] = "Petasecond",
["Es"] = "Exasecond",
["Zs"] = "Zettasecond",
["Ys"] = "Yottasecond",
["mm<sup>3</sup>"] = "Cubic millimetre",
["cm<sup>3</sup>"] = "Cubic centimetre",
["dm<sup>3</sup>"] = "Cubic decimetre",
["dam<sup>3</sup>"] = "Cubic decametre",
["km<sup>3</sup>"] = "Cubic kilometre",
["μL"] = "Microlitre",
["μl"] = "Microlitre",
["mL"] = "Millilitre",
["ml"] = "Millilitre",
["cL"] = "Centilitre",
["cl"] = "Centilitre",
["dL"] = "Decilitre",
["dl"] = "Decilitre",
["daL"] = "Decalitre",
["dal"] = "Decalitre",
["hL"] = "Hectolitre",
["hl"] = "Hectolitre",
["kL"] = "Kilolitre",
["kl"] = "Kilolitre",
["ML"] = "Megalitre",
["Ml"] = "Megalitre",
["GL"] = "Gigalitre",
["Gl"] = "Gigalitre",
["TL"] = "Teralitre",
["Tl"] = "Teralitre",
["PL"] = "Petalitre",
["Pl"] = "Petalitre",
}
---------------------------------------------------------------------------
-- Do not change the data in this table because it is created by running --
-- a script that reads the wikitext from a wiki page (see note above). --
---------------------------------------------------------------------------
local per_unit_fixups = {
-- Automatically created per units of form "x/y" may have their unit type
-- changed, for example, "length/time" is changed to "speed".
-- Other adjustments can also be specified.
["/area"] = "per unit area",
["/volume"] = "per unit volume",
["area/area"] = "area per unit area",
["energy/length"] = "energy per unit length",
["energy/mass"] = "energy per unit mass",
["energy/time"] = { utype = "power", link = "Power (physics)" },
["energy/volume"] = "energy per unit volume",
["force/area"] = { utype = "pressure", link = "Pressure" },
["length/length"] = { utype = "gradient", link = "Grade (slope)" },
["length/time"] = { utype = "speed", link = "Speed" },
["length/time/time"] = { utype = "acceleration", link = "Acceleration" },
["mass/area"] = { utype = "pressure", multiplier = 9.80665 },
["mass/length"] = "linear density",
["mass/mass"] = "concentration",
["mass/power"] = "mass per unit power",
["mass/time"] = "mass per unit time",
["mass/volume"] = { utype = "density", link = "Density" },
["power/mass"] = "power per unit mass",
["power/volume"] = { link = "Power density" },
["pressure/length"] = "fracture gradient",
["speed/time"] = { utype = "acceleration", link = "Acceleration" },
["volume/area"] = "volume per unit area",
["volume/length"] = "volume per unit length",
["volume/time"] = "flow",
}
return {
all_units = all_units,
default_exceptions = default_exceptions,
link_exceptions = link_exceptions,
per_unit_fixups = per_unit_fixups,
}
8d4f7e3d03f55a7683bae4e0b800b77ac91d44a2
Module:Convert
828
190
385
2023-05-10T03:20:21Z
[[w>Johnuniq
0
update from sandbox per [[Template talk:Convert#Module version 29]]
Scribunto
text/plain
-- Convert a value from one unit of measurement to another.
-- Example: {{convert|123|lb|kg}} --> 123 pounds (56 kg)
-- See [[:en:Template:Convert/Transwiki guide]] if copying to another wiki.
local MINUS = '−' -- Unicode U+2212 MINUS SIGN (UTF-8: e2 88 92)
local abs = math.abs
local floor = math.floor
local format = string.format
local log10 = math.log10
local ustring = mw.ustring
local ulen = ustring.len
local usub = ustring.sub
-- Configuration options to keep magic values in one location.
-- Conversion data and message text are defined in separate modules.
local config, maxsigfig
local numdot -- must be '.' or ',' or a character which works in a regex
local numsep, numsep_remove, numsep_remove2
local data_code, all_units
local text_code
local varname -- can be a code to use variable names that depend on value
local from_en_table -- to translate an output string of en digits to local language
local to_en_table -- to translate an input string of digits in local language to en
-- Use translation_table in convert/text to change the following.
local en_default -- true uses lang=en unless convert has lang=local or local digits
local group_method = 3 -- code for how many digits are in a group
local per_word = 'per' -- for units like "liters per kilometer"
local plural_suffix = 's' -- only other useful value is probably '' to disable plural unit names
local omitsep -- true to omit separator before local symbol/name
-- All units should be defined in the data module. However, to cater for quick changes
-- and experiments, any unknown unit is looked up in an extra data module, if it exists.
-- That module would be transcluded in only a small number of pages, so there should be
-- little server overhead from making changes, and changes should propagate quickly.
local extra_module -- name of module with extra units
local extra_units -- nil or table of extra units from extra_module
-- Some options in the invoking template can set variables used later in the module.
local currency_text -- for a user-defined currency symbol: {{convert|12|$/ha|$=€}} (euro replaces dollar)
local function from_en(text)
-- Input is a string representing a number in en digits with '.' decimal mark,
-- without digit grouping (which is done just after calling this).
-- Return the translation of the string with numdot and digits in local language.
if numdot ~= '.' then
text = text:gsub('%.', numdot)
end
if from_en_table then
text = text:gsub('%d', from_en_table)
end
return text
end
local function to_en(text)
-- Input is a string representing a number in the local language with
-- an optional numdot decimal mark and numsep digit grouping.
-- Return the translation of the string with '.' mark and en digits,
-- and no separators (they have to be removed here to handle cases like
-- numsep = '.' and numdot = ',' with input "1.234.567,8").
if to_en_table then
text = ustring.gsub(text, '%d', to_en_table)
end
if numsep_remove then
text = text:gsub(numsep_remove, '')
end
if numsep_remove2 then
text = text:gsub(numsep_remove2, '')
end
if numdot ~= '.' then
text = text:gsub(numdot, '.')
end
return text
end
local function decimal_mark(text)
-- Return ',' if text probably is using comma for decimal mark, or has no decimal mark.
-- Return '.' if text probably is using dot for decimal mark.
-- Otherwise return nothing (decimal mark not known).
if not text:find('[.,]') then return ',' end
text = text:gsub('^%-', ''):gsub('%+%d+/%d+$', ''):gsub('[Ee]%-?%d+$', '')
local decimal =
text:match('^0?([.,])%d+$') or
text:match('%d([.,])%d?%d?$') or
text:match('%d([.,])%d%d%d%d+$')
if decimal then return decimal end
if text:match('%.%d+%.') then return ',' end
if text:match('%,%d+,') then return '.' end
end
local add_warning, with_separator -- forward declarations
local function to_en_with_check(text, parms)
-- Version of to_en() for a wiki using numdot = ',' and numsep = '.' to check
-- text (an input number as a string) which might have been copied from enwiki.
-- For example, in '1.234' the '.' could be a decimal mark or a group separator.
-- From viwiki.
if to_en_table then
text = ustring.gsub(text, '%d', to_en_table)
end
if decimal_mark(text) == '.' then
local original = text
text = text:gsub(',', '') -- for example, interpret "1,234.5" as an enwiki value
if parms then
add_warning(parms, 0, 'cvt_enwiki_num', original, with_separator({}, text))
end
else
if numsep_remove then
text = text:gsub(numsep_remove, '')
end
if numsep_remove2 then
text = text:gsub(numsep_remove2, '')
end
if numdot ~= '.' then
text = text:gsub(numdot, '.')
end
end
return text
end
local function omit_separator(id)
-- Return true if there should be no separator before id (a unit symbol or name).
-- For zhwiki, there should be no separator if id uses local characters.
-- The following kludge should be a sufficient test.
if omitsep then
if id:sub(1, 2) == '-{' then -- for "-{...}-" content language variant
return true
end
if id:byte() > 127 then
local first = usub(id, 1, 1)
if first ~= 'Å' and first ~= '°' and first ~= 'µ' then
return true
end
end
end
return id:sub(1, 1) == '/' -- no separator before units like "/ha"
end
local spell_module -- name of module that can spell numbers
local speller -- function from that module to handle spelling (set if needed)
local wikidata_module, wikidata_data_module -- names of Wikidata modules
local wikidata_code, wikidata_data -- exported tables from those modules (set if needed)
local function set_config(args)
-- Set configuration options from template #invoke or defaults.
config = args
maxsigfig = config.maxsigfig or 14 -- maximum number of significant figures
local data_module, text_module
local sandbox = config.sandbox and ('/' .. config.sandbox) or ''
data_module = "Module:Convert/data" .. sandbox
text_module = "Module:Convert/text" .. sandbox
extra_module = "Module:Convert/extra" .. sandbox
wikidata_module = "Module:Convert/wikidata" .. sandbox
wikidata_data_module = "Module:Convert/wikidata/data" .. sandbox
spell_module = "Module:ConvertNumeric"
data_code = mw.loadData(data_module)
text_code = mw.loadData(text_module)
all_units = data_code.all_units
local translation = text_code.translation_table
if translation then
numdot = translation.numdot
numsep = translation.numsep
if numdot == ',' and numsep == '.' then
if text_code.all_messages.cvt_enwiki_num then
to_en = to_en_with_check
end
end
if translation.group then
group_method = translation.group
end
if translation.per_word then
per_word = translation.per_word
end
if translation.plural_suffix then
plural_suffix = translation.plural_suffix
end
varname = translation.varname
from_en_table = translation.from_en
local use_workaround = true
if use_workaround then
-- 2013-07-05 workaround bug by making a copy of the required table.
-- mw.ustring.gsub fails with a table (to_en_table) as the replacement,
-- if the table is accessed via mw.loadData.
local source = translation.to_en
if source then
to_en_table = {}
for k, v in pairs(source) do
to_en_table[k] = v
end
end
else
to_en_table = translation.to_en
end
if translation.lang == 'en default' then
en_default = true -- for hiwiki
end
omitsep = translation.omitsep -- for zhwiki
end
numdot = config.numdot or numdot or '.' -- decimal mark before fractional digits
numsep = config.numsep or numsep or ',' -- group separator for numbers
-- numsep should be ',' or '.' or '' or ' ' or a Unicode character.
-- numsep_remove must work in a regex to identify separators to be removed.
if numsep ~= '' then
numsep_remove = (numsep == '.') and '%.' or numsep
end
if numsep ~= ',' and numdot ~= ',' then
numsep_remove2 = ',' -- so numbers copied from enwiki will work
end
end
local function collection()
-- Return a table to hold items.
return {
n = 0,
add = function (self, item)
self.n = self.n + 1
self[self.n] = item
end,
}
end
local function divide(numerator, denominator)
-- Return integers quotient, remainder resulting from dividing the two
-- given numbers, which should be unsigned integers.
local quotient, remainder = floor(numerator / denominator), numerator % denominator
if not (0 <= remainder and remainder < denominator) then
-- Floating point limits may need this, as in {{convert|160.02|Ym|ydftin}}.
remainder = 0
end
return quotient, remainder
end
local function split(text, delimiter)
-- Return a numbered table with fields from splitting text.
-- The delimiter is used in a regex without escaping (for example, '.' would fail).
-- Each field has any leading/trailing whitespace removed.
local t = {}
text = text .. delimiter -- to get last item
for item in text:gmatch('%s*(.-)%s*' .. delimiter) do
table.insert(t, item)
end
return t
end
local function strip(text)
-- If text is a string, return its content with no leading/trailing
-- whitespace. Otherwise return nil (a nil argument gives a nil result).
if type(text) == 'string' then
return text:match("^%s*(.-)%s*$")
end
end
local function table_len(t)
-- Return length (<100) of a numbered table to replace #t which is
-- documented to not work if t is accessed via mw.loadData().
for i = 1, 100 do
if t[i] == nil then
return i - 1
end
end
end
local function wanted_category(catkey, catsort, want_warning)
-- Return message category if it is wanted in current namespace,
-- otherwise return ''.
local cat
local title = mw.title.getCurrentTitle()
if title then
local nsdefault = '0' -- default namespace: '0' = article; '0,10' = article and template
local namespace = title.namespace
for _, v in ipairs(split(config.nscat or nsdefault, ',')) do
if namespace == tonumber(v) then
cat = text_code.all_categories[want_warning and 'warning' or catkey]
if catsort and catsort ~= '' and cat:sub(-2) == ']]' then
cat = cat:sub(1, -3) .. '|' .. mw.text.nowiki(usub(catsort, 1, 20)) .. ']]'
end
break
end
end
end
return cat or ''
end
local function message(parms, mcode, is_warning)
-- Return wikitext for an error message, including category if specified
-- for the message type.
-- mcode = numbered table specifying the message:
-- mcode[1] = 'cvt_xxx' (string used as a key to get message info)
-- mcode[2] = 'parm1' (string to replace '$1' if any in message)
-- mcode[3] = 'parm2' (string to replace '$2' if any in message)
-- mcode[4] = 'parm3' (string to replace '$3' if any in message)
local msg
if type(mcode) == 'table' then
if mcode[1] == 'cvt_no_output' then
-- Some errors should cause convert to output an empty string,
-- for example, for an optional field in an infobox.
return ''
end
msg = text_code.all_messages[mcode[1]]
end
parms.have_problem = true
local function subparm(fmt, ...)
local rep = {}
for i, v in ipairs({...}) do
rep['$' .. i] = v
end
return (fmt:gsub('$%d+', rep))
end
if msg then
local parts = {}
local regex, replace = msg.regex, msg.replace
for i = 1, 3 do
local limit = 40
local s = mcode[i + 1]
if s then
if regex and replace then
s = s:gsub(regex, replace)
limit = nil -- allow long "should be" messages
end
-- Escape user input so it does not break the message.
-- To avoid tags (like {{convert|1<math>23</math>|m}}) breaking
-- the mouseover title, any strip marker starting with char(127) is
-- replaced with '...' (text not needing i18n).
local append
local pos = s:find(string.char(127), 1, true)
if pos then
append = '...'
s = s:sub(1, pos - 1)
end
if limit and ulen(s) > limit then
s = usub(s, 1, limit)
append = '...'
end
s = mw.text.nowiki(s) .. (append or '')
else
s = '?'
end
parts['$' .. i] = s
end
local function ispreview()
-- Return true if a prominent message should be shown.
if parms.test == 'preview' or parms.test == 'nopreview' then
-- For testing, can preview a real message or simulate a preview
-- when running automated tests.
return parms.test == 'preview'
end
local success, revid = pcall(function ()
return (parms.frame):preprocess('{{REVISIONID}}') end)
return success and (revid == '')
end
local want_warning = is_warning and
not config.warnings and -- show unobtrusive warnings if config.warnings not configured
not msg.nowarn -- but use msg settings, not standard warning, if specified
local title = string.gsub(msg[1] or 'Missing message', '$%d+', parts)
local text = want_warning and '*' or msg[2] or 'Missing message'
local cat = wanted_category(msg[3], mcode[2], want_warning)
local anchor = msg[4] or ''
local fmtkey = ispreview() and 'cvt_format_preview' or
(want_warning and 'cvt_format2' or msg.format or 'cvt_format')
local fmt = text_code.all_messages[fmtkey] or 'convert: bug'
return subparm(fmt, title:gsub('"', '"'), text, cat, anchor)
end
return 'Convert internal error: unknown message'
end
function add_warning(parms, level, key, text1, text2) -- for forward declaration above
-- If enabled, add a warning that will be displayed after the convert result.
-- A higher level is more verbose: more kinds of warnings are displayed.
-- To reduce output noise, only the first warning is displayed.
if level <= (tonumber(config.warnings) or 1) then
if parms.warnings == nil then
parms.warnings = message(parms, { key, text1, text2 }, true)
end
end
end
local function spell_number(parms, inout, number, numerator, denominator)
-- Return result of spelling (number, numerator, denominator), or
-- return nil if spelling is not available or not supported for given text.
-- Examples (each value must be a string or nil):
-- number numerator denominator output
-- ------ --------- ----------- -------------------
-- "1.23" nil nil one point two three
-- "1" "2" "3" one and two thirds
-- nil "2" "3" two thirds
if not speller then
local function get_speller(module)
return require(module).spell_number
end
local success
success, speller = pcall(get_speller, spell_module)
if not success or type(speller) ~= 'function' then
add_warning(parms, 1, 'cvt_no_spell', 'spell')
return nil
end
end
local case
if parms.spell_upper == inout then
case = true
parms.spell_upper = nil -- only uppercase first word in a multiple unit
end
local sp = not parms.opt_sp_us
local adj = parms.opt_adjectival
return speller(number, numerator, denominator, case, sp, adj)
end
------------------------------------------------------------------------
-- BEGIN: Code required only for built-in units.
-- LATER: If need much more code, move to another module to simplify this module.
local function speed_of_sound(altitude)
-- This is for the Mach built-in unit of speed.
-- Return speed of sound in metres per second at given altitude in feet.
-- If no altitude given, use default (zero altitude = sea level).
-- Table gives speed of sound in miles per hour at various altitudes:
-- altitude = -17,499 to 402,499 feet
-- mach_table[a + 4] = s where
-- a = (altitude / 5000) rounded to nearest integer (-3 to 80)
-- s = speed of sound (mph) at that altitude
-- LATER: Should calculate result from an interpolation between the next
-- lower and higher altitudes in table, rather than rounding to nearest.
-- From: http://www.aerospaceweb.org/question/atmosphere/q0112.shtml
local mach_table = { -- a =
799.5, 787.0, 774.2, 761.207051, -- -3 to 0
748.0, 734.6, 721.0, 707.0, 692.8, 678.3, 663.5, 660.1, 660.1, 660.1, -- 1 to 10
660.1, 660.1, 660.1, 662.0, 664.3, 666.5, 668.9, 671.1, 673.4, 675.6, -- 11 to 20
677.9, 683.7, 689.9, 696.0, 702.1, 708.1, 714.0, 719.9, 725.8, 731.6, -- 21 to 30
737.3, 737.7, 737.7, 736.2, 730.5, 724.6, 718.8, 712.9, 707.0, 701.0, -- 31 to 40
695.0, 688.9, 682.8, 676.6, 670.4, 664.1, 657.8, 652.9, 648.3, 643.7, -- 41 to 50
639.1, 634.4, 629.6, 624.8, 620.0, 615.2, 613.2, 613.2, 613.2, 613.5, -- 51 to 60
614.4, 615.3, 616.7, 619.8, 623.4, 629.7, 635.0, 641.1, 650.6, 660.0, -- 61 to 70
672.5, 674.3, 676.1, 677.9, 679.7, 681.5, 683.3, 685.1, 686.8, 688.6, -- 71 to 80
}
altitude = altitude or 0
local a = (altitude < 0) and -altitude or altitude
a = floor(a / 5000 + 0.5)
if altitude < 0 then
a = -a
end
if a < -3 then
a = -3
elseif a > 80 then
a = 80
end
return mach_table[a + 4] * 0.44704 -- mph converted to m/s
end
-- END: Code required only for built-in units.
------------------------------------------------------------------------
local function add_style(parms, class)
-- Add selected template style to parms if not already present.
parms.templatestyles = parms.templatestyles or {}
if not parms.templatestyles[class] then
parms.templatestyles[class] = parms.frame:extensionTag({
name = 'templatestyles', args = { src = text_code.titles[class] }
})
end
end
local function get_styles(parms)
-- Return string of required template styles, empty if none.
if parms.templatestyles then
local t = {}
for _, v in pairs(parms.templatestyles) do
table.insert(t, v)
end
return table.concat(t)
end
return ''
end
local function get_range(word)
-- Return a range (string or table) corresponding to word (like "to"),
-- or return nil if not a range word.
local ranges = text_code.ranges
return ranges.types[word] or ranges.types[ranges.aliases[word]]
end
local function check_mismatch(unit1, unit2)
-- If unit1 cannot be converted to unit2, return an error message table.
-- This allows conversion between units of the same type, and between
-- Nm (normally torque) and ftlb (energy), as in gun-related articles.
-- This works because Nm is the base unit (scale = 1) for both the
-- primary type (torque), and the alternate type (energy, where Nm = J).
-- A match occurs if the primary types are the same, or if unit1 matches
-- the alternate type of unit2, and vice versa. That provides a whitelist
-- of which conversions are permitted between normally incompatible types.
if unit1.utype == unit2.utype or
(unit1.utype == unit2.alttype and unit1.alttype == unit2.utype) then
return nil
end
return { 'cvt_mismatch', unit1.utype, unit2.utype }
end
local function override_from(out_table, in_table, fields)
-- Copy the specified fields from in_table to out_table, but do not
-- copy nil fields (keep any corresponding field in out_table).
for _, field in ipairs(fields) do
if in_table[field] then
out_table[field] = in_table[field]
end
end
end
local function shallow_copy(t)
-- Return a shallow copy of table t.
-- Do not need the features and overhead of the Scribunto mw.clone().
local result = {}
for k, v in pairs(t) do
result[k] = v
end
return result
end
local unit_mt = {
-- Metatable to get missing values for a unit that does not accept SI prefixes.
-- Warning: The boolean value 'false' is returned for any missing field
-- so __index is not called twice for the same field in a given unit.
__index = function (self, key)
local value
if key == 'name1' or key == 'sym_us' then
value = self.symbol
elseif key == 'name2' then
value = self.name1 .. plural_suffix
elseif key == 'name1_us' then
value = self.name1
if not rawget(self, 'name2_us') then
-- If name1_us is 'foot', do not make name2_us by appending plural_suffix.
self.name2_us = self.name2
end
elseif key == 'name2_us' then
local raw1_us = rawget(self, 'name1_us')
if raw1_us then
value = raw1_us .. plural_suffix
else
value = self.name2
end
elseif key == 'link' then
value = self.name1
else
value = false
end
rawset(self, key, value)
return value
end
}
local function prefixed_name(unit, name, index)
-- Return unit name with SI prefix inserted at correct position.
-- index = 1 (name1), 2 (name2), 3 (name1_us), 4 (name2_us).
-- The position is a byte (not character) index, so use Lua's sub().
local pos = rawget(unit, 'prefix_position')
if type(pos) == 'string' then
pos = tonumber(split(pos, ',')[index])
end
if pos then
return name:sub(1, pos - 1) .. unit.si_name .. name:sub(pos)
end
return unit.si_name .. name
end
local unit_prefixed_mt = {
-- Metatable to get missing values for a unit that accepts SI prefixes.
-- Before use, fields si_name, si_prefix must be defined.
-- The unit must define _symbol, _name1 and
-- may define _sym_us, _name1_us, _name2_us
-- (_sym_us, _name2_us may be defined for a language using sp=us
-- to refer to a variant unrelated to U.S. units).
__index = function (self, key)
local value
if key == 'symbol' then
value = self.si_prefix .. self._symbol
if value == 'l' then value = 'L' end
elseif key == 'sym_us' then
value = rawget(self, '_sym_us')
if value then
value = self.si_prefix .. value
else
value = self.symbol
end
elseif key == 'name1' then
value = prefixed_name(self, self._name1, 1)
elseif key == 'name2' then
value = rawget(self, '_name2')
if value then
value = prefixed_name(self, value, 2)
else
value = self.name1 .. plural_suffix
end
elseif key == 'name1_us' then
value = rawget(self, '_name1_us')
if value then
value = prefixed_name(self, value, 3)
else
value = self.name1
end
elseif key == 'name2_us' then
value = rawget(self, '_name2_us')
if value then
value = prefixed_name(self, value, 4)
elseif rawget(self, '_name1_us') then
value = self.name1_us .. plural_suffix
else
value = self.name2
end
elseif key == 'link' then
value = self.name1
else
value = false
end
rawset(self, key, value)
return value
end
}
local unit_per_mt = {
-- Metatable to get values for a per unit of form "x/y".
-- This is never called to determine a unit name or link because per units
-- are handled as a special case.
-- Similarly, the default output is handled elsewhere, and for a symbol
-- this is only called from get_default() for default_exceptions.
__index = function (self, key)
local value
if key == 'symbol' then
local per = self.per
local unit1, unit2 = per[1], per[2]
if unit1 then
value = unit1[key] .. '/' .. unit2[key]
else
value = '/' .. unit2[key]
end
elseif key == 'sym_us' then
value = self.symbol
elseif key == 'scale' then
local per = self.per
local unit1, unit2 = per[1], per[2]
value = (unit1 and unit1.scale or 1) * self.scalemultiplier / unit2.scale
else
value = false
end
rawset(self, key, value)
return value
end
}
local function make_per(unitcode, unit_table, ulookup)
-- Return true, t where t is a per unit with unit codes expanded to unit tables,
-- or return false, t where t is an error message table.
local result = {
unitcode = unitcode,
utype = unit_table.utype,
per = {}
}
override_from(result, unit_table, { 'invert', 'iscomplex', 'default', 'link', 'symbol', 'symlink' })
result.symbol_raw = (result.symbol or false) -- to distinguish between a defined exception and a metatable calculation
local prefix
for i, v in ipairs(unit_table.per) do
if i == 1 and v == '' then
-- First unit symbol can be empty; that gives a nil first unit table.
elseif i == 1 and text_code.currency[v] then
prefix = currency_text or v
else
local success, t = ulookup(v)
if not success then return false, t end
result.per[i] = t
end
end
local multiplier = unit_table.multiplier
if not result.utype then
-- Creating an automatic per unit.
local unit1 = result.per[1]
local utype = (unit1 and unit1.utype or prefix or '') .. '/' .. result.per[2].utype
local t = data_code.per_unit_fixups[utype]
if t then
if type(t) == 'table' then
utype = t.utype or utype
result.link = result.link or t.link
multiplier = multiplier or t.multiplier
else
utype = t
end
end
result.utype = utype
end
result.scalemultiplier = multiplier or 1
result.vprefix = prefix or false -- set to non-nil to avoid calling __index
return true, setmetatable(result, unit_per_mt)
end
local function lookup(parms, unitcode, what, utable, fails, depth)
-- Return true, t where t is a copy of the unit's converter table,
-- or return false, t where t is an error message table.
-- Parameter 'what' determines whether combination units are accepted:
-- 'no_combination' : single unit only
-- 'any_combination' : single unit or combination or output multiple
-- 'only_multiple' : single unit or output multiple only
-- Parameter unitcode is a symbol (like 'g'), with an optional SI prefix (like 'kg').
-- If, for example, 'kg' is in this table, that entry is used;
-- otherwise the prefix ('k') is applied to the base unit ('g').
-- If unitcode is a known combination code (and if allowed by what),
-- a table of output multiple unit tables is included in the result.
-- For compatibility with the old template, an underscore in a unitcode is
-- replaced with a space so usage like {{convert|350|board_feet}} works.
-- Wikignomes may also put two spaces or " " in combinations, so
-- replace underscore, " ", and multiple spaces with a single space.
utable = utable or parms.unittable or all_units
fails = fails or {}
depth = depth and depth + 1 or 1
if depth > 9 then
-- There are ways to mistakenly define units which result in infinite
-- recursion when lookup() is called. That gives a long delay and very
-- confusing error messages, so the depth parameter is used as a guard.
return false, { 'cvt_lookup', unitcode }
end
if unitcode == nil or unitcode == '' then
return false, { 'cvt_no_unit' }
end
unitcode = unitcode:gsub('_', ' '):gsub(' ', ' '):gsub(' +', ' ')
local function call_make_per(t)
return make_per(unitcode, t,
function (ucode) return lookup(parms, ucode, 'no_combination', utable, fails, depth) end
)
end
local t = utable[unitcode]
if t then
if t.shouldbe then
return false, { 'cvt_should_be', t.shouldbe }
end
if t.sp_us then
parms.opt_sp_us = true
end
local target = t.target -- nil, or unitcode is an alias for this target
if target then
local success, result = lookup(parms, target, what, utable, fails, depth)
if not success then return false, result end
override_from(result, t, { 'customary', 'default', 'link', 'symbol', 'symlink' })
local multiplier = t.multiplier
if multiplier then
result.multiplier = tostring(multiplier)
result.scale = result.scale * multiplier
end
return true, result
end
if t.per then
return call_make_per(t)
end
local combo = t.combination -- nil or a table of unitcodes
if combo then
local multiple = t.multiple
if what == 'no_combination' or (what == 'only_multiple' and not multiple) then
return false, { 'cvt_bad_unit', unitcode }
end
-- Recursively create a combination table containing the
-- converter table of each unitcode.
local result = { utype = t.utype, multiple = multiple, combination = {} }
local cvt = result.combination
for i, v in ipairs(combo) do
local success, t = lookup(parms, v, multiple and 'no_combination' or 'only_multiple', utable, fails, depth)
if not success then return false, t end
cvt[i] = t
end
return true, result
end
local result = shallow_copy(t)
result.unitcode = unitcode
if result.prefixes then
result.si_name = ''
result.si_prefix = ''
return true, setmetatable(result, unit_prefixed_mt)
end
return true, setmetatable(result, unit_mt)
end
local SIprefixes = text_code.SIprefixes
for plen = SIprefixes[1] or 2, 1, -1 do
-- Look for an SI prefix; should never occur with an alias.
-- Check for longer prefix first ('dam' is decametre).
-- SIprefixes[1] = prefix maximum #characters (as seen by mw.ustring.sub).
local prefix = usub(unitcode, 1, plen)
local si = SIprefixes[prefix]
if si then
local t = utable[usub(unitcode, plen+1)]
if t and t.prefixes then
local result = shallow_copy(t)
result.unitcode = unitcode
result.si_name = parms.opt_sp_us and si.name_us or si.name
result.si_prefix = si.prefix or prefix
result.scale = t.scale * 10 ^ (si.exponent * t.prefixes)
return true, setmetatable(result, unit_prefixed_mt)
end
end
end
-- Accept user-defined combinations like "acre+m2+ha" or "acre m2 ha" for output.
-- If '+' is used, each unit code can include a space, and any error is fatal.
-- If ' ' is used and if each space-separated word is a unit code, it is a combo,
-- but errors are not fatal so the unit code can be looked up as an extra unit.
local err_is_fatal
local combo = collection()
if unitcode:find('+', 1, true) then
err_is_fatal = true
for item in (unitcode .. '+'):gmatch('%s*(.-)%s*%+') do
if item ~= '' then
combo:add(item)
end
end
elseif unitcode:find('%s') then
for item in unitcode:gmatch('%S+') do
combo:add(item)
end
end
if combo.n > 1 then
local function lookup_combo()
if what == 'no_combination' or what == 'only_multiple' then
return false, { 'cvt_bad_unit', unitcode }
end
local result = { combination = {} }
local cvt = result.combination
for i, v in ipairs(combo) do
local success, t = lookup(parms, v, 'only_multiple', utable, fails, depth)
if not success then return false, t end
if i == 1 then
result.utype = t.utype
else
local mismatch = check_mismatch(result, t)
if mismatch then
return false, mismatch
end
end
cvt[i] = t
end
return true, result
end
local success, result = lookup_combo()
if success or err_is_fatal then
return success, result
end
end
-- Accept any unit with an engineering notation prefix like "e6cuft"
-- (million cubic feet), but not chained prefixes like "e3e6cuft",
-- and not if the unit is a combination or multiple,
-- and not if the unit has an offset or is a built-in.
-- Only en digits are accepted.
local exponent, baseunit = unitcode:match('^e(%d+)(.*)')
if exponent then
local engscale = text_code.eng_scales[exponent]
if engscale then
local success, result = lookup(parms, baseunit, 'no_combination', utable, fails, depth)
if success and not (result.offset or result.builtin or result.engscale) then
result.unitcode = unitcode -- 'e6cuft' not 'cuft'
result.defkey = unitcode -- key to lookup default exception
result.engscale = engscale
result.scale = result.scale * 10 ^ tonumber(exponent)
return true, result
end
end
end
-- Look for x/y; split on right-most slash to get scale correct (x/y/z is x/y per z).
local top, bottom = unitcode:match('^(.-)/([^/]+)$')
if top and not unitcode:find('e%d') then
-- If valid, create an automatic per unit for an "x/y" unit code.
-- The unitcode must not include extraneous spaces.
-- Engineering notation (apart from at start and which has been stripped before here),
-- is not supported so do not make a per unit if find text like 'e3' in unitcode.
local success, result = call_make_per({ per = {top, bottom} })
if success then
return true, result
end
end
if not parms.opt_ignore_error and not get_range(unitcode) then
-- Want the "what links here" list for the extra_module to show only cases
-- where an extra unit is used, so do not require it if invoked from {{val}}
-- or if looking up a range word which cannot be a unit.
if not extra_units then
local success, extra = pcall(function () return require(extra_module).extra_units end)
if success and type(extra) == 'table' then
extra_units = extra
end
end
if extra_units then
-- A unit in one data table might refer to a unit in the other table, so
-- switch between them, relying on fails or depth to terminate loops.
if not fails[unitcode] then
fails[unitcode] = true
local other = (utable == all_units) and extra_units or all_units
local success, result = lookup(parms, unitcode, what, other, fails, depth)
if success then
return true, result
end
end
end
end
if to_en_table then
-- At fawiki it is common to translate all digits so a unit like "km2" becomes "km۲".
local en_code = ustring.gsub(unitcode, '%d', to_en_table)
if en_code ~= unitcode then
return lookup(parms, en_code, what, utable, fails, depth)
end
end
return false, { 'cvt_unknown', unitcode }
end
local function valid_number(num)
-- Return true if num is a valid number.
-- In Scribunto (different from some standard Lua), when expressed as a string,
-- overflow or other problems are indicated with text like "inf" or "nan"
-- which are regarded as invalid here (each contains "n").
if type(num) == 'number' and tostring(num):find('n', 1, true) == nil then
return true
end
end
local function hyphenated(name, parts)
-- Return a hyphenated form of given name (for adjectival usage).
-- The name may be linked and the target of the link must not be changed.
-- Hypothetical examples:
-- [[long ton|ton]] → [[long ton|ton]] (no change)
-- [[tonne|long ton]] → [[tonne|long-ton]]
-- [[metric ton|long ton]] → [[metric ton|long-ton]]
-- [[long ton]] → [[long ton|long-ton]]
-- Input can also have multiple links in a single name like:
-- [[United States customary units|U.S.]] [[US gallon|gallon]]
-- [[mile]]s per [[United States customary units|U.S.]] [[quart]]
-- [[long ton]]s per [[short ton]]
-- Assume that links cannot be nested (never like "[[abc[[def]]ghi]]").
-- This uses a simple and efficient procedure that works for most cases.
-- Some units (if used) would require more, and can later think about
-- adding a method to handle exceptions.
-- The procedure is to replace each space with a hyphen, but
-- not a space after ')' [for "(pre-1954 US) nautical mile"], and
-- not spaces immediately before '(' or in '(...)' [for cases like
-- "British thermal unit (ISO)" and "Calorie (International Steam Table)"].
if name:find(' ', 1, true) then
if parts then
local pos
if name:sub(1, 1) == '(' then
pos = name:find(')', 1, true)
if pos then
return name:sub(1, pos+1) .. name:sub(pos+2):gsub(' ', '-')
end
elseif name:sub(-1) == ')' then
pos = name:find('(', 1, true)
if pos then
return name:sub(1, pos-2):gsub(' ', '-') .. name:sub(pos-1)
end
end
return name:gsub(' ', '-')
end
parts = collection()
for before, item, after in name:gmatch('([^[]*)(%[%[[^[]*%]%])([^[]*)') do
if item:find(' ', 1, true) then
local prefix
local plen = item:find('|', 1, true)
if plen then
prefix = item:sub(1, plen)
item = item:sub(plen + 1, -3)
else
prefix = item:sub(1, -3) .. '|'
item = item:sub(3, -3)
end
item = prefix .. hyphenated(item, parts) .. ']]'
end
parts:add(before:gsub(' ', '-') .. item .. after:gsub(' ', '-'))
end
if parts.n == 0 then
-- No link like "[[...]]" was found in the original name.
parts:add(hyphenated(name, parts))
end
return table.concat(parts)
end
return name
end
local function hyphenated_maybe(parms, want_name, sep, id, inout)
-- Return s, f where
-- s = id, possibly modified
-- f = true if hyphenated
-- Possible modifications: hyphenate; prepend '-'; append mid text.
if id == nil or id == '' then
return ''
end
local mid = (inout == (parms.opt_flip and 'out' or 'in')) and parms.mid or ''
if want_name then
if parms.opt_adjectival then
return '-' .. hyphenated(id) .. mid, true
end
if parms.opt_add_s and id:sub(-1) ~= 's' then
id = id .. 's' -- for nowiki
end
end
return sep .. id .. mid
end
local function use_minus(text)
-- Return text with Unicode minus instead of '-', if present.
if text:sub(1, 1) == '-' then
return MINUS .. text:sub(2)
end
return text
end
local function digit_groups(parms, text, method)
-- Return a numbered table of groups of digits (left-to-right, in local language).
-- Parameter method is a number or nil:
-- 3 for 3-digit grouping (default), or
-- 2 for 3-then-2 grouping (only for digits before decimal mark).
local len_right
local len_left = text:find('.', 1, true)
if len_left then
len_right = #text - len_left
len_left = len_left - 1
else
len_left = #text
end
local twos = method == 2 and len_left > 5
local groups = collection()
local run = len_left
local n
if run < 4 or (run == 4 and parms.opt_comma5) then
if parms.opt_gaps then
n = run
else
n = #text
end
elseif twos then
n = run % 2 == 0 and 1 or 2
else
n = run % 3 == 0 and 3 or run % 3
end
while run > 0 do
groups:add(n)
run = run - n
n = (twos and run > 3) and 2 or 3
end
if len_right then
if groups.n == 0 then
groups:add(0)
end
if parms.opt_gaps and len_right > 3 then
local want4 = not parms.opt_gaps3 -- true gives no gap before trailing single digit
local isfirst = true
run = len_right
while run > 0 do
n = (want4 and run == 4) and 4 or (run > 3 and 3 or run)
if isfirst then
isfirst = false
groups[groups.n] = groups[groups.n] + 1 + n
else
groups:add(n)
end
run = run - n
end
else
groups[groups.n] = groups[groups.n] + 1 + len_right
end
end
local pos = 1
for i, length in ipairs(groups) do
groups[i] = from_en(text:sub(pos, pos + length - 1))
pos = pos + length
end
return groups
end
function with_separator(parms, text) -- for forward declaration above
-- Input text is a number in en digits with optional '.' decimal mark.
-- Return an equivalent, formatted for display:
-- with a custom decimal mark instead of '.', if wanted
-- with thousand separators inserted, if wanted
-- digits in local language
-- The given text is like '123' or '123.' or '12345.6789'.
-- The text has no sign (caller inserts that later, if necessary).
-- When using gaps, they are inserted before and after the decimal mark.
-- Separators are inserted only before the decimal mark.
-- A trailing dot (as in '123.') is removed because their use appears to
-- be accidental, and such a number should be shown as '123' or '123.0'.
-- It is useful for convert to suppress the dot so, for example, '4000.'
-- is a simple way of indicating that all the digits are significant.
if text:sub(-1) == '.' then
text = text:sub(1, -2)
end
if #text < 4 or parms.opt_nocomma or numsep == '' then
return from_en(text)
end
local groups = digit_groups(parms, text, group_method)
if parms.opt_gaps then
if groups.n <= 1 then
return groups[1] or ''
end
local nowrap = '<span style="white-space: nowrap">'
local gap = '<span style="margin-left: 0.25em">'
local close = '</span>'
return nowrap .. groups[1] .. gap .. table.concat(groups, close .. gap, 2, groups.n) .. close .. close
end
return table.concat(groups, numsep)
end
-- An input value like 1.23e12 is displayed using scientific notation (1.23×10¹²).
-- That also makes the output use scientific notation, except for small values.
-- In addition, very small or very large output values use scientific notation.
-- Use format(fmtpower, significand, '10', exponent) where each argument is a string.
local fmtpower = '%s<span style="margin:0 .15em 0 .25em">×</span>%s<sup>%s</sup>'
local function with_exponent(parms, show, exponent)
-- Return wikitext to display the implied value in scientific notation.
-- Input uses en digits; output uses digits in local language.
return format(fmtpower, with_separator(parms, show), from_en('10'), use_minus(from_en(tostring(exponent))))
end
local function make_sigfig(value, sigfig)
-- Return show, exponent that are equivalent to the result of
-- converting the number 'value' (where value >= 0) to a string,
-- rounded to 'sigfig' significant figures.
-- The returned items are:
-- show: a string of digits; no sign and no dot;
-- there is an implied dot before show.
-- exponent: a number (an integer) to shift the implied dot.
-- Resulting value = tonumber('.' .. show) * 10^exponent.
-- Examples:
-- make_sigfig(23.456, 3) returns '235', 2 (.235 * 10^2).
-- make_sigfig(0.0023456, 3) returns '235', -2 (.235 * 10^-2).
-- make_sigfig(0, 3) returns '000', 1 (.000 * 10^1).
if sigfig <= 0 then
sigfig = 1
elseif sigfig > maxsigfig then
sigfig = maxsigfig
end
if value == 0 then
return string.rep('0', sigfig), 1
end
local exp, fracpart = math.modf(log10(value))
if fracpart >= 0 then
fracpart = fracpart - 1
exp = exp + 1
end
local digits = format('%.0f', 10^(fracpart + sigfig))
if #digits > sigfig then
-- Overflow (for sigfig=3: like 0.9999 rounding to "1000"; need "100").
digits = digits:sub(1, sigfig)
exp = exp + 1
end
assert(#digits == sigfig, 'Bug: rounded number has wrong length')
return digits, exp
end
-- Fraction output format.
local fracfmt = {
{ -- Like {{frac}} (fraction slash).
'<span class="frac" role="math">{SIGN}<span class="num">{NUM}</span>⁄<span class="den">{DEN}</span></span>', -- 1/2
'<span class="frac" role="math">{SIGN}{WHOLE}<span class="sr-only">+</span><span class="num">{NUM}</span>⁄<span class="den">{DEN}</span></span>', -- 1+2/3
style = 'frac',
},
{ -- Like {{sfrac}} (stacked fraction, that is, horizontal bar).
'<span class="sfrac tion" role="math">{SIGN}<span class="num">{NUM}</span><span class="sr-only">/</span><span class="den">{DEN}</span></span>', -- 1//2
'<span class="sfrac" role="math">{SIGN}{WHOLE}<span class="sr-only">+</span><span class="tion"><span class="num">{NUM}</span><span class="sr-only">/</span><span class="den">{DEN}</span></span></span>', -- 1+2//3
style = 'sfrac',
},
}
local function format_fraction(parms, inout, negative, wholestr, numstr, denstr, do_spell, style)
-- Return wikitext for a fraction, possibly spelled.
-- Inputs use en digits and have no sign; output uses digits in local language.
local wikitext
if not style then
style = parms.opt_fraction_horizontal and 2 or 1
end
if wholestr == '' then
wholestr = nil
end
local substitute = {
SIGN = negative and MINUS or '',
WHOLE = wholestr and with_separator(parms, wholestr),
NUM = from_en(numstr),
DEN = from_en(denstr),
}
wikitext = fracfmt[style][wholestr and 2 or 1]:gsub('{(%u+)}', substitute)
if do_spell then
if negative then
if wholestr then
wholestr = '-' .. wholestr
else
numstr = '-' .. numstr
end
end
local s = spell_number(parms, inout, wholestr, numstr, denstr)
if s then
return s
end
end
add_style(parms, fracfmt[style].style)
return wikitext
end
local function format_number(parms, show, exponent, isnegative)
-- Parameter show is a string or a table containing strings.
-- Each string is a formatted number in en digits and optional '.' decimal mark.
-- A table represents a fraction: integer, numerator, denominator;
-- if a table is given, exponent must be nil.
-- Return t where t is a table with fields:
-- show = wikitext formatted to display implied value
-- (digits in local language)
-- is_scientific = true if show uses scientific notation
-- clean = unformatted show (possibly adjusted and with inserted '.')
-- (en digits)
-- sign = '' or MINUS
-- exponent = exponent (possibly adjusted)
-- The clean and exponent fields can be used to calculate the
-- rounded absolute value, if needed.
--
-- The value implied by the arguments is found from:
-- exponent is nil; and
-- show is a string of digits (no sign), with an optional dot;
-- show = '123.4' is value 123.4, '1234' is value 1234.0;
-- or:
-- exponent is an integer indicating where dot should be;
-- show is a string of digits (no sign and no dot);
-- there is an implied dot before show;
-- show does not start with '0';
-- show = '1234', exponent = 3 is value 0.1234*10^3 = 123.4.
--
-- The formatted result:
-- * Is for an output value and is spelled if wanted and possible.
-- * Includes a Unicode minus if isnegative and not spelled.
-- * Uses a custom decimal mark, if wanted.
-- * Has digits grouped where necessary, if wanted.
-- * Uses scientific notation if requested, or for very small or large values
-- (which forces result to not be spelled).
-- * Has no more than maxsigfig significant digits
-- (same as old template and {{#expr}}).
local xhi, xlo -- these control when scientific notation (exponent) is used
if parms.opt_scientific then
xhi, xlo = 4, 2 -- default for output if input uses e-notation
elseif parms.opt_scientific_always then
xhi, xlo = 0, 0 -- always use scientific notation (experimental)
else
xhi, xlo = 10, 4 -- default
end
local sign = isnegative and MINUS or ''
local maxlen = maxsigfig
local tfrac
if type(show) == 'table' then
tfrac = show
show = tfrac.wholestr
assert(exponent == nil, 'Bug: exponent given with fraction')
end
if not tfrac and not exponent then
local integer, dot, decimals = show:match('^(%d*)(%.?)(.*)')
if integer == '0' or integer == '' then
local zeros, figs = decimals:match('^(0*)([^0]?.*)')
if #figs == 0 then
if #zeros > maxlen then
show = '0.' .. zeros:sub(1, maxlen)
end
elseif #zeros >= xlo then
show = figs
exponent = -#zeros
elseif #figs > maxlen then
show = '0.' .. zeros .. figs:sub(1, maxlen)
end
elseif #integer >= xhi then
show = integer .. decimals
exponent = #integer
else
maxlen = maxlen + #dot
if #show > maxlen then
show = show:sub(1, maxlen)
end
end
end
if exponent then
local function zeros(n)
return string.rep('0', n)
end
if #show > maxlen then
show = show:sub(1, maxlen)
end
if exponent > xhi or exponent <= -xlo or (exponent == xhi and show ~= '1' .. zeros(xhi - 1)) then
-- When xhi, xlo = 10, 4 (the default), scientific notation is used if the
-- rounded value satisfies: value >= 1e9 or value < 1e-4 (1e9 = 0.1e10),
-- except if show is '1000000000' (1e9), for example:
-- {{convert|1000000000|m|m|sigfig=10}} → 1,000,000,000 metres (1,000,000,000 m)
local significand
if #show > 1 then
significand = show:sub(1, 1) .. '.' .. show:sub(2)
else
significand = show
end
return {
clean = '.' .. show,
exponent = exponent,
sign = sign,
show = sign .. with_exponent(parms, significand, exponent-1),
is_scientific = true,
}
end
if exponent >= #show then
show = show .. zeros(exponent - #show) -- result has no dot
elseif exponent <= 0 then
show = '0.' .. zeros(-exponent) .. show
else
show = show:sub(1, exponent) .. '.' .. show:sub(exponent+1)
end
end
local formatted_show
if tfrac then
show = tostring(tfrac.value) -- to set clean in returned table
formatted_show = format_fraction(parms, 'out', isnegative, tfrac.wholestr, tfrac.numstr, tfrac.denstr, parms.opt_spell_out)
else
if isnegative and show:match('^0.?0*$') then
sign = '' -- don't show minus if result is negative but rounds to zero
end
formatted_show = sign .. with_separator(parms, show)
if parms.opt_spell_out then
formatted_show = spell_number(parms, 'out', sign .. show) or formatted_show
end
end
return {
clean = show,
sign = sign,
show = formatted_show,
is_scientific = false, -- to avoid calling __index
}
end
local function extract_fraction(parms, text, negative)
-- If text represents a fraction, return
-- value, altvalue, show, denominator
-- where
-- value is a number (value of the fraction in argument text)
-- altvalue is an alternate interpretation of any fraction for the hands
-- unit where "12.1+3/4" means 12 hands 1.75 inches
-- show is a string (formatted text for display of an input value,
-- and is spelled if wanted and possible)
-- denominator is value of the denominator in the fraction
-- Otherwise, return nil.
-- Input uses en digits and '.' decimal mark (input has been translated).
-- Output uses digits in local language and local decimal mark, if any.
------------------------------------------------------------------------
-- Originally this function accepted x+y/z where x, y, z were any valid
-- numbers, possibly with a sign. For example '1.23e+2+1.2/2.4' = 123.5,
-- and '2-3/8' = 1.625. However, such usages were found to be errors or
-- misunderstandings, so since August 2014 the following restrictions apply:
-- x (if present) is an integer or has a single digit after decimal mark
-- y and z are unsigned integers
-- e-notation is not accepted
-- The overall number can start with '+' or '-' (so '12+3/4' and '+12+3/4'
-- and '-12-3/4' are valid).
-- Any leading negative sign is removed by the caller, so only inputs
-- like the following are accepted here (may have whitespace):
-- negative = false false true (there was a leading '-')
-- text = '2/3' '+2/3' '2/3'
-- text = '1+2/3' '+1+2/3' '1-2/3'
-- text = '12.3+1/2' '+12.3+1/2' '12.3-1/2'
-- Values like '12.3+1/2' are accepted, but are intended only for use
-- with the hands unit (not worth adding code to enforce that).
------------------------------------------------------------------------
local leading_plus, prefix, numstr, slashes, denstr =
text:match('^%s*(%+?)%s*(.-)%s*(%d+)%s*(/+)%s*(%d+)%s*$')
if not leading_plus then
-- Accept a single U+2044 fraction slash because that may be pasted.
leading_plus, prefix, numstr, denstr =
text:match('^%s*(%+?)%s*(.-)%s*(%d+)%s*⁄%s*(%d+)%s*$')
slashes = '/'
end
local numerator = tonumber(numstr)
local denominator = tonumber(denstr)
if numerator == nil or denominator == nil or (negative and leading_plus ~= '') then
return nil
end
local whole, wholestr
if prefix == '' then
wholestr = ''
whole = 0
else
-- Any prefix must be like '12+' or '12-' (whole number and fraction sign);
-- '12.3+' and '12.3-' are also accepted (single digit after decimal point)
-- because '12.3+1/2 hands' is valid (12 hands 3½ inches).
local num1, num2, frac_sign = prefix:match('^(%d+)(%.?%d?)%s*([+%-])$')
if num1 == nil then return nil end
if num2 == '' then -- num2 must be '' or like '.1' but not '.' or '.12'
wholestr = num1
else
if #num2 ~= 2 then return nil end
wholestr = num1 .. num2
end
if frac_sign ~= (negative and '-' or '+') then return nil end
whole = tonumber(wholestr)
if whole == nil then return nil end
end
local value = whole + numerator / denominator
if not valid_number(value) then return nil end
local altvalue = whole + numerator / (denominator * 10)
local style = #slashes -- kludge: 1 or 2 slashes can be used to select style
if style > 2 then style = 2 end
local wikitext = format_fraction(parms, 'in', negative, leading_plus .. wholestr, numstr, denstr, parms.opt_spell_in, style)
return value, altvalue, wikitext, denominator
end
local function extract_number(parms, text, another, no_fraction)
-- Return true, info if can extract a number from text,
-- where info is a table with the result,
-- or return false, t where t is an error message table.
-- Input can use en digits or digits in local language and can
-- have references at the end. Accepting references is intended
-- for use in infoboxes with a field for a value passed to convert.
-- Parameter another = true if the expected value is not the first.
-- Before processing, the input text is cleaned:
-- * Any thousand separators (valid or not) are removed.
-- * Any sign is replaced with '-' (if negative) or '' (otherwise).
-- That replaces Unicode minus with '-'.
-- If successful, the returned info table contains named fields:
-- value = a valid number
-- altvalue = a valid number, usually same as value but different
-- if fraction used (for hands unit)
-- singular = true if value is 1 or -1 (to use singular form of units)
-- clean = cleaned text with any separators and sign removed
-- (en digits and '.' decimal mark)
-- show = text formatted for output, possibly with ref strip markers
-- (digits in local language and custom decimal mark)
-- The resulting show:
-- * Is for an input value and is spelled if wanted and possible.
-- * Has a rounded value, if wanted.
-- * Has digits grouped where necessary, if wanted.
-- * If negative, a Unicode minus is used; otherwise the sign is
-- '+' (if the input text used '+'), or is '' (if no sign in input).
text = strip(text or '')
local reference
local pos = text:find('\127', 1, true)
if pos then
local before = text:sub(1, pos - 1)
local remainder = text:sub(pos)
local refs = {}
while #remainder > 0 do
local ref, spaces
ref, spaces, remainder = remainder:match('^(\127[^\127]*UNIQ[^\127]*%-ref[^\127]*\127)(%s*)(.*)')
if ref then
table.insert(refs, ref)
else
refs = {}
break
end
end
if #refs > 0 then
text = strip(before)
reference = table.concat(refs)
end
end
local clean = to_en(text, parms)
if clean == '' then
return false, { another and 'cvt_no_num2' or 'cvt_no_num' }
end
local isnegative, propersign = false, '' -- most common case
local singular, show, denominator
local value = tonumber(clean)
local altvalue
if value then
local sign = clean:sub(1, 1)
if sign == '+' or sign == '-' then
propersign = (sign == '+') and '+' or MINUS
clean = clean:sub(2)
end
if value < 0 then
isnegative = true
value = -value
end
else
local valstr
for _, prefix in ipairs({ '-', MINUS, '−' }) do
-- Including '-' sets isnegative in case input is a fraction like '-2-3/4'.
local plen = #prefix
if clean:sub(1, plen) == prefix then
valstr = clean:sub(plen + 1)
if valstr:match('^%s') then -- "- 1" is invalid but "-1 - 1/2" is ok
return false, { 'cvt_bad_num', text }
end
break
end
end
if valstr then
isnegative = true
propersign = MINUS
clean = valstr
value = tonumber(clean)
end
if value == nil then
if not no_fraction then
value, altvalue, show, denominator = extract_fraction(parms, clean, isnegative)
end
if value == nil then
return false, { 'cvt_bad_num', text }
end
if value <= 1 then
singular = true -- for example, "½ mile" or "one half mile" (singular unit)
end
end
end
if not valid_number(value) then -- for example, "1e310" may overflow
return false, { 'cvt_invalid_num' }
end
if show == nil then
-- clean is a non-empty string with no spaces, and does not represent a fraction,
-- and value = tonumber(clean) is a number >= 0.
-- If the input uses e-notation, show will be displayed using a power of ten, but
-- we use the number as given so it might not be normalized scientific notation.
-- The input value is spelled if specified so any e-notation is ignored;
-- that allows input like 2e6 to be spelled as "two million" which works
-- because the spell module converts '2e6' to '2000000' before spelling.
local function rounded(value, default, exponent)
local precision = parms.opt_ri
if precision then
local fmt = '%.' .. format('%d', precision) .. 'f'
local result = fmt:format(tonumber(value) + 2e-14) -- fudge for some common cases of bad rounding
if not exponent then
singular = (tonumber(result) == 1)
end
return result
end
return default
end
singular = (value == 1)
local scientific
local significand, exponent = clean:match('^([%d.]+)[Ee]([+%-]?%d+)')
if significand then
show = with_exponent(parms, rounded(significand, significand, exponent), exponent)
scientific = true
else
show = with_separator(parms, rounded(value, clean))
end
show = propersign .. show
if parms.opt_spell_in then
show = spell_number(parms, 'in', propersign .. rounded(value, clean)) or show
scientific = false
end
if scientific then
parms.opt_scientific = true
end
end
if isnegative and (value ~= 0) then
value = -value
altvalue = -(altvalue or value)
end
return true, {
value = value,
altvalue = altvalue or value,
singular = singular,
clean = clean,
show = show .. (reference or ''),
denominator = denominator,
}
end
local function get_number(text)
-- Return v, f where:
-- v = nil (text is not a number)
-- or
-- v = value of text (text is a number)
-- f = true if value is an integer
-- Input can use en digits or digits in local language or separators,
-- but no Unicode minus, and no fraction.
if text then
local number = tonumber(to_en(text))
if number then
local _, fracpart = math.modf(number)
return number, (fracpart == 0)
end
end
end
local function gcd(a, b)
-- Return the greatest common denominator for the given values,
-- which are known to be positive integers.
if a > b then
a, b = b, a
end
if a <= 0 then
return b
end
local r = b % a
if r <= 0 then
return a
end
if r == 1 then
return 1
end
return gcd(r, a)
end
local function fraction_table(value, denominator)
-- Return value as a string or a table:
-- * If result is a string, there is no fraction, and the result
-- is value formatted as a string of en digits.
-- * If result is a table, it represents a fraction with named fields:
-- wholestr, numstr, denstr (strings of en digits for integer, numerator, denominator).
-- The result is rounded to the nearest multiple of (1/denominator).
-- If the multiple is zero, no fraction is included.
-- No fraction is included if value is very large as the fraction would
-- be unhelpful, particularly if scientific notation is required.
-- Input value is a non-negative number.
-- Input denominator is a positive integer for the desired fraction.
if value <= 0 then
return '0'
end
if denominator <= 0 or value > 1e8 then
return format('%.2f', value)
end
local integer, decimals = math.modf(value)
local numerator = floor((decimals * denominator) +
0.5 + 2e-14) -- add fudge for some common cases of bad rounding
if numerator >= denominator then
integer = integer + 1
numerator = 0
end
local wholestr = tostring(integer)
if numerator > 0 then
local div = gcd(numerator, denominator)
if div > 1 then
numerator = numerator / div
denominator = denominator / div
end
return {
wholestr = (integer > 0) and wholestr or '',
numstr = tostring(numerator),
denstr = tostring(denominator),
value = value,
}
end
return wholestr
end
local function preunits(count, preunit1, preunit2)
-- If count is 1:
-- ignore preunit2
-- return p1
-- else:
-- preunit1 is used for preunit2 if the latter is empty
-- return p1, p2
-- where:
-- p1 is text to insert before the input unit
-- p2 is text to insert before the output unit
-- p1 or p2 may be nil to mean "no preunit"
-- Using '+' gives output like "5+ feet" (no space before, but space after).
local function withspace(text, wantboth)
-- Return text with space before and, if wantboth, after.
-- However, no space is added if there is a space or ' ' or '-'
-- at that position ('-' is for adjectival text).
-- There is also no space if text starts with '&'
-- (e.g. '°' would display a degree symbol with no preceding space).
local char = text:sub(1, 1)
if char == '&' then
return text -- an html entity can be used to specify the exact display
end
if not (char == ' ' or char == '-' or char == '+') then
text = ' ' .. text
end
if wantboth then
char = text:sub(-1, -1)
if not (char == ' ' or char == '-' or text:sub(-6, -1) == ' ') then
text = text .. ' '
end
end
return text
end
local PLUS = '+ '
preunit1 = preunit1 or ''
local trim1 = strip(preunit1)
if count == 1 then
if trim1 == '' then
return nil
end
if trim1 == '+' then
return PLUS
end
return withspace(preunit1, true)
end
preunit1 = withspace(preunit1)
preunit2 = preunit2 or ''
local trim2 = strip(preunit2)
if trim1 == '+' then
if trim2 == '' or trim2 == '+' then
return PLUS, PLUS
end
preunit1 = PLUS
end
if trim2 == '' then
if trim1 == '' then
return nil, nil
end
preunit2 = preunit1
elseif trim2 == '+' then
preunit2 = PLUS
elseif trim2 == ' ' then -- trick to make preunit2 empty
preunit2 = nil
else
preunit2 = withspace(preunit2)
end
return preunit1, preunit2
end
local function range_text(range, want_name, parms, before, after, inout, options)
-- Return before .. rtext .. after
-- where rtext is the text that separates two values in a range.
local rtext, adj_text, exception
options = options or {}
if type(range) == 'table' then
-- Table must specify range text for ('off' and 'on') or ('input' and 'output'),
-- and may specify range text for 'adj=on',
-- and may specify exception = true.
rtext = range[want_name and 'off' or 'on'] or
range[((inout == 'in') == (parms.opt_flip == true)) and 'output' or 'input']
adj_text = range['adj']
exception = range['exception']
else
rtext = range
end
if parms.opt_adjectival then
if want_name or (exception and parms.abbr_org == 'on') then
rtext = adj_text or rtext:gsub(' ', '-'):gsub(' ', '-')
end
end
if rtext == '–' and (options.spaced or after:sub(1, #MINUS) == MINUS) then
rtext = ' – '
end
return before .. rtext .. after
end
local function get_composite(parms, iparm, in_unit_table)
-- Look for a composite input unit. For example, {{convert|1|yd|2|ft|3|in}}
-- would result in a call to this function with
-- iparm = 3 (parms[iparm] = "2", just after the first unit)
-- in_unit_table = (unit table for "yd"; contains value 1 for number of yards)
-- Return true, iparm, unit where
-- iparm = index just after the composite units (7 in above example)
-- unit = composite unit table holding all input units,
-- or return true if no composite unit is present in parms,
-- or return false, t where t is an error message table.
local default, subinfo
local composite_units, count = { in_unit_table }, 1
local fixups = {}
local total = in_unit_table.valinfo[1].value
local subunit = in_unit_table
while subunit.subdivs do -- subdivs is nil or a table of allowed subdivisions
local subcode = strip(parms[iparm+1])
local subdiv = subunit.subdivs[subcode] or subunit.subdivs[(all_units[subcode] or {}).target]
if not subdiv then
break
end
local success
success, subunit = lookup(parms, subcode, 'no_combination')
if not success then return false, subunit end -- should never occur
success, subinfo = extract_number(parms, parms[iparm])
if not success then return false, subinfo end
iparm = iparm + 2
subunit.inout = 'in'
subunit.valinfo = { subinfo }
-- Recalculate total as a number of subdivisions.
-- subdiv[1] = number of subdivisions per previous unit (integer > 1).
total = total * subdiv[1] + subinfo.value
if not default then -- set by the first subdiv with a default defined
default = subdiv.default
end
count = count + 1
composite_units[count] = subunit
if subdiv.unit or subdiv.name then
fixups[count] = { unit = subdiv.unit, name = subdiv.name, valinfo = subunit.valinfo }
end
end
if count == 1 then
return true -- no error and no composite unit
end
for i, fixup in pairs(fixups) do
local unit = fixup.unit
local name = fixup.name
if not unit or (count > 2 and name) then
composite_units[i].fixed_name = name
else
local success, alternate = lookup(parms, unit, 'no_combination')
if not success then return false, alternate end -- should never occur
alternate.inout = 'in'
alternate.valinfo = fixup.valinfo
composite_units[i] = alternate
end
end
return true, iparm, {
utype = in_unit_table.utype,
scale = subunit.scale, -- scale of last (least significant) unit
valinfo = { { value = total, clean = subinfo.clean, denominator = subinfo.denominator } },
composite = composite_units,
default = default or in_unit_table.default
}
end
local function translate_parms(parms, kv_pairs)
-- Update fields in parms by translating each key:value in kv_pairs to terms
-- used by this module (may involve translating from local language to English).
-- Also, checks are performed which may display warnings, if enabled.
-- Return true if successful or return false, t where t is an error message table.
currency_text = nil -- local testing can hold module in memory; must clear globals
if kv_pairs.adj and kv_pairs.sing then
-- For enwiki (before translation), warn if attempt to use adj and sing
-- as the latter is a deprecated alias for the former.
if kv_pairs.adj ~= kv_pairs.sing and kv_pairs.sing ~= '' then
add_warning(parms, 1, 'cvt_unknown_option', 'sing=' .. kv_pairs.sing)
end
kv_pairs.sing = nil
end
kv_pairs.comma = kv_pairs.comma or config.comma -- for plwiki who want default comma=5
for loc_name, loc_value in pairs(kv_pairs) do
local en_name = text_code.en_option_name[loc_name]
if en_name then
local en_value = text_code.en_option_value[en_name]
if en_value == 'INTEGER' then -- altitude_ft, altitude_m, frac, sigfig
en_value = nil
if loc_value == '' then
add_warning(parms, 2, 'cvt_empty_option', loc_name)
else
local minimum
local number, is_integer = get_number(loc_value)
if en_name == 'sigfig' then
minimum = 1
elseif en_name == 'frac' then
minimum = 2
if number and number < 0 then
parms.opt_fraction_horizontal = true
number = -number
end
else
minimum = -1e6
end
if number and is_integer and number >= minimum then
en_value = number
else
local m
if en_name == 'frac' then
m = 'cvt_bad_frac'
elseif en_name == 'sigfig' then
m = 'cvt_bad_sigfig'
else
m = 'cvt_bad_altitude'
end
add_warning(parms, 1, m, loc_name .. '=' .. loc_value)
end
end
elseif en_value == 'TEXT' then -- $, input, qid, qual, stylein, styleout, tracking
en_value = loc_value ~= '' and loc_value or nil -- accept non-empty user text with no validation
if not en_value and (en_name == '$' or en_name == 'qid' or en_name == 'qual') then
add_warning(parms, 2, 'cvt_empty_option', loc_name)
elseif en_name == '$' then
-- Value should be a single character like "€" for the euro currency symbol, but anything is accepted.
currency_text = (loc_value == 'euro') and '€' or loc_value
elseif en_name == 'input' then
-- May have something like {{convert|input=}} (empty input) if source is an infobox
-- with optional fields. In that case, want to output nothing rather than an error.
parms.input_text = loc_value -- keep input because parms.input is nil if loc_value == ''
end
else
en_value = en_value[loc_value]
if en_value and en_value:sub(-1) == '?' then
en_value = en_value:sub(1, -2)
add_warning(parms, -1, 'cvt_deprecated', loc_name .. '=' .. loc_value)
end
if en_value == nil then
if loc_value == '' then
add_warning(parms, 2, 'cvt_empty_option', loc_name)
else
add_warning(parms, 1, 'cvt_unknown_option', loc_name .. '=' .. loc_value)
end
elseif en_value == '' then
en_value = nil -- an ignored option like adj=off
elseif type(en_value) == 'string' and en_value:sub(1, 4) == 'opt_' then
for _, v in ipairs(split(en_value, ',')) do
local lhs, rhs = v:match('^(.-)=(.+)$')
if rhs then
parms[lhs] = tonumber(rhs) or rhs
else
parms[v] = true
end
end
en_value = nil
end
end
parms[en_name] = en_value
else
add_warning(parms, 1, 'cvt_unknown_option', loc_name .. '=' .. loc_value)
end
end
local abbr_entered = parms.abbr
local cfg_abbr = config.abbr
if cfg_abbr then
-- Don't warn if invalid because every convert would show that warning.
if cfg_abbr == 'on always' then
parms.abbr = 'on'
elseif cfg_abbr == 'off always' then
parms.abbr = 'off'
elseif parms.abbr == nil then
if cfg_abbr == 'on default' then
parms.abbr = 'on'
elseif cfg_abbr == 'off default' then
parms.abbr = 'off'
end
end
end
if parms.abbr then
if parms.abbr == 'unit' then
parms.abbr = 'on'
parms.number_word = true
end
parms.abbr_org = parms.abbr -- original abbr, before any flip
elseif parms.opt_hand_hh then
parms.abbr_org = 'on'
parms.abbr = 'on'
else
parms.abbr = 'out' -- default is to abbreviate output only (use symbol, not name)
end
if parms.opt_order_out then
-- Disable options that do not work in a useful way with order=out.
parms.opt_flip = nil -- override adj=flip
parms.opt_spell_in = nil
parms.opt_spell_out = nil
parms.opt_spell_upper = nil
end
if parms.opt_spell_out and not abbr_entered then
parms.abbr = 'off' -- should show unit name when spelling the output value
end
if parms.opt_flip then
local function swap_in_out(option)
local value = parms[option]
if value == 'in' then
parms[option] = 'out'
elseif value == 'out' then
parms[option] = 'in'
end
end
swap_in_out('abbr')
swap_in_out('lk')
if parms.opt_spell_in and not parms.opt_spell_out then
-- For simplicity, and because it does not appear to be needed,
-- user cannot set an option to spell the output only.
parms.opt_spell_in = nil
parms.opt_spell_out = true
end
end
if parms.opt_spell_upper then
parms.spell_upper = parms.opt_flip and 'out' or 'in'
end
if parms.opt_table or parms.opt_tablecen then
if abbr_entered == nil and parms.lk == nil then
parms.opt_values = true
end
parms.table_align = parms.opt_table and 'right' or 'center'
end
if parms.table_align or parms.opt_sortable_on then
parms.need_table_or_sort = true
end
local disp_joins = text_code.disp_joins
local default_joins = disp_joins['b']
parms.join_between = default_joins[3] or '; '
local disp = parms.disp
if disp == nil then -- special case for the most common setting
parms.joins = default_joins
elseif disp == 'x' then
-- Later, parms.joins is set from the input parameters.
else
-- Old template does this.
local abbr = parms.abbr
if disp == 'slash' then
if abbr_entered == nil then
disp = 'slash-nbsp'
elseif abbr == 'in' or abbr == 'out' then
disp = 'slash-sp'
else
disp = 'slash-nosp'
end
elseif disp == 'sqbr' then
if abbr == 'on' then
disp = 'sqbr-nbsp'
else
disp = 'sqbr-sp'
end
end
parms.joins = disp_joins[disp] or default_joins
parms.join_between = parms.joins[3] or parms.join_between
parms.wantname = parms.joins.wantname
end
if (en_default and not parms.opt_lang_local and (parms[1] or ''):find('%d')) or parms.opt_lang_en then
from_en_table = nil
end
if en_default and from_en_table then
-- For hiwiki: localized symbol/name is defined with the US symbol/name field,
-- and is used if output uses localized numbers.
parms.opt_sp_us = true
end
return true
end
local function get_values(parms)
-- If successful, update parms and return true, v, i where
-- v = table of input values
-- i = index to next entry in parms after those processed here
-- or return false, t where t is an error message table.
local valinfo = collection() -- numbered table of input values
local range = collection() -- numbered table of range items (having, for example, 2 range items requires 3 input values)
local had_nocomma -- true if removed "nocomma" kludge from second parameter (like "tonocomma")
local parm2 = strip(parms[2])
if parm2 and parm2:sub(-7, -1) == 'nocomma' then
parms[2] = strip(parm2:sub(1, -8))
parms.opt_nocomma = true
had_nocomma = true
end
local function extractor(i)
-- If the parameter is not a value, try unpacking it as a range ("1-23" for "1 to 23").
-- However, "-1-2/3" is a negative fraction (-1⅔), so it must be extracted first.
-- Do not unpack a parameter if it is like "3-1/2" which is sometimes incorrectly
-- used instead of "3+1/2" (and which should not be interpreted as "3 to ½").
-- Unpacked items are inserted into the parms table.
-- The tail recursion allows combinations like "1x2 to 3x4".
local valstr = strip(parms[i]) -- trim so any '-' as a negative sign will be at start
local success, result = extract_number(parms, valstr, i > 1)
if not success and valstr and i < 20 then -- check i to limit abuse
local lhs, sep, rhs = valstr:match('^(%S+)%s+(%S+)%s+(%S.*)')
if lhs and not (sep == '-' and rhs:match('/')) then
if sep:find('%d') then
return success, result -- to reject {{convert|1 234 567|m}} with a decent message (en only)
end
parms[i] = rhs
table.insert(parms, i, sep)
table.insert(parms, i, lhs)
return extractor(i)
end
if not valstr:match('%-.*/') then
for _, sep in ipairs(text_code.ranges.words) do
local start, stop = valstr:find(sep, 2, true) -- start at 2 to skip any negative sign for range '-'
if start then
parms[i] = valstr:sub(stop + 1)
table.insert(parms, i, sep)
table.insert(parms, i, valstr:sub(1, start - 1))
return extractor(i)
end
end
end
end
return success, result
end
local i = 1
local is_change
while true do
local success, info = extractor(i) -- need to set parms.opt_nocomma before calling this
if not success then return false, info end
i = i + 1
if is_change then
info.is_change = true -- value is after "±" and so is a change (significant for range like {{convert|5|±|5|°C}})
is_change = nil
end
valinfo:add(info)
local range_item = get_range(strip(parms[i]))
if not range_item then
break
end
i = i + 1
range:add(range_item)
if type(range_item) == 'table' then
-- For range "x", if append unit to some values, append it to all.
parms.in_range_x = parms.in_range_x or range_item.in_range_x
parms.out_range_x = parms.out_range_x or range_item.out_range_x
parms.abbr_range_x = parms.abbr_range_x or range_item.abbr_range_x
is_change = range_item.is_range_change
end
end
if range.n > 0 then
if range.n > 30 then -- limit abuse, although 4 is a more likely upper limit
return false, { 'cvt_invalid_num' } -- misleading message but it will do
end
parms.range = range
elseif had_nocomma then
return false, { 'cvt_unknown', parm2 }
end
return true, valinfo, i
end
local function simple_get_values(parms)
-- If input is like "{{convert|valid_value|valid_unit|...}}",
-- return true, i, in_unit, in_unit_table
-- i = index in parms of what follows valid_unit, if anything.
-- The valid_value is not negative and does not use a fraction, and
-- no options requiring further processing of the input are used.
-- Otherwise, return nothing or return false, parm1 for caller to interpret.
-- Testing shows this function is successful for 96% of converts in articles,
-- and that on average it speeds up converts by 8%.
local clean = to_en(strip(parms[1] or ''), parms)
if parms.opt_ri or parms.opt_spell_in or #clean > 10 or not clean:match('^[0-9.]+$') then
return false, clean
end
local value = tonumber(clean)
if not value then return end
local info = {
value = value,
altvalue = value,
singular = (value == 1),
clean = clean,
show = with_separator(parms, clean),
}
local in_unit = strip(parms[2])
local success, in_unit_table = lookup(parms, in_unit, 'no_combination')
if not success then return end
in_unit_table.valinfo = { info }
return true, 3, in_unit, in_unit_table
end
local function wikidata_call(parms, operation, ...)
-- Return true, s where s is the result of a Wikidata operation,
-- or return false, t where t is an error message table.
local function worker(...)
wikidata_code = wikidata_code or require(wikidata_module)
wikidata_data = wikidata_data or mw.loadData(wikidata_data_module)
return wikidata_code[operation](wikidata_data, ...)
end
local success, status, result = pcall(worker, ...)
if success then
return status, result
end
if parms.opt_sortable_debug then
-- Use debug=yes to crash if an error while accessing Wikidata.
error('Error accessing Wikidata: ' .. status, 0)
end
return false, { 'cvt_wd_fail' }
end
local function get_parms(parms, args)
-- If successful, update parms and return true, unit where
-- parms is a table of all arguments passed to the template
-- converted to named arguments, and
-- unit is the input unit table;
-- or return false, t where t is an error message table.
-- For special processing (not a convert), can also return
-- true, wikitext where wikitext is the final result.
-- The returned input unit table may be for a fake unit using the specified
-- unit code as the symbol and name, and with bad_mcode = message code table.
-- MediaWiki removes leading and trailing whitespace from the values of
-- named arguments. However, the values of numbered arguments include any
-- whitespace entered in the template, and whitespace is used by some
-- parameters (example: the numbered parameters associated with "disp=x").
local kv_pairs = {} -- table of input key:value pairs where key is a name; needed because cannot iterate parms and add new fields to it
for k, v in pairs(args) do
if type(k) == 'number' or k == 'test' then -- parameter "test" is reserved for testing and is not translated
parms[k] = v
else
kv_pairs[k] = v
end
end
if parms.test == 'wikidata' then
local ulookup = function (ucode)
-- Use empty table for parms so it does not accumulate results when used repeatedly.
return lookup({}, ucode, 'no_combination')
end
return wikidata_call(parms, '_listunits', ulookup)
end
local success, msg = translate_parms(parms, kv_pairs)
if not success then return false, msg end
if parms.input then
success, msg = wikidata_call(parms, '_adjustparameters', parms, 1)
if not success then return false, msg end
end
local success, i, in_unit, in_unit_table = simple_get_values(parms)
if not success then
if type(i) == 'string' and i:match('^NNN+$') then
-- Some infoboxes have examples like {{convert|NNN|m}} (3 or more "N").
-- Output an empty string for these.
return false, { 'cvt_no_output' }
end
local valinfo
success, valinfo, i = get_values(parms)
if not success then return false, valinfo end
in_unit = strip(parms[i])
i = i + 1
success, in_unit_table = lookup(parms, in_unit, 'no_combination')
if not success then
in_unit = in_unit or ''
if parms.opt_ignore_error then -- display given unit code with no error (for use with {{val}})
in_unit_table = '' -- suppress error message and prevent processing of output unit
end
in_unit_table = setmetatable({
symbol = in_unit, name2 = in_unit, utype = in_unit,
scale = 1, default = '', defkey = '', linkey = '',
bad_mcode = in_unit_table }, unit_mt)
end
in_unit_table.valinfo = valinfo
end
if parms.test == 'msg' then
-- Am testing the messages produced when no output unit is specified, and
-- the input unit has a missing or invalid default.
-- Set two units for testing that.
-- LATER: Remove this code.
if in_unit == 'chain' then
in_unit_table.default = nil -- no default
elseif in_unit == 'rd' then
in_unit_table.default = "ft!X!m" -- an invalid expression
end
end
in_unit_table.inout = 'in' -- this is an input unit
if not parms.range then
local success, inext, composite_unit = get_composite(parms, i, in_unit_table)
if not success then return false, inext end
if composite_unit then
in_unit_table = composite_unit
i = inext
end
end
if in_unit_table.builtin == 'mach' then
-- As with old template, a number following Mach as the input unit is the altitude.
-- That is deprecated: should use altitude_ft=NUMBER or altitude_m=NUMBER.
local success, info
success = tonumber(parms[i]) -- this will often work and will give correct result for values like 2e4 without forcing output scientific notation
if success then
info = { value = success }
else
success, info = extract_number(parms, parms[i], false, true)
end
if success then
i = i + 1
in_unit_table.altitude = info.value
end
end
local word = strip(parms[i])
i = i + 1
local precision, is_bad_precision
local function set_precision(text)
local number, is_integer = get_number(text)
if number then
if is_integer then
precision = number
else
precision = text
is_bad_precision = true
end
return true -- text was used for precision, good or bad
end
end
if word and not set_precision(word) then
parms.out_unit = parms.out_unit or word
if set_precision(strip(parms[i])) then
i = i + 1
end
end
if parms.opt_adj_mid then
word = parms[i]
i = i + 1
if word then -- mid-text words
if word:sub(1, 1) == '-' then
parms.mid = word
else
parms.mid = ' ' .. word
end
end
end
if parms.opt_one_preunit then
parms[parms.opt_flip and 'preunit2' or 'preunit1'] = preunits(1, parms[i])
i = i + 1
end
if parms.disp == 'x' then
-- Following is reasonably compatible with the old template.
local first = parms[i] or ''
local second = parms[i+1] or ''
i = i + 2
if strip(first) == '' then -- user can enter ' ' rather than ' ' to avoid the default
first = ' [ ' .. first
second = ' ]' .. second
end
parms.joins = { first, second }
elseif parms.opt_two_preunits then
local p1, p2 = preunits(2, parms[i], parms[i+1])
i = i + 2
if parms.preunit1 then
-- To simplify documentation, allow unlikely use of adj=pre with disp=preunit
-- (however, an output unit must be specified with adj=pre and with disp=preunit).
parms.preunit1 = parms.preunit1 .. p1
parms.preunit2 = p2
else
parms.preunit1, parms.preunit2 = p1, p2
end
end
if precision == nil then
if set_precision(strip(parms[i])) then
i = i + 1
end
end
if is_bad_precision then
add_warning(parms, 1, 'cvt_bad_prec', precision)
else
parms.precision = precision
end
for j = i, i + 3 do
local parm = parms[j] -- warn if find a non-empty extraneous parameter
if parm and parm:match('%S') then
add_warning(parms, 1, 'cvt_unknown_option', parm)
break
end
end
return true, in_unit_table
end
local function record_default_precision(parms, out_current, precision)
-- If necessary, adjust parameters and return a possibly adjusted precision.
-- When converting a range of values where a default precision is required,
-- that default is calculated for each value because the result sometimes
-- depends on the precise input and output values. This function may cause
-- the entire convert process to be repeated in order to ensure that the
-- same default precision is used for each individual convert.
-- If that were not done, a range like 1000 to 1000.4 may give poor results
-- because the first output could be heavily rounded, while the second is not.
-- For range 1000.4 to 1000, this function can give the second convert the
-- same default precision that was used for the first.
if not parms.opt_round_each then
local maxdef = out_current.max_default_precision
if maxdef then
if maxdef < precision then
parms.do_convert_again = true
out_current.max_default_precision = precision
else
precision = out_current.max_default_precision
end
else
out_current.max_default_precision = precision
end
end
return precision
end
local function default_precision(parms, invalue, inclean, denominator, outvalue, in_current, out_current, extra)
-- Return a default value for precision (an integer like 2, 0, -2).
-- If denominator is not nil, it is the value of the denominator in inclean.
-- Code follows procedures used in old template.
local fudge = 1e-14 -- {{Order of magnitude}} adds this, so we do too
local prec, minprec, adjust
local subunit_ignore_trailing_zero
local subunit_more_precision -- kludge for "in" used in input like "|2|ft|6|in"
local composite = in_current.composite
if composite then
subunit_ignore_trailing_zero = true -- input "|2|st|10|lb" has precision 0, not -1
if composite[#composite].exception == 'subunit_more_precision' then
subunit_more_precision = true -- do not use standard precision with input like "|2|ft|6|in"
end
end
if denominator and denominator > 0 then
prec = math.max(log10(denominator), 1)
else
-- Count digits after decimal mark, handling cases like '12.345e6'.
local exponent
local integer, dot, decimals, expstr = inclean:match('^(%d*)(%.?)(%d*)(.*)')
local e = expstr:sub(1, 1)
if e == 'e' or e == 'E' then
exponent = tonumber(expstr:sub(2))
end
if dot == '' then
prec = subunit_ignore_trailing_zero and 0 or -integer:match('0*$'):len()
else
prec = #decimals
end
if exponent then
-- So '1230' and '1.23e3' both give prec = -1, and '0.00123' and '1.23e-3' give 5.
prec = prec - exponent
end
end
if in_current.istemperature and out_current.istemperature then
-- Converting between common temperatures (°C, °F, °R, K); not keVT.
-- Kelvin value can be almost zero, or small but negative due to precision problems.
-- Also, an input value like -300 C (below absolute zero) gives negative kelvins.
-- Calculate minimum precision from absolute value.
adjust = 0
local kelvin = abs((invalue - in_current.offset) * in_current.scale)
if kelvin < 1e-8 then -- assume nonzero due to input or calculation precision problem
minprec = 2
else
minprec = 2 - floor(log10(kelvin) + fudge) -- 3 sigfigs in kelvin
end
else
if invalue == 0 or outvalue <= 0 then
-- We are never called with a negative outvalue, but it might be zero.
-- This is special-cased to avoid calculation exceptions.
return record_default_precision(parms, out_current, 0)
end
if out_current.exception == 'integer_more_precision' and floor(invalue) == invalue then
-- With certain output units that sometimes give poor results
-- with default rounding, use more precision when the input
-- value is equal to an integer. An example of a poor result
-- is when input 50 gives a smaller output than input 49.5.
-- Experiment shows this helps, but it does not eliminate all
-- surprises because it is not clear whether "50" should be
-- interpreted as "from 45 to 55" or "from 49.5 to 50.5".
adjust = -log10(in_current.scale)
elseif subunit_more_precision then
-- Conversion like "{{convert|6|ft|1|in|cm}}" (where subunit is "in")
-- has a non-standard adjust value, to give more output precision.
adjust = log10(out_current.scale) + 2
else
adjust = log10(abs(invalue / outvalue))
end
adjust = adjust + log10(2)
-- Ensure that the output has at least two significant figures.
minprec = 1 - floor(log10(outvalue) + fudge)
end
if extra then
adjust = extra.adjust or adjust
minprec = extra.minprec or minprec
end
return record_default_precision(parms, out_current, math.max(floor(prec + adjust), minprec))
end
local function convert(parms, invalue, info, in_current, out_current)
-- Convert given input value from one unit to another.
-- Return output_value (a number) if a simple convert, or
-- return f, t where
-- f = true, t = table of information with results, or
-- f = false, t = error message table.
local inscale = in_current.scale
local outscale = out_current.scale
if not in_current.iscomplex and not out_current.iscomplex then
return invalue * (inscale / outscale) -- minimize overhead for most common case
end
if in_current.invert or out_current.invert then
-- Inverted units, such as inverse length, inverse time, or
-- fuel efficiency. Built-in units do not have invert set.
if (in_current.invert or 1) * (out_current.invert or 1) < 0 then
return 1 / (invalue * inscale * outscale)
end
return invalue * (inscale / outscale)
elseif in_current.offset then
-- Temperature (there are no built-ins for this type of unit).
if info.is_change then
return invalue * (inscale / outscale)
end
return (invalue - in_current.offset) * (inscale / outscale) + out_current.offset
else
-- Built-in unit.
local in_builtin = in_current.builtin
local out_builtin = out_current.builtin
if in_builtin and out_builtin then
if in_builtin == out_builtin then
return invalue
end
-- There are no cases (yet) where need to convert from one
-- built-in unit to another, so this should never occur.
return false, { 'cvt_bug_convert' }
end
if in_builtin == 'mach' or out_builtin == 'mach' then
-- Should check that only one altitude is given but am planning to remove
-- in_current.altitude (which can only occur when Mach is the input unit),
-- and out_current.altitude cannot occur.
local alt = parms.altitude_ft or in_current.altitude
if not alt and parms.altitude_m then
alt = parms.altitude_m / 0.3048 -- 1 ft = 0.3048 m
end
local spd = speed_of_sound(alt)
if in_builtin == 'mach' then
inscale = spd
return invalue * (inscale / outscale)
end
outscale = spd
local adjust = 0.1 / inscale
return true, {
outvalue = invalue * (inscale / outscale),
adjust = log10(adjust) + log10(2),
}
elseif in_builtin == 'hand' then
-- 1 hand = 4 inches; 1.2 hands = 6 inches.
-- Decimals of a hand are only defined for the first digit, and
-- the first fractional digit should be a number of inches (1, 2 or 3).
-- However, this code interprets the entire fractional part as the number
-- of inches / 10 (so 1.75 inches would be 0.175 hands).
-- A value like 12.3 hands is exactly 12*4 + 3 inches; base default precision on that.
local integer, fracpart = math.modf(invalue)
local inch_value = 4 * integer + 10 * fracpart -- equivalent number of inches
local factor = inscale / outscale
if factor == 4 then
-- Am converting to inches: show exact result, and use "inches" not "in" by default.
if parms.abbr_org == nil then
out_current.usename = true
end
local show = format('%g', abs(inch_value)) -- show and clean are unsigned
if not show:find('e', 1, true) then
return true, {
invalue = inch_value,
outvalue = inch_value,
clean = show,
show = show,
}
end
end
local outvalue = (integer + 2.5 * fracpart) * factor
local fracstr = info.clean:match('%.(.*)') or ''
local fmt
if fracstr == '' then
fmt = '%.0f'
else
fmt = '%.' .. format('%d', #fracstr - 1) .. 'f'
end
return true, {
invalue = inch_value,
clean = format(fmt, inch_value),
outvalue = outvalue,
minprec = 0,
}
end
end
return false, { 'cvt_bug_convert' } -- should never occur
end
local function user_style(parms, i)
-- Return text for a user-specified style for a table cell, or '' if none,
-- given i = 1 (input style) or 2 (output style).
local style = parms[(i == 1) and 'stylein' or 'styleout']
if style then
style = style:gsub('"', '')
if style ~= '' then
if style:sub(-1) ~= ';' then
style = style .. ';'
end
return style
end
end
return ''
end
local function make_table_or_sort(parms, invalue, info, in_current, scaled_top)
-- Set options to handle output for a table or a sort key, or both.
-- The text sort key is based on the value resulting from converting
-- the input to a fake base unit with scale = 1, and other properties
-- required for a conversion derived from the input unit.
-- For other modules, return the sort key in a hidden span element, and
-- the scaled value used to generate the sort key.
-- If scaled_top is set, it is the scaled value of the numerator of a per unit
-- to be combined with this unit (the denominator) to make the sort key.
-- Scaling only works with units that convert with a factor (not temperature).
local sortkey, scaled_value
if parms.opt_sortable_on then
local base = { -- a fake unit with enough fields for a valid convert
scale = 1,
invert = in_current.invert and 1,
iscomplex = in_current.iscomplex,
offset = in_current.offset and 0,
}
local outvalue, extra = convert(parms, invalue, info, in_current, base)
if extra then
outvalue = extra.outvalue
end
if in_current.istemperature then
-- Have converted to kelvin; assume numbers close to zero have a
-- rounding error and should be zero.
if abs(outvalue) < 1e-12 then
outvalue = 0
end
end
if scaled_top and outvalue ~= 0 then
outvalue = scaled_top / outvalue
end
scaled_value = outvalue
if not valid_number(outvalue) then
if outvalue < 0 then
sortkey = '1000000000000000000'
else
sortkey = '9000000000000000000'
end
elseif outvalue == 0 then
sortkey = '5000000000000000000'
else
local mag = floor(log10(abs(outvalue)) + 1e-14)
local prefix
if outvalue > 0 then
prefix = 7000 + mag
else
prefix = 2999 - mag
outvalue = outvalue + 10^(mag+1)
end
sortkey = format('%d', prefix) .. format('%015.0f', floor(outvalue * 10^(14-mag)))
end
end
local sortspan
if sortkey and not parms.table_align then
sortspan = parms.opt_sortable_debug and
'<span data-sort-value="' .. sortkey .. '♠"><span style="border:1px solid">' .. sortkey .. '♠</span></span>' or
'<span data-sort-value="' .. sortkey .. '♠"></span>'
parms.join_before = sortspan
end
if parms.table_align then
local sort
if sortkey then
sort = ' data-sort-value="' .. sortkey .. '"'
if parms.opt_sortable_debug then
parms.join_before = '<span style="border:1px solid">' .. sortkey .. '</span>'
end
else
sort = ''
end
local style = 'style="text-align:' .. parms.table_align .. ';'
local joins = {}
for i = 1, 2 do
joins[i] = (i == 1 and '' or '\n|') .. style .. user_style(parms, i) .. '"' .. sort .. '|'
end
parms.table_joins = joins
end
return sortspan, scaled_value
end
local cvt_to_hand
local function cvtround(parms, info, in_current, out_current)
-- Return true, t where t is a table with the conversion results; fields:
-- show = rounded, formatted string with the result of converting value in info,
-- using the rounding specified in parms.
-- singular = true if result (after rounding and ignoring any negative sign)
-- is "1", or like "1.00", or is a fraction with value < 1;
-- (and more fields shown below, and a calculated 'absvalue' field).
-- or return false, t where t is an error message table.
-- Input info.clean uses en digits (it has been translated, if necessary).
-- Output show uses en or non-en digits as appropriate, or can be spelled.
if out_current.builtin == 'hand' then
return cvt_to_hand(parms, info, in_current, out_current)
end
local invalue = in_current.builtin == 'hand' and info.altvalue or info.value
local outvalue, extra = convert(parms, invalue, info, in_current, out_current)
if parms.need_table_or_sort then
parms.need_table_or_sort = nil -- process using first input value only
make_table_or_sort(parms, invalue, info, in_current)
end
if extra then
if not outvalue then return false, extra end
invalue = extra.invalue or invalue
outvalue = extra.outvalue
end
if not valid_number(outvalue) then
return false, { 'cvt_invalid_num' }
end
local isnegative
if outvalue < 0 then
isnegative = true
outvalue = -outvalue
end
local precision, show, exponent
local denominator = out_current.frac
if denominator then
show = fraction_table(outvalue, denominator)
else
precision = parms.precision
if not precision then
if parms.sigfig then
show, exponent = make_sigfig(outvalue, parms.sigfig)
elseif parms.opt_round then
local n = parms.opt_round
if n == 0.5 then
local integer, fracpart = math.modf(floor(2 * outvalue + 0.5) / 2)
if fracpart == 0 then
show = format('%.0f', integer)
else
show = format('%.1f', integer + fracpart)
end
else
show = format('%.0f', floor((outvalue / n) + 0.5) * n)
end
elseif in_current.builtin == 'mach' then
local sigfig = info.clean:gsub('^[0.]+', ''):gsub('%.', ''):len() + 1
show, exponent = make_sigfig(outvalue, sigfig)
else
local inclean = info.clean
if extra then
inclean = extra.clean or inclean
show = extra.show
end
if not show then
precision = default_precision(parms, invalue, inclean, info.denominator, outvalue, in_current, out_current, extra)
end
end
end
end
if precision then
if precision >= 0 then
local fudge
if precision <= 8 then
-- Add a fudge to handle common cases of bad rounding due to inability
-- to precisely represent some values. This makes the following work:
-- {{convert|-100.1|C|K}} and {{convert|5555000|um|m|2}}.
-- Old template uses #expr round, which invokes PHP round().
-- LATER: Investigate how PHP round() works.
fudge = 2e-14
else
fudge = 0
end
local fmt = '%.' .. format('%d', precision) .. 'f'
local success
success, show = pcall(format, fmt, outvalue + fudge)
if not success then
return false, { 'cvt_big_prec', tostring(precision) }
end
else
precision = -precision -- #digits to zero (in addition to any digits after dot)
local shift = 10 ^ precision
show = format('%.0f', outvalue/shift)
if show ~= '0' then
exponent = #show + precision
end
end
end
local t = format_number(parms, show, exponent, isnegative)
if type(show) == 'string' then
-- Set singular using match because on some systems 0.99999999999999999 is 1.0.
if exponent then
t.singular = (exponent == 1 and show:match('^10*$'))
else
t.singular = (show == '1' or show:match('^1%.0*$'))
end
else
t.fraction_table = show
t.singular = (outvalue <= 1) -- cannot have 'fraction == 1', but if it were possible it would be singular
end
t.raw_absvalue = outvalue -- absolute value before rounding
return true, setmetatable(t, {
__index = function (self, key)
if key == 'absvalue' then
-- Calculate absolute value after rounding, if needed.
local clean, exponent = rawget(self, 'clean'), rawget(self, 'exponent')
local value = tonumber(clean) -- absolute value (any negative sign has been ignored)
if exponent then
value = value * 10^exponent
end
rawset(self, key, value)
return value
end
end })
end
function cvt_to_hand(parms, info, in_current, out_current)
-- Convert input to hands, inches.
-- Return true, t where t is a table with the conversion results;
-- or return false, t where t is an error message table.
if parms.abbr_org == nil then
out_current.usename = true -- default is to show name not symbol
end
local precision = parms.precision
local frac = out_current.frac
if not frac and precision and precision > 1 then
frac = (precision == 2) and 2 or 4
end
local out_next = out_current.out_next
if out_next then
-- Use magic knowledge to determine whether the next unit is inches without requiring i18n.
-- The following ensures that when the output combination "hand in" is used, the inches
-- value is rounded to match the hands value. Also, displaying say "61½" instead of 61.5
-- is better as 61.5 implies the value is not 61.4.
if out_next.exception == 'subunit_more_precision' then
out_next.frac = frac
end
end
-- Convert to inches; calculate hands from that.
local dummy_unit_table = { scale = out_current.scale / 4, frac = frac }
local success, outinfo = cvtround(parms, info, in_current, dummy_unit_table)
if not success then return false, outinfo end
local tfrac = outinfo.fraction_table
local inches = outinfo.raw_absvalue
if tfrac then
inches = floor(inches) -- integer part only; fraction added later
else
inches = floor(inches + 0.5) -- a hands measurement never shows decimals of an inch
end
local hands, inches = divide(inches, 4)
outinfo.absvalue = hands + inches/4 -- supposed to be the absolute rounded value, but this is close enough
local inchstr = tostring(inches) -- '0', '1', '2' or '3'
if precision and precision <= 0 then -- using negative or 0 for precision rounds to nearest hand
hands = floor(outinfo.raw_absvalue/4 + 0.5)
inchstr = ''
elseif tfrac then
-- Always show an integer before fraction (like "15.0½") because "15½" means 15-and-a-half hands.
inchstr = numdot .. format_fraction(parms, 'out', false, inchstr, tfrac.numstr, tfrac.denstr)
else
inchstr = numdot .. from_en(inchstr)
end
outinfo.show = outinfo.sign .. with_separator(parms, format('%.0f', hands)) .. inchstr
return true, outinfo
end
local function evaluate_condition(value, condition)
-- Return true or false from applying a conditional expression to value,
-- or throw an error if invalid.
-- A very limited set of expressions is supported:
-- v < 9
-- v * 9 < 9
-- where
-- 'v' is replaced with value
-- 9 is any number (as defined by Lua tonumber)
-- only en digits are accepted
-- '<' can also be '<=' or '>' or '>='
-- In addition, the following form is supported:
-- LHS and RHS
-- where
-- LHS, RHS = any of above expressions.
local function compare(value, text)
local arithop, factor, compop, limit = text:match('^%s*v%s*([*]?)(.-)([<>]=?)(.*)$')
if arithop == nil then
error('Invalid default expression', 0)
elseif arithop == '*' then
factor = tonumber(factor)
if factor == nil then
error('Invalid default expression', 0)
end
value = value * factor
end
limit = tonumber(limit)
if limit == nil then
error('Invalid default expression', 0)
end
if compop == '<' then
return value < limit
elseif compop == '<=' then
return value <= limit
elseif compop == '>' then
return value > limit
elseif compop == '>=' then
return value >= limit
end
error('Invalid default expression', 0) -- should not occur
end
local lhs, rhs = condition:match('^(.-%W)and(%W.*)')
if lhs == nil then
return compare(value, condition)
end
return compare(value, lhs) and compare(value, rhs)
end
local function get_default(value, unit_table)
-- Return true, s where s = name of unit's default output unit,
-- or return false, t where t is an error message table.
-- Some units have a default that depends on the input value
-- (the first value if a range of values is used).
-- If '!' is in the default, the first bang-delimited field is an
-- expression that uses 'v' to represent the input value.
-- Example: 'v < 120 ! small ! big ! suffix' (suffix is optional)
-- evaluates 'v < 120' as a boolean with result
-- 'smallsuffix' if (value < 120), or 'bigsuffix' otherwise.
-- Input must use en digits and '.' decimal mark.
local default = data_code.default_exceptions[unit_table.defkey or unit_table.symbol] or unit_table.default
if not default then
local per = unit_table.per
if per then
local function a_default(v, u)
local success, ucode = get_default(v, u)
if not success then
return '?' -- an unlikely error has occurred; will cause lookup of default to fail
end
-- Attempt to use only the first unit if a combination or output multiple.
-- This is not bulletproof but should work for most cases.
-- Where it does not work, the convert will need to specify the wanted output unit.
local t = all_units[ucode]
if t then
local combo = t.combination
if combo then
-- For a multiple like ftin, the "first" unit (ft) is last in the combination.
local i = t.multiple and table_len(combo) or 1
ucode = combo[i]
end
else
-- Try for an automatically generated combination.
local item = ucode:match('^(.-)%+') or ucode:match('^(%S+)%s')
if all_units[item] then
return item
end
end
return ucode
end
local unit1, unit2 = per[1], per[2]
local def1 = (unit1 and a_default(value, unit1) or unit_table.vprefix or '')
local def2 = a_default(1, unit2) -- 1 because per unit of denominator
return true, def1 .. '/' .. def2
end
return false, { 'cvt_no_default', unit_table.symbol }
end
if default:find('!', 1, true) == nil then
return true, default
end
local t = split(default, '!')
if #t == 3 or #t == 4 then
local success, result = pcall(evaluate_condition, value, t[1])
if success then
default = result and t[2] or t[3]
if #t == 4 then
default = default .. t[4]
end
return true, default
end
end
return false, { 'cvt_bad_default', unit_table.symbol }
end
local linked_pages -- to record linked pages so will not link to the same page more than once
local function unlink(unit_table)
-- Forget that the given unit has previously been linked (if it has).
-- That is needed when processing a range of inputs or outputs when an id
-- for the first range value may have been evaluated, but only an id for
-- the last value is displayed, and that id may need to be linked.
linked_pages[unit_table.unitcode or unit_table] = nil
end
local function make_link(link, id, unit_table)
-- Return wikilink "[[link|id]]", possibly abbreviated as in examples:
-- [[Mile|mile]] --> [[mile]]
-- [[Mile|miles]] --> [[mile]]s
-- However, just id is returned if:
-- * no link given (so caller does not need to check if a link was defined); or
-- * link has previously been used during the current convert (to avoid overlinking).
local link_key
if unit_table then
link_key = unit_table.unitcode or unit_table
else
link_key = link
end
if not link or link == '' or linked_pages[link_key] then
return id
end
linked_pages[link_key] = true
-- Following only works for language en, but it should be safe on other wikis,
-- and overhead of doing it generally does not seem worthwhile.
local l = link:sub(1, 1):lower() .. link:sub(2)
if link == id or l == id then
return '[[' .. id .. ']]'
elseif link .. 's' == id or l .. 's' == id then
return '[[' .. id:sub(1, -2) .. ']]s'
else
return '[[' .. link .. '|' .. id .. ']]'
end
end
local function variable_name(clean, unit_table)
-- For slwiki, a unit name depends on the value.
-- Parameter clean is the unsigned rounded value in en digits, as a string.
-- Value Source Example for "m"
-- integer 1: name1 meter (also is the name of the unit)
-- integer 2: var{1} metra
-- integer 3 and 4: var{2} metri
-- integer else: var{3} metrov (0 and 5 or more)
-- real/fraction: var{4} metra
-- var{i} means the i'th field in unit_table.varname if it exists and has
-- an i'th field, otherwise name2.
-- Fields are separated with "!" and are not empty.
-- A field for a unit using an SI prefix has the prefix name inserted,
-- replacing '#' if found, or before the field otherwise.
local vname
if clean == '1' then
vname = unit_table.name1
elseif unit_table.varname then
local i
if clean == '2' then
i = 1
elseif clean == '3' or clean == '4' then
i = 2
elseif clean:find('.', 1, true) then
i = 4
else
i = 3
end
if i > 1 and varname == 'pl' then
i = i - 1
end
vname = split(unit_table.varname, '!')[i]
end
if vname then
local si_name = rawget(unit_table, 'si_name') or ''
local pos = vname:find('#', 1, true)
if pos then
vname = vname:sub(1, pos - 1) .. si_name .. vname:sub(pos + 1)
else
vname = si_name .. vname
end
return vname
end
return unit_table.name2
end
local function linked_id(parms, unit_table, key_id, want_link, clean)
-- Return final unit id (symbol or name), optionally with a wikilink,
-- and update unit_table.sep if required.
-- key_id is one of: 'symbol', 'sym_us', 'name1', 'name1_us', 'name2', 'name2_us'.
local abbr_on = (key_id == 'symbol' or key_id == 'sym_us')
if abbr_on and want_link then
local symlink = rawget(unit_table, 'symlink')
if symlink then
return symlink -- for exceptions that have the linked symbol built-in
end
end
local multiplier = rawget(unit_table, 'multiplier')
local per = unit_table.per
if per then
local paren1, paren2 = '', '' -- possible parentheses around bottom unit
local unit1 = per[1] -- top unit_table, or nil
local unit2 = per[2] -- bottom unit_table
if abbr_on then
if not unit1 then
unit_table.sep = '' -- no separator in "$2/acre"
end
if not want_link then
local symbol = unit_table.symbol_raw
if symbol then
return symbol -- for exceptions that have the symbol built-in
end
end
if (unit2.symbol):find('⋅', 1, true) then
paren1, paren2 = '(', ')'
end
end
local key_id2 -- unit2 is always singular
if key_id == 'name2' then
key_id2 = 'name1'
elseif key_id == 'name2_us' then
key_id2 = 'name1_us'
else
key_id2 = key_id
end
local result
if abbr_on then
result = '/'
elseif omitsep then
result = per_word
elseif unit1 then
result = ' ' .. per_word .. ' '
else
result = per_word .. ' '
end
if want_link and unit_table.link then
if abbr_on or not varname then
result = (unit1 and linked_id(parms, unit1, key_id, false, clean) or '') .. result .. linked_id(parms, unit2, key_id2, false, '1')
else
result = (unit1 and variable_name(clean, unit1) or '') .. result .. variable_name('1', unit2)
end
if omit_separator(result) then
unit_table.sep = ''
end
return make_link(unit_table.link, result, unit_table)
end
if unit1 then
result = linked_id(parms, unit1, key_id, want_link, clean) .. result
if unit1.sep then
unit_table.sep = unit1.sep
end
elseif omitsep then
unit_table.sep = ''
end
return result .. paren1 .. linked_id(parms, unit2, key_id2, want_link, '1') .. paren2
end
if multiplier then
-- A multiplier (like "100" in "100km") forces the unit to be plural.
multiplier = from_en(multiplier)
if not omitsep then
multiplier = multiplier .. (abbr_on and ' ' or ' ')
end
if not abbr_on then
if key_id == 'name1' then
key_id = 'name2'
elseif key_id == 'name1_us' then
key_id = 'name2_us'
end
end
else
multiplier = ''
end
local id = unit_table.fixed_name or ((varname and not abbr_on) and variable_name(clean, unit_table) or unit_table[key_id])
if omit_separator(id) then
unit_table.sep = ''
end
if want_link then
local link = data_code.link_exceptions[unit_table.linkey or unit_table.symbol] or unit_table.link
if link then
local before = ''
local i = unit_table.customary
if i == 1 and parms.opt_sp_us then
i = 2 -- show "U.S." not "US"
end
if i == 3 and abbr_on then
i = 4 -- abbreviate "imperial" to "imp"
end
local customary = text_code.customary_units[i]
if customary then
-- LATER: This works for language en only, but it's esoteric so ignore for now.
local pertext
if id:sub(1, 1) == '/' then
-- Want unit "/USgal" to display as "/U.S. gal", not "U.S. /gal".
pertext = '/'
id = id:sub(2)
elseif id:sub(1, 4) == 'per ' then
-- Similarly want "per U.S. gallon", not "U.S. per gallon" (but in practice this is unlikely to be used).
pertext = 'per '
id = id:sub(5)
else
pertext = ''
end
-- Omit any "US"/"U.S."/"imp"/"imperial" from start of id since that will be inserted.
local removes = (i < 3) and { 'US ', 'US ', 'U.S. ', 'U.S. ' } or { 'imp ', 'imp ', 'imperial ' }
for _, prefix in ipairs(removes) do
local plen = #prefix
if id:sub(1, plen) == prefix then
id = id:sub(plen + 1)
break
end
end
before = pertext .. make_link(customary.link, customary[1]) .. ' '
end
id = before .. make_link(link, id, unit_table)
end
end
return multiplier .. id
end
local function make_id(parms, which, unit_table)
-- Return id, f where
-- id = unit name or symbol, possibly modified
-- f = true if id is a name, or false if id is a symbol
-- using the value for index 'which', and for 'in' or 'out' (unit_table.inout).
-- Result is '' if no symbol/name is to be used.
-- In addition, set unit_table.sep = ' ' or ' ' or ''
-- (the separator that caller will normally insert before the id).
if parms.opt_values then
unit_table.sep = ''
return ''
end
local inout = unit_table.inout
local info = unit_table.valinfo[which]
local abbr_org = parms.abbr_org
local adjectival = parms.opt_adjectival
local lk = parms.lk
local want_link = (lk == 'on' or lk == inout)
local usename = unit_table.usename
local singular = info.singular
local want_name
if usename then
want_name = true
else
if abbr_org == nil then
if parms.wantname then
want_name = true
end
if unit_table.usesymbol then
want_name = false
end
end
if want_name == nil then
local abbr = parms.abbr
if abbr == 'on' or abbr == inout or (abbr == 'mos' and inout == 'out') then
want_name = false
else
want_name = true
end
end
end
local key
if want_name then
if lk == nil and unit_table.builtin == 'hand' then
want_link = true
end
if parms.opt_use_nbsp then
unit_table.sep = ' '
else
unit_table.sep = ' '
end
if parms.opt_singular then
local value
if inout == 'in' then
value = info.value
else
value = info.absvalue
end
if value then -- some unusual units do not always set value field
value = abs(value)
singular = (0 < value and value < 1.0001)
end
end
if unit_table.engscale then
-- engscale: so "|1|e3kg" gives "1 thousand kilograms" (plural)
singular = false
end
key = (adjectival or singular) and 'name1' or 'name2'
if parms.opt_sp_us then
key = key .. '_us'
end
else
if unit_table.builtin == 'hand' then
if parms.opt_hand_hh then
unit_table.symbol = 'hh' -- LATER: might want i18n applied to this
end
end
unit_table.sep = ' '
key = parms.opt_sp_us and 'sym_us' or 'symbol'
end
return linked_id(parms, unit_table, key, want_link, info.clean), want_name
end
local function decorate_value(parms, unit_table, which, number_word)
-- If needed, update unit_table so values will be shown with extra information.
-- For consistency with the old template (but different from fmtpower),
-- the style to display powers of 10 includes "display:none" to allow some
-- browsers to copy, for example, "10³" as "10^3", rather than as "103".
local info
local engscale = unit_table.engscale
local prefix = unit_table.vprefix
if engscale or prefix then
info = unit_table.valinfo[which]
if info.decorated then
return -- do not redecorate if repeating convert
end
info.decorated = true
if engscale then
local inout = unit_table.inout
local abbr = parms.abbr
if (abbr == 'on' or abbr == inout) and not parms.number_word then
info.show = info.show ..
'<span style="margin-left:0.2em">×<span style="margin-left:0.1em">' ..
from_en('10') ..
'</span></span><s style="display:none">^</s><sup>' ..
from_en(tostring(engscale.exponent)) .. '</sup>'
elseif number_word then
local number_id
local lk = parms.lk
if lk == 'on' or lk == inout then
number_id = make_link(engscale.link, engscale[1])
else
number_id = engscale[1]
end
-- WP:NUMERAL recommends " " in values like "12 million".
info.show = info.show .. (parms.opt_adjectival and '-' or ' ') .. number_id
end
end
if prefix then
info.show = prefix .. info.show
end
end
end
local function process_input(parms, in_current)
-- Processing required once per conversion.
-- Return block of text to represent input (value/unit).
if parms.opt_output_only or parms.opt_output_number_only or parms.opt_output_unit_only then
parms.joins = { '', '' }
return ''
end
local first_unit
local composite = in_current.composite -- nil or table of units
if composite then
first_unit = composite[1]
else
first_unit = in_current
end
local id1, want_name = make_id(parms, 1, first_unit)
local sep = first_unit.sep -- separator between value and unit, set by make_id
local preunit = parms.preunit1
if preunit then
sep = '' -- any separator is included in preunit
else
preunit = ''
end
if parms.opt_input_unit_only then
parms.joins = { '', '' }
if composite then
local parts = { id1 }
for i, unit in ipairs(composite) do
if i > 1 then
table.insert(parts, (make_id(parms, 1, unit)))
end
end
id1 = table.concat(parts, ' ')
end
if want_name and parms.opt_adjectival then
return preunit .. hyphenated(id1)
end
return preunit .. id1
end
if parms.opt_also_symbol and not composite and not parms.opt_flip then
local join1 = parms.joins[1]
if join1 == ' (' or join1 == ' [' then
parms.joins = { ' [' .. first_unit[parms.opt_sp_us and 'sym_us' or 'symbol'] .. ']' .. join1 , parms.joins[2] }
end
end
if in_current.builtin == 'mach' and first_unit.sep ~= '' then -- '' means omitsep with non-enwiki name
local prefix = id1 .. ' '
local range = parms.range
local valinfo = first_unit.valinfo
local result = prefix .. valinfo[1].show
if range then
-- For simplicity and because more not needed, handle one range item only.
local prefix2 = make_id(parms, 2, first_unit) .. ' '
result = range_text(range[1], want_name, parms, result, prefix2 .. valinfo[2].show, 'in', {spaced=true})
end
return preunit .. result
end
if composite then
-- Simplify: assume there is no range, and no decoration.
local mid = (not parms.opt_flip) and parms.mid or ''
local sep1 = ' '
local sep2 = ' '
if parms.opt_adjectival and want_name then
sep1 = '-'
sep2 = '-'
end
if omitsep and sep == '' then
-- Testing the id of the most significant unit should be sufficient.
sep1 = ''
sep2 = ''
end
local parts = { first_unit.valinfo[1].show .. sep1 .. id1 }
for i, unit in ipairs(composite) do
if i > 1 then
table.insert(parts, unit.valinfo[1].show .. sep1 .. (make_id(parms, 1, unit)))
end
end
return table.concat(parts, sep2) .. mid
end
local add_unit = (parms.abbr == 'mos') or
parms[parms.opt_flip and 'out_range_x' or 'in_range_x'] or
(not want_name and parms.abbr_range_x)
local range = parms.range
if range and not add_unit then
unlink(first_unit)
end
local id = range and make_id(parms, range.n + 1, first_unit) or id1
local extra, was_hyphenated = hyphenated_maybe(parms, want_name, sep, id, 'in')
if was_hyphenated then
add_unit = false
end
local result
local valinfo = first_unit.valinfo
if range then
for i = 0, range.n do
local number_word
if i == range.n then
add_unit = false
number_word = true
end
decorate_value(parms, first_unit, i+1, number_word)
local show = valinfo[i+1].show
if add_unit then
show = show .. first_unit.sep .. (i == 0 and id1 or make_id(parms, i+1, first_unit))
end
if i == 0 then
result = show
else
result = range_text(range[i], want_name, parms, result, show, 'in')
end
end
else
decorate_value(parms, first_unit, 1, true)
result = valinfo[1].show
end
return result .. preunit .. extra
end
local function process_one_output(parms, out_current)
-- Processing required for each output unit.
-- Return block of text to represent output (value/unit).
local inout = out_current.inout -- normally 'out' but can be 'in' for order=out
local id1, want_name = make_id(parms, 1, out_current)
local sep = out_current.sep -- set by make_id
local preunit = parms.preunit2
if preunit then
sep = '' -- any separator is included in preunit
else
preunit = ''
end
if parms.opt_output_unit_only then
if want_name and parms.opt_adjectival then
return preunit .. hyphenated(id1)
end
return preunit .. id1
end
if out_current.builtin == 'mach' and out_current.sep ~= '' then -- '' means omitsep with non-enwiki name
local prefix = id1 .. ' '
local range = parms.range
local valinfo = out_current.valinfo
local result = prefix .. valinfo[1].show
if range then
-- For simplicity and because more not needed, handle one range item only.
result = range_text(range[1], want_name, parms, result, prefix .. valinfo[2].show, inout, {spaced=true})
end
return preunit .. result
end
local add_unit = (parms[parms.opt_flip and 'in_range_x' or 'out_range_x'] or
(not want_name and parms.abbr_range_x)) and
not parms.opt_output_number_only
local range = parms.range
if range and not add_unit then
unlink(out_current)
end
local id = range and make_id(parms, range.n + 1, out_current) or id1
local extra, was_hyphenated = hyphenated_maybe(parms, want_name, sep, id, inout)
if was_hyphenated then
add_unit = false
end
local result
local valinfo = out_current.valinfo
if range then
for i = 0, range.n do
local number_word
if i == range.n then
add_unit = false
number_word = true
end
decorate_value(parms, out_current, i+1, number_word)
local show = valinfo[i+1].show
if add_unit then
show = show .. out_current.sep .. (i == 0 and id1 or make_id(parms, i+1, out_current))
end
if i == 0 then
result = show
else
result = range_text(range[i], want_name, parms, result, show, inout)
end
end
else
decorate_value(parms, out_current, 1, true)
result = valinfo[1].show
end
if parms.opt_output_number_only then
return result
end
return result .. preunit .. extra
end
local function make_output_single(parms, in_unit_table, out_unit_table)
-- Return true, item where item = wikitext of the conversion result
-- for a single output (which is not a combination or a multiple);
-- or return false, t where t is an error message table.
if parms.opt_order_out and in_unit_table.unitcode == out_unit_table.unitcode then
out_unit_table.valinfo = in_unit_table.valinfo
else
out_unit_table.valinfo = collection()
for _, v in ipairs(in_unit_table.valinfo) do
local success, info = cvtround(parms, v, in_unit_table, out_unit_table)
if not success then return false, info end
out_unit_table.valinfo:add(info)
end
end
return true, process_one_output(parms, out_unit_table)
end
local function make_output_multiple(parms, in_unit_table, out_unit_table)
-- Return true, item where item = wikitext of the conversion result
-- for an output which is a multiple (like 'ftin');
-- or return false, t where t is an error message table.
local inout = out_unit_table.inout -- normally 'out' but can be 'in' for order=out
local multiple = out_unit_table.multiple -- table of scaling factors (will not be nil)
local combos = out_unit_table.combination -- table of unit tables (will not be nil)
local abbr = parms.abbr
local abbr_org = parms.abbr_org
local disp = parms.disp
local want_name = (abbr_org == nil and (disp == 'or' or disp == 'slash')) or
not (abbr == 'on' or abbr == inout or abbr == 'mos')
local want_link = (parms.lk == 'on' or parms.lk == inout)
local mid = parms.opt_flip and parms.mid or ''
local sep1 = ' '
local sep2 = ' '
if parms.opt_adjectival and want_name then
sep1 = '-'
sep2 = '-'
end
local do_spell = parms.opt_spell_out
parms.opt_spell_out = nil -- so the call to cvtround does not spell the value
local function make_result(info, isfirst)
local fmt, outvalue, sign
local results = {}
for i = 1, #combos do
local tfrac, thisvalue, strforce
local out_current = combos[i]
out_current.inout = inout
local scale = multiple[i]
if i == 1 then -- least significant unit ('in' from 'ftin')
local decimals
out_current.frac = out_unit_table.frac
local success, outinfo = cvtround(parms, info, in_unit_table, out_current)
if not success then return false, outinfo end
if isfirst then
out_unit_table.valinfo = { outinfo } -- in case output value of first least significant unit is needed
end
sign = outinfo.sign
tfrac = outinfo.fraction_table
if outinfo.is_scientific then
strforce = outinfo.show
decimals = ''
elseif tfrac then
decimals = ''
else
local show = outinfo.show -- number as a string in local language
local p1, p2 = show:find(numdot, 1, true)
decimals = p1 and show:sub(p2 + 1) or '' -- text after numdot, if any
end
fmt = '%.' .. ulen(decimals) .. 'f' -- to reproduce precision
if decimals == '' then
if tfrac then
outvalue = floor(outinfo.raw_absvalue) -- integer part only; fraction added later
else
outvalue = floor(outinfo.raw_absvalue + 0.5) -- keep all integer digits of least significant unit
end
else
outvalue = outinfo.absvalue
end
end
if scale then
outvalue, thisvalue = divide(outvalue, scale)
else
thisvalue = outvalue
end
local id
if want_name then
if varname then
local clean
if strforce or tfrac then
clean = '.1' -- dummy value to force name for floating point
else
clean = format(fmt, thisvalue)
end
id = variable_name(clean, out_current)
else
local key = 'name2'
if parms.opt_adjectival then
key = 'name1'
elseif tfrac then
if thisvalue == 0 then
key = 'name1'
end
elseif parms.opt_singular then
if 0 < thisvalue and thisvalue < 1.0001 then
key = 'name1'
end
else
if thisvalue == 1 then
key = 'name1'
end
end
id = out_current[key]
end
else
id = out_current['symbol']
end
if i == 1 and omit_separator(id) then
-- Testing the id of the least significant unit should be sufficient.
sep1 = ''
sep2 = ''
end
if want_link then
local link = out_current.link
if link then
id = make_link(link, id, out_current)
end
end
local strval
local spell_inout = (i == #combos or outvalue == 0) and inout or '' -- trick so the last value processed (first displayed) has uppercase, if requested
if strforce and outvalue == 0 then
sign = '' -- any sign is in strforce
strval = strforce -- show small values in scientific notation; will only use least significant unit
elseif tfrac then
local wholestr = (thisvalue > 0) and tostring(thisvalue) or nil
strval = format_fraction(parms, spell_inout, false, wholestr, tfrac.numstr, tfrac.denstr, do_spell)
else
strval = (thisvalue == 0) and from_en('0') or with_separator(parms, format(fmt, thisvalue))
if do_spell then
strval = spell_number(parms, spell_inout, strval) or strval
end
end
table.insert(results, strval .. sep1 .. id)
if outvalue == 0 then
break
end
fmt = '%.0f' -- only least significant unit can have a non-integral value
end
local reversed, count = {}, #results
for i = 1, count do
reversed[i] = results[count + 1 - i]
end
return true, sign .. table.concat(reversed, sep2)
end
local valinfo = in_unit_table.valinfo
local success, result = make_result(valinfo[1], true)
if not success then return false, result end
local range = parms.range
if range then
for i = 1, range.n do
local success, result2 = make_result(valinfo[i+1])
if not success then return false, result2 end
result = range_text(range[i], want_name, parms, result, result2, inout, {spaced=true})
end
end
return true, result .. mid
end
local function process(parms, in_unit_table, out_unit_table)
-- Return true, s, outunit where s = final wikitext result,
-- or return false, t where t is an error message table.
linked_pages = {}
local success, bad_output
local bad_input_mcode = in_unit_table.bad_mcode -- nil if input unit is a valid convert unit
local out_unit = parms.out_unit
if out_unit == nil or out_unit == '' or type(out_unit) == 'function' then
if bad_input_mcode or parms.opt_input_unit_only then
bad_output = ''
else
local getdef = type(out_unit) == 'function' and out_unit or get_default
success, out_unit = getdef(in_unit_table.valinfo[1].value, in_unit_table)
parms.out_unit = out_unit
if not success then
bad_output = out_unit
end
end
end
if not bad_output and not out_unit_table then
success, out_unit_table = lookup(parms, out_unit, 'any_combination')
if success then
local mismatch = check_mismatch(in_unit_table, out_unit_table)
if mismatch then
bad_output = mismatch
end
else
bad_output = out_unit_table
end
end
local lhs, rhs
local flipped = parms.opt_flip and not bad_input_mcode
if bad_output then
rhs = (bad_output == '') and '' or message(parms, bad_output)
elseif parms.opt_input_unit_only then
rhs = ''
else
local combos -- nil (for 'ft' or 'ftin'), or table of unit tables (for 'm ft')
if not out_unit_table.multiple then -- nil/false ('ft' or 'm ft'), or table of factors ('ftin')
combos = out_unit_table.combination
end
local frac = parms.frac -- nil or denominator of fraction for output values
if frac then
-- Apply fraction to the unit (if only one), or to non-SI units (if a combination),
-- except that if a precision is also specified, the fraction only applies to
-- the hand unit; that allows the following result:
-- {{convert|156|cm|in hand|1|frac=2}} → 156 centimetres (61.4 in; 15.1½ hands)
-- However, the following is handled elsewhere as a special case:
-- {{convert|156|cm|hand in|1|frac=2}} → 156 centimetres (15.1½ hands; 61½ in)
if combos then
local precision = parms.precision
for _, unit in ipairs(combos) do
if unit.builtin == 'hand' or (not precision and not unit.prefixes) then
unit.frac = frac
end
end
else
out_unit_table.frac = frac
end
end
local outputs = {}
local imax = combos and #combos or 1 -- 1 (single unit) or number of unit tables
if imax == 1 then
parms.opt_order_out = nil -- only useful with an output combination
end
if not flipped and not parms.opt_order_out then
-- Process left side first so any duplicate links (from lk=on) are suppressed
-- on right. Example: {{convert|28|e9pc|e9ly|abbr=off|lk=on}}
lhs = process_input(parms, in_unit_table)
end
for i = 1, imax do
local success, item
local out_current = combos and combos[i] or out_unit_table
out_current.inout = 'out'
if i == 1 then
if imax > 1 and out_current.builtin == 'hand' then
out_current.out_next = combos[2] -- built-in hand can influence next unit in a combination
end
if parms.opt_order_out then
out_current.inout = 'in'
end
end
if out_current.multiple then
success, item = make_output_multiple(parms, in_unit_table, out_current)
else
success, item = make_output_single(parms, in_unit_table, out_current)
end
if not success then return false, item end
outputs[i] = item
end
if parms.opt_order_out then
lhs = outputs[1]
table.remove(outputs, 1)
end
local sep = parms.table_joins and parms.table_joins[2] or parms.join_between
rhs = table.concat(outputs, sep)
end
if flipped or not lhs then
local input = process_input(parms, in_unit_table)
if flipped then
lhs = rhs
rhs = input
else
lhs = input
end
end
if parms.join_before then
lhs = parms.join_before .. lhs
end
local wikitext
if bad_input_mcode then
if bad_input_mcode == '' then
wikitext = lhs
else
wikitext = lhs .. message(parms, bad_input_mcode)
end
elseif parms.table_joins then
wikitext = parms.table_joins[1] .. lhs .. parms.table_joins[2] .. rhs
else
wikitext = lhs .. parms.joins[1] .. rhs .. parms.joins[2]
end
if parms.warnings and not bad_input_mcode then
wikitext = wikitext .. parms.warnings
end
return true, get_styles(parms) .. wikitext, out_unit_table
end
local function main_convert(frame)
-- Do convert, and if needed, do it again with higher default precision.
local parms = { frame = frame } -- will hold template arguments, after translation
set_config(frame.args)
local success, result = get_parms(parms, frame:getParent().args)
if success then
if type(result) ~= 'table' then
return tostring(result)
end
local in_unit_table = result
local out_unit_table
for _ = 1, 2 do -- use counter so cannot get stuck repeating convert
success, result, out_unit_table = process(parms, in_unit_table, out_unit_table)
if success and parms.do_convert_again then
parms.do_convert_again = false
else
break
end
end
end
-- If input=x gives a problem, the result should be just the user input
-- (if x is a property like P123 it has been replaced with '').
-- An unknown input unit would display the input and an error message
-- with success == true at this point.
-- Also, can have success == false with a message that outputs an empty string.
if parms.input_text then
if success and not parms.have_problem then
return result
end
local cat
if parms.tracking then
-- Add a tracking category using the given text as the category sort key.
-- There is currently only one type of tracking, but in principle multiple
-- items could be tracked, using different sort keys for convenience.
cat = wanted_category('tracking', parms.tracking)
end
return parms.input_text .. (cat or '')
end
return success and result or message(parms, result)
end
local function _unit(unitcode, options)
-- Helper function for Module:Val to look up a unit.
-- Parameter unitcode must be a string to identify the wanted unit.
-- Parameter options must be nil or a table with optional fields:
-- value = number (for sort key; default value is 1)
-- scaled_top = nil for a normal unit, or a number for a unit which is
-- the denominator of a per unit (for sort key)
-- si = { 'symbol', 'link' }
-- (a table with two strings) to make an SI unit
-- that will be used for the look up
-- link = true if result should be [[linked]]
-- sort = 'on' or 'debug' if result should include a sort key in a
-- span element ('debug' makes the key visible)
-- name = true for the name of the unit instead of the symbol
-- us = true for the US spelling of the unit, if any
-- Return nil if unitcode is not a non-empty string.
-- Otherwise return a table with fields:
-- text = requested symbol or name of unit, optionally linked
-- scaled_value = input value adjusted by unit scale; used for sort key
-- sortspan = span element with sort key like that provided by {{ntsh}},
-- calculated from the result of converting value
-- to a base unit with scale 1.
-- unknown = true if the unitcode was not known
unitcode = strip(unitcode)
if unitcode == nil or unitcode == '' then
return nil
end
set_config({})
linked_pages = {}
options = options or {}
local parms = {
abbr = options.name and 'off' or 'on',
lk = options.link and 'on' or nil,
opt_sp_us = options.us and true or nil,
opt_ignore_error = true, -- do not add pages using this function to 'what links here' for Module:Convert/extra
opt_sortable_on = options.sort == 'on' or options.sort == 'debug',
opt_sortable_debug = options.sort == 'debug',
}
if options.si then
-- Make a dummy table of units (just one unit) for lookup to use.
-- This makes lookup recognize any SI prefix in the unitcode.
local symbol = options.si[1] or '?'
parms.unittable = { [symbol] = {
_name1 = symbol,
_name2 = symbol,
_symbol = symbol,
utype = symbol,
scale = symbol == 'g' and 0.001 or 1,
prefixes = 1,
default = symbol,
link = options.si[2],
}}
end
local success, unit_table = lookup(parms, unitcode, 'no_combination')
if not success then
unit_table = setmetatable({
symbol = unitcode, name2 = unitcode, utype = unitcode,
scale = 1, default = '', defkey = '', linkey = '' }, unit_mt)
end
local value = tonumber(options.value) or 1
local clean = tostring(abs(value))
local info = {
value = value,
altvalue = value,
singular = (clean == '1'),
clean = clean,
show = clean,
}
unit_table.inout = 'in'
unit_table.valinfo = { info }
local sortspan, scaled_value
if options.sort then
sortspan, scaled_value = make_table_or_sort(parms, value, info, unit_table, options.scaled_top)
end
return {
text = make_id(parms, 1, unit_table),
sortspan = sortspan,
scaled_value = scaled_value,
unknown = not success and true or nil,
}
end
return { convert = main_convert, _unit = _unit }
cac541bea61c5fbbcb0a2768343935e97587b60a
Template:Sidebar with collapsible lists/doc
10
1018
2091
2023-05-10T21:13:28Z
[[]]>WOSlinker
0
syntaxhighlight lang="wikitext"
wikitext
text/x-wiki
{{Documentation subpage}}
<!-- Categories go where indicated at the bottom of this page, please; interwikis go to Wikidata (see also: [[Wikipedia:Wikidata]]). -->
{{High-use| 64996 }}
{{Template display|nomobile}}
{{Lua|Module:Sidebar}}
{{tl|Sidebar with collapsible lists}} is a version of {{tl|Sidebar}} which offers [[Help:Collapsing|collapsible]] lists in addition to Sidebar's ''content'' parameters.
== Usage ==
{{Generic template demo
|name={{PAGENAME}} |pretitle |title |image |above |heading1 |list1title |list1 |list2title |list2
|heading3={{{heading{{italics correction|''N''}}}}} |list3title={{{list{{italics correction|''N''}}title}}} |list3={{{list{{italics correction|''N''}}}}} |content4={{{content{{italics correction|''N''}}}}}
|below
}}
Parameters with infrequent use omitted.
<syntaxhighlight lang="wikitext">
{{Sidebar with collapsible lists
| name = {{subst:PAGENAME}}
| pretitle =
| title =
| image =
| templatestyles =
| expanded = {{{expanded|}}}
| heading1 =
| list1name =
| list1title =
| list1 =
| heading2 =
| list2name =
| list2title =
| list2 =
<!-- ...... -->
| headingN = <!-- Template:Sidebar's "headingN" and/or "contentN" parameters (where -->
| contentN = <!-- N is a number) may be used to include uncollapsible lists/content -->
<!-- ...... -->
| below =
}}
</syntaxhighlight>
== Parameters ==
{{further|Template:Sidebar#Parameters}}
This template takes all {{tl|sidebar}} parameters. In addition:
; {{para|list<sub>n</sub>title}}
: The displayed title of the collapsible list<sub>n</sub>.
; {{para|list<sub>n</sub>}}
: The contents of the collapsible list<sub>n</sub>.
; {{para|list<sub>n</sub>class}}
: A class can be added to target a specific list either with TemplateStyles or microformats. See [[Template:Sidebar#Classes]].
: In the context of TemplateStyles, specific list contents can be targeted like so: <code>.templateclass .listnclass .sidebar-list-title</code> for a specific list title and <code>.templateclass .listnclass .sidebar-list</code> for a specific list.
; {{para|expanded}} {{nobold|and}} {{para|list<sub>n</sub>name}}
: {{para|expanded}} is used to indicate which (if any) list named {{para|list<sub>n</sub>name}} is shown expanded when the template is first displayed; see {{tl|Collapsible lists option}}.
; {{para|centered list titles}}
: Set to anything (though {{para|centered list titles|y}} or {{para|centered list titles|yes}} are idiomatic) to make the sidebar list titles centered. This works around some not-great behavior in how centered text interacts with the collapsible toggle.
{{Sidebar with collapsible lists |list1={{{list1}}} without {{{list1title}}} |navbar=off}}
A {{para|list<sub>n</sub>}} without a {{para|list<sub>n</sub>title}} displays the default title ("List").
== Handling long links ==
{{further|Template:Sidebar#Handling long links}}
See [[Template:Sidebar#Handling long links]].
== TemplateStyles ==
The classes available for styling, besides those listed in [[Template:Sidebar#TemplateStyles]], are:
; <code>.sidebar-collapse</code>
: The top-level {{tl|sidebar with collapsible lists}} class.
; <code>.sidebar-list</code>
: The class is a container when either {{para|list<sub>n</sub>title}} or {{para|list<sub>n</sub>}} is provided in {{tl|sidebar with collapsible lists}}.
; <code>.sidebar-list-title</code>
: The class associated with a {{para|list<sub>n</sub>title}}. Every list title will have this class. Use the {{para|centered list titles}} to center text instead of adding CSS here.
; <code>.sidebar-list-content</code>
: The class associated with a {{para|list<sub>n</sub>}}. Every list content will have this class.
== Deprecated parameters ==
{{further|Template:Sidebar#Deprecated parameters}}
These parameters are deprecated for the same reason as the style parameters in {{t|Sidebar}} template.
; ''listtitlestyle'' {{nobold|and}} ''liststyle''
: These are the equivalent of, respectively, {{tl|Collapsible list}}'s ''titlestyle'' and ''liststyle'' parameters.
; ''listframestyle''
: Sets the framestyle (see {{tl|Collapsible list}}) for the lists.
; ''listNframestyle''
: Sets the framestyle for ''listN'', overriding ''listframestyle''.
; ''listNtitlestyle''
: Sets the titlestyle for ''listN'', overriding ''listtitlestyle'' above.
; ''listNstyle''
: Sets the liststyle for ''listN'', overriding ''liststyle'' above.
== See also ==
* {{diff|Template:Sidebar with collapsible lists|next|544062416|Last pre-Lua version}}
* {{tl|Collapsible list}}
* {{tl|Collapsible lists option}}
* {{tl|Navbox with collapsible groups}}
* {{tl|Sidebar}}
* [[Wikipedia:UBLIST]], for help in using unbulleted lists in fields.
<includeonly>{{#ifeq:{{PAGENAME}}|Sidebar with collapsible lists|
<!-- Categories go below this line, please; interwikis go to Wikidata, thank you! -->
[[Category:Sidebar meta-templates]]
[[Category:Collapse templates]]
}}</includeonly>
ad3358062eab0432c04637e90478fb08b0f09bd8
Template:Infobox military operation/doc
10
1069
2199
2023-05-17T08:51:45Z
[[]]>WOSlinker
0
syntaxhighlight lang="wikitext"
wikitext
text/x-wiki
{{#ifeq:{{{noheader|}}}|yes||{{Documentation subpage}}
{{Lua|Module:Infobox|Module:InfoboxImage|Module:Check for unknown parameters}}
}}
This infobox may be used to describe a particular planned or executed military operation or attack. For operations that resulted in combat, it can be used as an auxiliary template to the {{tl|infobox military conflict}}, if necessary; for other types of operations, including those that were planned but never executed, it may be used alone. In the case of conflicts that consisted of multiple independent operations, multiple copies of the box may be used on a single article.
__TOC__
=== Usage ===
{{Parameter names example|_template = Infobox military operation |title |name |partof |conflict |image |image_size |image_upright |alt |caption |coordinates = {{coord|0|0}} |map_type=Earth |map_size= |map_label |map_caption |scope |type |location |coordinates |planned |planned_by |commanded_by |target |objective |date |time |time-begin |time-end |timezone |executed_by |outcome |casualties |fatalities |injuries}}
<syntaxhighlight lang="wikitext" style="overflow:auto;">
{{Infobox military operation
|name =
|partof =
|subtitle =
|image =
|image_upright =
|alt =
|caption =
|scope =
|type =
|location =
|location2 = <!-- 2 through 10 for more locations -->
|coordinates =
|coordinates2 = <!-- 2 through 10 for more locations -->
|map_type =
|map_size =
|map_caption =
|map_label =
|map_label2 = <!-- 2 through 10 for more locations -->
|planned =
|planned_by =
|commanded_by =
|objective =
|target =
|date = <!-- {{start date|YYYY|MM|DD|df=y}} -->
|time =
|time-begin =
|time-end =
|timezone =
|executed_by =
|outcome =
|casualties =
|fatalities =
|injuries =
}}</syntaxhighlight>
=== Example ===
{{Infobox military operation
|name = Case Blue
|scope = Strategic offensive
|planned_by = ''[[Wehrmacht]]''
|objective = Capture of [[Caucasus]] oil fields
|executed = Began {{start date|1942|06|28|df=y}}
|executed_by = [[Army Group South]]
}}
<syntaxhighlight lang="wikitext" style="overflow:auto;">
{{Infobox military operation
|name = Case Blue
|scope = Strategic offensive
|planned_by = ''[[Wehrmacht]]''
|objective = Capture of [[Caucasus]] oil fields
|executed = Began {{start date|1942|06|28|df=y}}
|executed_by = [[Army Group South]]
}}</syntaxhighlight>
=== Parameters ===
'''Note''': When using parameters, avoid the ambiguous abbreviation "N/A", and instead use "unknown" or "none". All subjective or qualitative judgements and numerical quantities or statistics must be cited to a reliable source (see [[WP:MILMOS#CITE]]).
* '''name''' – the name of the operational plan; names in multiple languages may be provided.
* '''subtitle''' – alternative name of the conflict being described.
* '''partof''' – ''optional'' – the larger conflict containing the event described in the article.
* '''image''' – ''optional'' – an image for the warbox. Given in the form <code>File:Example.jpg</code>
* '''image_upright''' – ''optional'' – image upright scaling factor.
* '''alt''' – ''optional'' – [[Wikipedia:Manual of Style/Accessibility/Alternative text for images|Alternative text for image]] that is accessible to [[screen reader]]s to help the [[visually impaired]]
* '''caption''' – ''optional'' – the text to be placed below the image.
* '''location''' – ''optional'' – the location of the operation.
* '''coordinates''' – ''optional'' – the coordinates for the location above, given as {{tl|coord}} with ''|display=inline,title''. Used to display the geographic location of the conflict and the location on a map added with the <code>map_type</code> parameter. If coordinates for several locations are given, consider if hany shall have the title display.
* '''map_type''' – ''optional'' – the base map to be used for the location map, e.g. "Scotland"; see {{tl|location map}} for more details.
* '''map_size''' – ''optional'' – width of the location map in pixels (px), e.g. "150"; defaults to: "220".
* '''map_caption''' – ''optional'' – caption displayed below the location map; defaults to "Location within {{{map_type}}}", e.g. "Location within Scotland".
* '''map_label''' – ''optional'' – the label placed next to the marker on the location map.
* '''scope''' – ''optional'' – the scope of the operation, such as "Strategic", "Operational", or "Tactical".
* '''type''' – ''optional'' – as an alternative to the '''scope''' field above, the type of operation, such as "Suicide attack" or "Ambush".
* '''planned''' – ''optional'' – the date(s) on which the plan was developed.
* '''planned_by''' – ''optional'' – the person or group responsible for developing the plan.
* '''commanded_by''' – ''optional'' – the person commanding the operation.
* '''objective''' – ''optional'' – the objective(s) of the operation.
* '''target''' – ''optional'' – as an alternative to the '''objective''' field above, the target(s) of the operation.
* '''date''' – ''optional'' – the date(s), if any, on which the operation was executed. use {{Tl|Start date}} (and {{Tl|End date}} if required)
* '''time''' – ''optional'' – the time, if any, at which the operation was executed.
* '''time-begin''' and '''time-end''' – ''optional'' – as an alternative to the '''time''' field above, the start and end times, respectively.
* '''timezone''' – ''optional'' – the timezone of the location of the operation; [[UTC]]+X, [[UTC]]-X, or [[UTC]] (i.e. offset from [[UTC]]) is preferred.
* '''executed_by''' – ''optional'' – the people, groups, units, or formations responsible for executing the operation.
* '''outcome''' – ''optional'' – the outcome of the operation from the perspective of the planners.
* '''casualties''' – ''optional'' – any casualties occurring during the execution of the operation.
* '''fatalities''' – ''optional'' – as an alternative to the '''casualties''' field above, the number of fatalities occurring during the execution of the operation.
* '''injuries''' – ''optional'' – as an alternative to the '''casualties''' field above, the number of injuries occurring during the execution of the operation.
=== Microformat ===
{{UF-hcal}}
=== TemplateData ===
{{collapse top|title=[[Wikipedia:TemplateData|TemplateData]] for this template used by [[mw:Extension:TemplateWizard|TemplateWizard]], [[Wikipedia:VisualEditor|VisualEditor]] and other tools}}
{{TemplateData header|noheader=y}}
<templatedata>
{
"description": "This infobox may be used to describe a particular planned or executed military operation or attack.",
"format": "{{_\n| _____________ = _\n}}\n",
"params": {
"name": {
"label": "Name",
"description": "The name of the military operation",
"type": "string",
"suggested": true
}
},
"paramOrder": [
"name"
]
}
</templatedata>
{{collapse bottom}}
=== See also ===
* {{tl|Infobox civil conflict}}
* {{tl|Infobox civilian attack}}
* {{tl|Infobox military conflict}}<noinclude>
[[Category:WikiProject Military history template instructions|Military operation]]
</noinclude>
<includeonly>
{{Sandbox other||{{#ifeq:{{{noheader|}}}|yes||
<!-- Categories below this line; interwikis at Wikidata -->
[[Category:Templates with coordinates fields]]
[[Category:Military auxiliary infobox templates|Military operation]]
[[Category:Templates that add a tracking category|{{PAGENAME}}]]
}}}}</includeonly>
8e4979061f83f9af8d04b1f9f460ccb593e7d740
Module:Infobox/doc
828
92
186
2023-05-19T18:05:05Z
[[w>Andrybak
0
add [[Module:Italic title]] to Lua
wikitext
text/x-wiki
{{High-use|3308957|all-pages = yes}}
{{module rating|protected}}
{{Lua|Module:Navbar|Module:Italic title}}
{{Uses TemplateStyles|Module:Infobox/styles.css|Template:Hlist/styles.css|Template:Plainlist/styles.css}}
'''Module:Infobox''' is a [[WP:Module|module]] that implements the {{tl|Infobox}} template. Please see the template page for usage instructions.
== Tracking categories ==
* {{clc|Pages using infobox templates with ignored data cells}}
* {{clc|Articles using infobox templates with no data rows}}
* {{clc|Pages using embedded infobox templates with the title parameter}}
<includeonly>{{#ifeq:{{SUBPAGENAME}}|sandbox||
[[Category:Modules that add a tracking category]]
[[Category:Wikipedia infoboxes]]
[[Category:Infobox modules]]
[[Category:Modules that check for strip markers]]
}}</includeonly>
936ad219eb263a6f3293d62f667bd7b5db1059c1
Template:PAGENAMEBASE/doc
10
1027
2111
2023-05-21T00:29:51Z
[[]]>Mifield
0
move high-use (high-risk) template to top
wikitext
text/x-wiki
{{high-risk}}
{{Documentation subpage}}
<!-- Please place categories where indicated at the bottom of this page and interwikis at Wikidata (see [[Wikipedia:Wikidata]]) -->
{{lua|Module:String}}
== Usage ==
This template returns the current {{tld|PAGENAME}} minus (text in parentheses) or the final set of parentheses where more than one set exist.
e.g. {{tlx|PAGENAMEBASE}} on page [[Chiton (genus)]] returns {{PAGENAMEBASE|Chiton (genus)}}
::on [[Sweet Dreams (Are Made of This) (album)]] returns {{PAGENAMEBASE|Sweet Dreams (Are Made of This) (album)}}
::on [[Sweet Dreams (Are Made of This)]] returns {{PAGENAMEBASE|Sweet Dreams (Are Made of This)}}
::on [[Stadion der Freundschaft (Frankfurt (Oder))]] returns {{PAGENAMEBASE|Stadion der Freundschaft (Frankfurt (Oder))}}
Can also pass an optional page parameter:
* {{tlc|PAGENAMEBASE|foo (bar)}} → "{{PAGENAMEBASE|foo (bar)}}"
* {{tlc|PAGENAMEBASE|foo bar}} → "{{PAGENAMEBASE|foo bar}}"
It is not to be confused with {{tld|BASEPAGENAME}}, which is a [[mw:Help:Magic words|magic word]] that strips subpages, not parentheses.
== See also ==
* [[Help:Magic words#Variables]]
* [[Template:String-handling templates|String-handling templates]]
* {{tl|PAGENAME}} (variant to strip anything in parentheses from the title)
* {{tl|FULLPAGENAME}} (including namespace)
* {{tl|Link without disambiguator}}
<includeonly>{{Sandbox other|
| <!-- Categories below this line, please; interwikis at Wikidata -->
[[Category:Wikipedia metatemplates]]
[[Category:Wikipedia magic word templates]]
[[Category:Wikipedia article titles]]
}}</includeonly>
e07ae5fc2f5520d36e2e9be95274b14bca091700
Module:Coordinates/styles.css
828
220
446
2023-05-24T21:17:17Z
[[w>Izno
0
per tper
text
text/plain
/* {{pp-template}} */
/* Geographical coordinates defaults. The classes "geo", "longitude", and
"latitude" are used by the [[Geo microformat]]. */
.geo-default,
.geo-dms,
.geo-dec {
display: inline;
}
.geo-nondefault,
.geo-multi-punct,
.geo-inline-hidden {
display: none;
}
.longitude,
.latitude {
white-space: nowrap;
}
1b5d036501a9f6bc9dcf3c9117e8d6bc97507290
Module:Navbox
828
341
715
2023-05-28T13:26:56Z
[[]]>Uzume
0
strict
Scribunto
text/plain
require('strict')
local p = {}
local navbar = require('Module:Navbar')._navbar
local cfg = mw.loadData('Module:Navbox/configuration')
local getArgs -- lazily initialized
local args
local format = string.format
local function striped(wikitext, border)
-- Return wikitext with markers replaced for odd/even striping.
-- Child (subgroup) navboxes are flagged with a category that is removed
-- by parent navboxes. The result is that the category shows all pages
-- where a child navbox is not contained in a parent navbox.
local orphanCat = cfg.category.orphan
if border == cfg.keyword.border_subgroup and args[cfg.arg.orphan] ~= cfg.keyword.orphan_yes then
-- No change; striping occurs in outermost navbox.
return wikitext .. orphanCat
end
local first, second = cfg.class.navbox_odd_part, cfg.class.navbox_even_part
if args[cfg.arg.evenodd] then
if args[cfg.arg.evenodd] == cfg.keyword.evenodd_swap then
first, second = second, first
else
first = args[cfg.arg.evenodd]
second = first
end
end
local changer
if first == second then
changer = first
else
local index = 0
changer = function (code)
if code == '0' then
-- Current occurrence is for a group before a nested table.
-- Set it to first as a valid although pointless class.
-- The next occurrence will be the first row after a title
-- in a subgroup and will also be first.
index = 0
return first
end
index = index + 1
return index % 2 == 1 and first or second
end
end
local regex = orphanCat:gsub('([%[%]])', '%%%1')
return (wikitext:gsub(regex, ''):gsub(cfg.marker.regex, changer)) -- () omits gsub count
end
local function processItem(item, nowrapitems)
if item:sub(1, 2) == '{|' then
-- Applying nowrap to lines in a table does not make sense.
-- Add newlines to compensate for trim of x in |parm=x in a template.
return '\n' .. item ..'\n'
end
if nowrapitems == cfg.keyword.nowrapitems_yes then
local lines = {}
for line in (item .. '\n'):gmatch('([^\n]*)\n') do
local prefix, content = line:match('^([*:;#]+)%s*(.*)')
if prefix and not content:match(cfg.pattern.nowrap) then
line = format(cfg.nowrap_item, prefix, content)
end
table.insert(lines, line)
end
item = table.concat(lines, '\n')
end
if item:match('^[*:;#]') then
return '\n' .. item ..'\n'
end
return item
end
local function has_navbar()
return args[cfg.arg.navbar] ~= cfg.keyword.navbar_off
and args[cfg.arg.navbar] ~= cfg.keyword.navbar_plain
and (
args[cfg.arg.name]
or mw.getCurrentFrame():getParent():getTitle():gsub(cfg.pattern.sandbox, '')
~= cfg.pattern.navbox
)
end
local function renderNavBar(titleCell)
if has_navbar() then
titleCell:wikitext(navbar{
[cfg.navbar.name] = args[cfg.arg.name],
[cfg.navbar.mini] = 1,
[cfg.navbar.fontstyle] = (args[cfg.arg.basestyle] or '') .. ';' ..
(args[cfg.arg.titlestyle] or '') ..
';background:none transparent;border:none;box-shadow:none;padding:0;'
})
end
end
local function renderTitleRow(tbl)
if not args[cfg.arg.title] then return end
local titleRow = tbl:tag('tr')
local titleCell = titleRow:tag('th'):attr('scope', 'col')
local titleColspan = 2
if args[cfg.arg.imageleft] then titleColspan = titleColspan + 1 end
if args[cfg.arg.image] then titleColspan = titleColspan + 1 end
titleCell
:cssText(args[cfg.arg.basestyle])
:cssText(args[cfg.arg.titlestyle])
:addClass(cfg.class.navbox_title)
:attr('colspan', titleColspan)
renderNavBar(titleCell)
titleCell
:tag('div')
-- id for aria-labelledby attribute
:attr('id', mw.uri.anchorEncode(args[cfg.arg.title]))
:addClass(args[cfg.arg.titleclass])
:css('font-size', '114%')
:css('margin', '0 4em')
:wikitext(processItem(args[cfg.arg.title]))
end
local function getAboveBelowColspan()
local ret = 2
if args[cfg.arg.imageleft] then ret = ret + 1 end
if args[cfg.arg.image] then ret = ret + 1 end
return ret
end
local function renderAboveRow(tbl)
if not args[cfg.arg.above] then return end
tbl:tag('tr')
:tag('td')
:addClass(cfg.class.navbox_abovebelow)
:addClass(args[cfg.arg.aboveclass])
:cssText(args[cfg.arg.basestyle])
:cssText(args[cfg.arg.abovestyle])
:attr('colspan', getAboveBelowColspan())
:tag('div')
-- id for aria-labelledby attribute, if no title
:attr('id', (not args[cfg.arg.title]) and mw.uri.anchorEncode(args[cfg.arg.above]) or nil)
:wikitext(processItem(args[cfg.arg.above], args[cfg.arg.nowrapitems]))
end
local function renderBelowRow(tbl)
if not args[cfg.arg.below] then return end
tbl:tag('tr')
:tag('td')
:addClass(cfg.class.navbox_abovebelow)
:addClass(args[cfg.arg.belowclass])
:cssText(args[cfg.arg.basestyle])
:cssText(args[cfg.arg.belowstyle])
:attr('colspan', getAboveBelowColspan())
:tag('div')
:wikitext(processItem(args[cfg.arg.below], args[cfg.arg.nowrapitems]))
end
local function renderListRow(tbl, index, listnum, listnums_size)
local row = tbl:tag('tr')
if index == 1 and args[cfg.arg.imageleft] then
row
:tag('td')
:addClass(cfg.class.noviewer)
:addClass(cfg.class.navbox_image)
:addClass(args[cfg.arg.imageclass])
:css('width', '1px') -- Minimize width
:css('padding', '0 2px 0 0')
:cssText(args[cfg.arg.imageleftstyle])
:attr('rowspan', listnums_size)
:tag('div')
:wikitext(processItem(args[cfg.arg.imageleft]))
end
local group_and_num = format(cfg.arg.group_and_num, listnum)
local groupstyle_and_num = format(cfg.arg.groupstyle_and_num, listnum)
if args[group_and_num] then
local groupCell = row:tag('th')
-- id for aria-labelledby attribute, if lone group with no title or above
if listnum == 1 and not (args[cfg.arg.title] or args[cfg.arg.above] or args[cfg.arg.group2]) then
groupCell
:attr('id', mw.uri.anchorEncode(args[cfg.arg.group1]))
end
groupCell
:attr('scope', 'row')
:addClass(cfg.class.navbox_group)
:addClass(args[cfg.arg.groupclass])
:cssText(args[cfg.arg.basestyle])
-- If groupwidth not specified, minimize width
:css('width', args[cfg.arg.groupwidth] or '1%')
groupCell
:cssText(args[cfg.arg.groupstyle])
:cssText(args[groupstyle_and_num])
:wikitext(args[group_and_num])
end
local listCell = row:tag('td')
if args[group_and_num] then
listCell
:addClass(cfg.class.navbox_list_with_group)
else
listCell:attr('colspan', 2)
end
if not args[cfg.arg.groupwidth] then
listCell:css('width', '100%')
end
local rowstyle -- usually nil so cssText(rowstyle) usually adds nothing
if index % 2 == 1 then
rowstyle = args[cfg.arg.oddstyle]
else
rowstyle = args[cfg.arg.evenstyle]
end
local list_and_num = format(cfg.arg.list_and_num, listnum)
local listText = args[list_and_num]
local oddEven = cfg.marker.oddeven
if listText:sub(1, 12) == '</div><table' then
-- Assume list text is for a subgroup navbox so no automatic striping for this row.
oddEven = listText:find(cfg.pattern.navbox_title) and cfg.marker.restart or cfg.class.navbox_odd_part
end
local liststyle_and_num = format(cfg.arg.liststyle_and_num, listnum)
local listclass_and_num = format(cfg.arg.listclass_and_num, listnum)
listCell
:css('padding', '0')
:cssText(args[cfg.arg.liststyle])
:cssText(rowstyle)
:cssText(args[liststyle_and_num])
:addClass(cfg.class.navbox_list)
:addClass(cfg.class.navbox_part .. oddEven)
:addClass(args[cfg.arg.listclass])
:addClass(args[listclass_and_num])
:tag('div')
:css('padding',
(index == 1 and args[cfg.arg.list1padding]) or args[cfg.arg.listpadding] or '0 0.25em'
)
:wikitext(processItem(listText, args[cfg.arg.nowrapitems]))
if index == 1 and args[cfg.arg.image] then
row
:tag('td')
:addClass(cfg.class.noviewer)
:addClass(cfg.class.navbox_image)
:addClass(args[cfg.arg.imageclass])
:css('width', '1px') -- Minimize width
:css('padding', '0 0 0 2px')
:cssText(args[cfg.arg.imagestyle])
:attr('rowspan', listnums_size)
:tag('div')
:wikitext(processItem(args[cfg.arg.image]))
end
end
local function has_list_class(htmlclass)
local patterns = {
'^' .. htmlclass .. '$',
'%s' .. htmlclass .. '$',
'^' .. htmlclass .. '%s',
'%s' .. htmlclass .. '%s'
}
for arg, _ in pairs(args) do
if type(arg) == 'string' and mw.ustring.find(arg, cfg.pattern.class) then
for _, pattern in ipairs(patterns) do
if mw.ustring.find(args[arg] or '', pattern) then
return true
end
end
end
end
return false
end
-- there are a lot of list classes in the wild, so we add their TemplateStyles
local function add_list_styles()
local frame = mw.getCurrentFrame()
local function add_list_templatestyles(htmlclass, templatestyles)
if has_list_class(htmlclass) then
return frame:extensionTag{
name = 'templatestyles', args = { src = templatestyles }
}
else
return ''
end
end
local hlist_styles = add_list_templatestyles('hlist', cfg.hlist_templatestyles)
local plainlist_styles = add_list_templatestyles('plainlist', cfg.plainlist_templatestyles)
-- a second workaround for [[phab:T303378]]
-- when that issue is fixed, we can actually use has_navbar not to emit the
-- tag here if we want
if has_navbar() and hlist_styles == '' then
hlist_styles = frame:extensionTag{
name = 'templatestyles', args = { src = cfg.hlist_templatestyles }
}
end
-- hlist -> plainlist is best-effort to preserve old Common.css ordering.
-- this ordering is not a guarantee because most navboxes will emit only
-- one of these classes [hlist_note]
return hlist_styles .. plainlist_styles
end
local function needsHorizontalLists(border)
if border == cfg.keyword.border_subgroup or args[cfg.arg.tracking] == cfg.keyword.tracking_no then
return false
end
return not has_list_class(cfg.pattern.hlist) and not has_list_class(cfg.pattern.plainlist)
end
local function hasBackgroundColors()
for _, key in ipairs({cfg.arg.titlestyle, cfg.arg.groupstyle,
cfg.arg.basestyle, cfg.arg.abovestyle, cfg.arg.belowstyle}) do
if tostring(args[key]):find('background', 1, true) then
return true
end
end
return false
end
local function hasBorders()
for _, key in ipairs({cfg.arg.groupstyle, cfg.arg.basestyle,
cfg.arg.abovestyle, cfg.arg.belowstyle}) do
if tostring(args[key]):find('border', 1, true) then
return true
end
end
return false
end
local function isIllegible()
local styleratio = require('Module:Color contrast')._styleratio
for key, style in pairs(args) do
if tostring(key):match(cfg.pattern.style) then
if styleratio{mw.text.unstripNoWiki(style)} < 4.5 then
return true
end
end
end
return false
end
local function getTrackingCategories(border)
local cats = {}
if needsHorizontalLists(border) then table.insert(cats, cfg.category.horizontal_lists) end
if hasBackgroundColors() then table.insert(cats, cfg.category.background_colors) end
if isIllegible() then table.insert(cats, cfg.category.illegible) end
if hasBorders() then table.insert(cats, cfg.category.borders) end
return cats
end
local function renderTrackingCategories(builder, border)
local title = mw.title.getCurrentTitle()
if title.namespace ~= 10 then return end -- not in template space
local subpage = title.subpageText
if subpage == cfg.keyword.subpage_doc or subpage == cfg.keyword.subpage_sandbox
or subpage == cfg.keyword.subpage_testcases then return end
for _, cat in ipairs(getTrackingCategories(border)) do
builder:wikitext('[[Category:' .. cat .. ']]')
end
end
local function renderMainTable(border, listnums)
local tbl = mw.html.create('table')
:addClass(cfg.class.nowraplinks)
:addClass(args[cfg.arg.bodyclass])
local state = args[cfg.arg.state]
if args[cfg.arg.title] and state ~= cfg.keyword.state_plain and state ~= cfg.keyword.state_off then
if state == cfg.keyword.state_collapsed then
state = cfg.class.collapsed
end
tbl
:addClass(cfg.class.collapsible)
:addClass(state or cfg.class.autocollapse)
end
tbl:css('border-spacing', 0)
if border == cfg.keyword.border_subgroup or border == cfg.keyword.border_none then
tbl
:addClass(cfg.class.navbox_subgroup)
:cssText(args[cfg.arg.bodystyle])
:cssText(args[cfg.arg.style])
else -- regular navbox - bodystyle and style will be applied to the wrapper table
tbl
:addClass(cfg.class.navbox_inner)
:css('background', 'transparent')
:css('color', 'inherit')
end
tbl:cssText(args[cfg.arg.innerstyle])
renderTitleRow(tbl)
renderAboveRow(tbl)
local listnums_size = #listnums
for i, listnum in ipairs(listnums) do
renderListRow(tbl, i, listnum, listnums_size)
end
renderBelowRow(tbl)
return tbl
end
local function add_navbox_styles(hiding_templatestyles)
local frame = mw.getCurrentFrame()
-- This is a lambda so that it doesn't need the frame as a parameter
local function add_user_styles(templatestyles)
if templatestyles and templatestyles ~= '' then
return frame:extensionTag{
name = 'templatestyles', args = { src = templatestyles }
}
end
return ''
end
-- get templatestyles. load base from config so that Lua only needs to do
-- the work once of parser tag expansion
local base_templatestyles = cfg.templatestyles
local templatestyles = add_user_styles(args[cfg.arg.templatestyles])
local child_templatestyles = add_user_styles(args[cfg.arg.child_templatestyles])
-- The 'navbox-styles' div exists to wrap the styles to work around T200206
-- more elegantly. Instead of combinatorial rules, this ends up being linear
-- number of CSS rules.
return mw.html.create('div')
:addClass(cfg.class.navbox_styles)
:wikitext(
add_list_styles() .. -- see [hlist_note] applied to 'before base_templatestyles'
base_templatestyles ..
templatestyles ..
child_templatestyles ..
table.concat(hiding_templatestyles)
)
:done()
end
-- work around [[phab:T303378]]
-- for each arg: find all the templatestyles strip markers, insert them into a
-- table. then remove all templatestyles markers from the arg
local function move_hiding_templatestyles(args)
local gfind = string.gfind
local gsub = string.gsub
local templatestyles_markers = {}
local strip_marker_pattern = '(\127[^\127]*UNIQ%-%-templatestyles%-%x+%-QINU[^\127]*\127)'
for k, arg in pairs(args) do
for marker in gfind(arg, strip_marker_pattern) do
table.insert(templatestyles_markers, marker)
end
args[k] = gsub(arg, strip_marker_pattern, '')
end
return templatestyles_markers
end
function p._navbox(navboxArgs)
args = navboxArgs
local hiding_templatestyles = move_hiding_templatestyles(args)
local listnums = {}
for k, _ in pairs(args) do
if type(k) == 'string' then
local listnum = k:match(cfg.pattern.listnum)
if listnum then table.insert(listnums, tonumber(listnum)) end
end
end
table.sort(listnums)
local border = mw.text.trim(args[cfg.arg.border] or args[1] or '')
if border == cfg.keyword.border_child then
border = cfg.keyword.border_subgroup
end
-- render the main body of the navbox
local tbl = renderMainTable(border, listnums)
local res = mw.html.create()
-- render the appropriate wrapper for the navbox, based on the border param
if border == cfg.keyword.border_none then
res:node(add_navbox_styles(hiding_templatestyles))
local nav = res:tag('div')
:attr('role', 'navigation')
:node(tbl)
-- aria-labelledby title, otherwise above, otherwise lone group
if args[cfg.arg.title] or args[cfg.arg.above] or (args[cfg.arg.group1]
and not args[cfg.arg.group2]) then
nav:attr(
'aria-labelledby',
mw.uri.anchorEncode(
args[cfg.arg.title] or args[cfg.arg.above] or args[cfg.arg.group1]
)
)
else
nav:attr('aria-label', cfg.aria_label)
end
elseif border == cfg.keyword.border_subgroup then
-- We assume that this navbox is being rendered in a list cell of a
-- parent navbox, and is therefore inside a div with padding:0em 0.25em.
-- We start with a </div> to avoid the padding being applied, and at the
-- end add a <div> to balance out the parent's </div>
res
:wikitext('</div>')
:node(tbl)
:wikitext('<div>')
else
res:node(add_navbox_styles(hiding_templatestyles))
local nav = res:tag('div')
:attr('role', 'navigation')
:addClass(cfg.class.navbox)
:addClass(args[cfg.arg.navboxclass])
:cssText(args[cfg.arg.bodystyle])
:cssText(args[cfg.arg.style])
:css('padding', '3px')
:node(tbl)
-- aria-labelledby title, otherwise above, otherwise lone group
if args[cfg.arg.title] or args[cfg.arg.above]
or (args[cfg.arg.group1] and not args[cfg.arg.group2]) then
nav:attr(
'aria-labelledby',
mw.uri.anchorEncode(args[cfg.arg.title] or args[cfg.arg.above] or args[cfg.arg.group1])
)
else
nav:attr('aria-label', cfg.aria_label)
end
end
if (args[cfg.arg.nocat] or cfg.keyword.nocat_false):lower() == cfg.keyword.nocat_false then
renderTrackingCategories(res, border)
end
return striped(tostring(res), border)
end
function p.navbox(frame)
if not getArgs then
getArgs = require('Module:Arguments').getArgs
end
args = getArgs(frame, {wrappers = {cfg.pattern.navbox}})
-- Read the arguments in the order they'll be output in, to make references
-- number in the right order.
local _
_ = args[cfg.arg.title]
_ = args[cfg.arg.above]
-- Limit this to 20 as covering 'most' cases (that's a SWAG) and because
-- iterator approach won't work here
for i = 1, 20 do
_ = args[format(cfg.arg.group_and_num, i)]
_ = args[format(cfg.arg.list_and_num, i)]
end
_ = args[cfg.arg.below]
return p._navbox(args)
end
return p
05be9a97c035ab3f0fac69423779e261949d473c
Template:High-use
10
66
136
2023-05-30T09:39:48Z
[[w>Lectonar
0
Changed protection settings for "[[Template:High-use]]": [[WP:High-risk templates|High-risk template or module]] ([Edit=Require template editor access] (indefinite) [Move=Require template editor access] (indefinite))
wikitext
text/x-wiki
{{#invoke:High-use|main|1={{{1|}}}|2={{{2|}}}|info={{{info|}}}|demo={{{demo|}}}|form={{{form|}}}|expiry={{{expiry|}}}|system={{{system|}}}}}<noinclude>
{{Documentation}}
<!-- Add categories to the /doc subpage; interwiki links go to Wikidata, thank you! -->
</noinclude>
a3322d1bd47ac03df14fa2090855cff4fede9bc7
Module:High-use
828
69
142
2023-05-30T11:20:32Z
[[w>Lectonar
0
Changed protection settings for "[[Module:High-use]]": [[WP:High-risk templates|High-risk template or module]] ([Edit=Require template editor access] (indefinite) [Move=Require template editor access] (indefinite))
Scribunto
text/plain
local p = {}
-- _fetch looks at the "demo" argument.
local _fetch = require('Module:Transclusion_count').fetch
local yesno = require('Module:Yesno')
function p.num(frame, count)
if count == nil then
if yesno(frame.args['fetch']) == false then
if (frame.args[1] or '') ~= '' then count = tonumber(frame.args[1]) end
else
count = _fetch(frame)
end
end
-- Build output string
local return_value = ""
if count == nil then
if frame.args[1] == "risk" then
return_value = "a very large number of"
else
return_value = "many"
end
else
-- Use 2 significant figures for smaller numbers and 3 for larger ones
local sigfig = 2
if count >= 100000 then
sigfig = 3
end
-- Prepare to round to appropriate number of sigfigs
local f = math.floor(math.log10(count)) - sigfig + 1
-- Round and insert "approximately" or "+" when appropriate
if (frame.args[2] == "yes") or (mw.ustring.sub(frame.args[1],-1) == "+") then
-- Round down
return_value = string.format("%s+", mw.getContentLanguage():formatNum(math.floor( (count / 10^(f)) ) * (10^(f))) )
else
-- Round to nearest
return_value = string.format("approximately %s", mw.getContentLanguage():formatNum(math.floor( (count / 10^(f)) + 0.5) * (10^(f))) )
end
-- Insert percentage of pages if that is likely to be >= 1% and when |no-percent= not set to yes
if count and count > 250000 and not yesno (frame:getParent().args['no-percent']) then
local percent = math.floor( ( (count/frame:callParserFunction('NUMBEROFPAGES', 'R') ) * 100) + 0.5)
if percent >= 1 then
return_value = string.format("%s pages, or roughly %s%% of all", return_value, percent)
end
end
end
return return_value
end
-- Actions if there is a large (greater than or equal to 100,000) transclusion count
function p.risk(frame)
local return_value = ""
if frame.args[1] == "risk" then
return_value = "risk"
else
local count = _fetch(frame)
if count and count >= 100000 then return_value = "risk" end
end
return return_value
end
function p.text(frame, count)
-- Only show the information about how this template gets updated if someone
-- is actually editing the page and maybe trying to update the count.
local bot_text = (frame:preprocess("{{REVISIONID}}") == "") and "\n\n----\n'''Preview message''': Transclusion count updated automatically ([[Template:High-use/doc#Technical details|see documentation]])." or ''
if count == nil then
if yesno(frame.args['fetch']) == false then
if (frame.args[1] or '') ~= '' then count = tonumber(frame.args[1]) end
else
count = _fetch(frame)
end
end
local title = mw.title.getCurrentTitle()
if title.subpageText == "doc" or title.subpageText == "sandbox" then
title = title.basePageTitle
end
local systemMessages = frame.args['system']
if frame.args['system'] == '' then
systemMessages = nil
end
-- This retrieves the project URL automatically to simplify localiation.
local templateCount = ('on [https://linkcount.toolforge.org/index.php?project=%s&page=%s %s pages]'):format(
mw.title.getCurrentTitle():fullUrl():gsub('//(.-)/.*', '%1'),
mw.uri.encode(title.fullText), p.num(frame, count))
local used_on_text = "'''This " .. (mw.title.getCurrentTitle().namespace == 828 and "Lua module" or "template") .. ' is used ';
if systemMessages then
used_on_text = used_on_text .. systemMessages ..
((count and count > 2000) and ("''', and " .. templateCount) or ("'''"))
else
used_on_text = used_on_text .. templateCount .. "'''"
end
local sandbox_text = ("%s's [[%s/sandbox|/sandbox]] or [[%s/testcases|/testcases]] subpages, or in your own [[%s]]. "):format(
(mw.title.getCurrentTitle().namespace == 828 and "module" or "template"),
title.fullText, title.fullText,
mw.title.getCurrentTitle().namespace == 828 and "Module:Sandbox|module sandbox" or "Wikipedia:User pages#SUB|user subpage"
)
local infoArg = frame.args["info"] ~= "" and frame.args["info"]
if (systemMessages or frame.args[1] == "risk" or (count and count >= 100000) ) then
local info = systemMessages and '.<br/>Changes to it can cause immediate changes to the Wikipedia user interface.' or '.'
if infoArg then
info = info .. "<br />" .. infoArg
end
sandbox_text = info .. '<br /> To avoid major disruption' ..
(count and count >= 100000 and ' and server load' or '') ..
', any changes should be tested in the ' .. sandbox_text ..
'The tested changes can be added to this page in a single edit. '
else
sandbox_text = (infoArg and ('.<br />' .. infoArg .. ' C') or ' and c') ..
'hanges may be widely noticed. Test changes in the ' .. sandbox_text
end
local discussion_text = systemMessages and 'Please discuss changes ' or 'Consider discussing changes '
if frame.args["2"] and frame.args["2"] ~= "" and frame.args["2"] ~= "yes" then
discussion_text = string.format("%sat [[%s]]", discussion_text, frame.args["2"])
else
discussion_text = string.format("%son the [[%s|talk page]]", discussion_text, title.talkPageTitle.fullText )
end
return used_on_text .. sandbox_text .. discussion_text .. " before implementing them." .. bot_text
end
function p.main(frame)
local count = nil
if yesno(frame.args['fetch']) == false then
if (frame.args[1] or '') ~= '' then count = tonumber(frame.args[1]) end
else
count = _fetch(frame)
end
local image = "[[File:Ambox warning yellow.svg|40px|alt=Warning|link=]]"
local type_param = "style"
local epilogue = ''
if frame.args['system'] and frame.args['system'] ~= '' then
image = "[[File:Ambox important.svg|40px|alt=Warning|link=]]"
type_param = "content"
local nocat = frame:getParent().args['nocat'] or frame.args['nocat']
local categorise = (nocat == '' or not yesno(nocat))
if categorise then
epilogue = frame:preprocess('{{Sandbox other||{{#switch:{{#invoke:Effective protection level|{{#switch:{{NAMESPACE}}|File=upload|#default=edit}}|{{FULLPAGENAME}}}}|sysop|templateeditor|interfaceadmin=|#default=[[Category:Pages used in system messages needing protection]]}}}}')
end
elseif (frame.args[1] == "risk" or (count and count >= 100000)) then
image = "[[File:Ambox warning orange.svg|40px|alt=Warning|link=]]"
type_param = "content"
end
if frame.args["form"] == "editnotice" then
return frame:expandTemplate{
title = 'editnotice',
args = {
["image"] = image,
["text"] = p.text(frame, count),
["expiry"] = (frame.args["expiry"] or "")
}
} .. epilogue
else
return require('Module:Message box').main('ombox', {
type = type_param,
image = image,
text = p.text(frame, count),
expiry = (frame.args["expiry"] or "")
}) .. epilogue
end
end
return p
134551888e066954a89c109d2faa8af71a4454a4
Module:Transclusion count
828
70
144
2023-05-30T20:51:38Z
[[w>Isabelle Belato
0
Changed protection settings for "[[Module:Transclusion count]]": [[WP:High-risk templates|Highly visible template]]; requested at [[WP:RfPP]] ([Edit=Require template editor access] (indefinite) [Move=Require template editor access] (indefinite))
Scribunto
text/plain
local p = {}
function p.fetch(frame)
local template = nil
local return_value = nil
-- Use demo parameter if it exists, otherswise use current template name
local namespace = mw.title.getCurrentTitle().namespace
if frame.args["demo"] and frame.args["demo"] ~= "" then
template = mw.ustring.gsub(frame.args["demo"],"^[Tt]emplate:","")
elseif namespace == 10 then -- Template namespace
template = mw.title.getCurrentTitle().text
elseif namespace == 828 then -- Module namespace
template = (mw.site.namespaces[828].name .. ":" .. mw.title.getCurrentTitle().text)
end
-- If in template or module namespace, look up count in /data
if template ~= nil then
namespace = mw.title.new(template, "Template").namespace
if namespace == 10 or namespace == 828 then
template = mw.ustring.gsub(template, "/doc$", "") -- strip /doc from end
template = mw.ustring.gsub(template, "/sandbox$", "") -- strip /sandbox from end
local index = mw.ustring.sub(mw.title.new(template).text,1,1)
local status, data = pcall(function ()
return(mw.loadData('Module:Transclusion_count/data/' .. (mw.ustring.find(index, "%a") and index or "other")))
end)
if status then
return_value = tonumber(data[mw.ustring.gsub(template, " ", "_")])
end
end
end
-- If database value doesn't exist, use value passed to template
if return_value == nil and frame.args[1] ~= nil then
local arg1=mw.ustring.match(frame.args[1], '[%d,]+')
if arg1 and arg1 ~= '' then
return_value = tonumber(frame:callParserFunction('formatnum', arg1, 'R'))
end
end
return return_value
end
-- Tabulate this data for [[Wikipedia:Database reports/Templates transcluded on the most pages]]
function p.tabulate(frame)
local list = {}
for i = 65, 91 do
local data = mw.loadData('Module:Transclusion count/data/' .. ((i == 91) and 'other' or string.char(i)))
for name, count in pairs(data) do
table.insert(list, {mw.title.new(name, "Template").fullText, count})
end
end
table.sort(list, function(a, b)
return (a[2] == b[2]) and (a[1] < b[1]) or (a[2] > b[2])
end)
local lang = mw.getContentLanguage();
for i = 1, #list do
list[i] = ('|-\n| %d || [[%s]] || %s\n'):format(i, list[i][1]:gsub('_', ' '), lang:formatNum(list[i][2]))
end
return table.concat(list)
end
return p
000ef6bcbf7b66e727870b0c300c4009da300513
Template:Campaignbox/doc
10
1066
2193
2023-05-30T21:33:28Z
[[]]>WOSlinker
0
syntaxhighlight lang="wikitext"
wikitext
text/x-wiki
{{#ifeq:{{{noheader|}}}|yes |
| {{Documentation subpage}}
{{Template display|nomobile}}
{{Template redirect|Campaign}}
{{Navbox visibility}}
== Usage ==
}}
{{#switch:{{ARTICLESPACE}}
| Wikipedia =
====Campaignboxes====
| #default =
===Campaignboxes===
}}
One common type of navigational template in articles concerning conflicts, wars and related topics is the '''campaignbox''' template, intended to provide context and convenient navigation among articles on the [[battles]] in a [[Military campaign|campaign]], [[Front (military)|front]], [[Theater (warfare)|theater]] or [[war]] (or, more rarely, among several campaigns or wars).
<div style="float:right;width:26.7em;margin-bottom:1.0em;">
{{Campaignbox Second Punic War}}
{{Campaignbox Punic Wars}}
</div>
If the article includes an [[Help:Infobox|infobox]], the campaignbox/es are usually placed immediately after it (i.e. just below it). If available, as with infoboxes such as {{tl|Infobox military conflict}}, use the infobox's {{para|campaignbox}} parameter:
<div style="width:25.0em;border:1px solid black;background:#ddd;padding:0.5em 1.0em;">
<syntaxhighlight lang="wikitext">
{{Infobox military conflict
...
}}
{{Campaignbox XXXX}}
</syntaxhighlight>or<syntaxhighlight lang="wikitext">
{{Infobox military conflict
...
| campaignbox = {{campaignbox XXXX}}
}}
</syntaxhighlight></div>
Articles may include multiple campaignboxes; typically, these are stacked under the infobox. The most common scenario occurs when two levels of campaignboxes are present – for example, an article about a battle can include both a campaignbox listing the battle itself and an "enclosing" campaignbox listing the campaign, theater or war during which the battle took place. Similarly, an article about a war can include both a campaignbox listing the war (among a series of wars) and a campaignbox for the war itself, listing the battles that took place during it.
=== Creating campaignboxes ===
Existing campaignboxes may be viewed through the [[:Category:Campaignbox templates|Campaignbox template category]] to which campaignboxes are added automatically. If a new campaignbox becomes necessary, it should be named ''Template:Campaignbox XXXX'' (where XXXX is the (shortened) name of the campaign) and should use {{tlf|Campaignbox}} thus:
<div style="width:16.7em;border:1px solid black;background:#ddd;padding:0.5em 1.0em;">
<syntaxhighlight lang="wikitext">
{{Campaignbox
| name =
| title =
| battles =
| notes =
}}
</syntaxhighlight>
</div>
==== Parameters ====
; ''name'' : The name by which Wikipedia refers to the template, i.e. "Template:Campaignbox XXXX". This can be produced by using <code><nowiki>{{subst:PAGENAME}}</nowiki></code>.
; ''title'' : The name of the campaign or war, which, if an article about the campaign or war exists, should link to it. Dates should not be indicated unless needed for clarity. Note that long links may cause alignment problems; see [[WP:MILMOS#NAVPROBLEMS|the troubleshooting guide]] for more information.
; ''battles'' : A chronological list of battles and operations in the campaign, linked as <code><nowiki>[[Battle of YYYY|YYYY]]</nowiki></code>. A convenient and accessible way to separate the items in the list is to add <code>| listclass = hlist</code> and then use the standard <kbd>*</kbd> (asterisk)-based [[Help:List|listing format]].
; ''notes'' : (optional) Any explanatory notes needed to clarify the list. This option should be used sparingly.
; (''raw_name'') : (optional; deprecated) This parameter overrides the use of the title in determining the template name and exists for the sake of backward compatibility. When creating a new campaignbox, both title and name should be specified as above and this parameter omitted.
The following optional parameters are passed on to the templates {{tl|Military navigation}} or {{tl|Navbox}} used to create campaignboxes and so can affect their styling. See these two templates' documentation pages for further details.
; ''state'' : To set whether the campaignbox appears fully visible or collapsed (to titlebar only) when it is first presented by a page.
; ''bodyclass'' : CSS styling to affect the whole template.
; ''listclass'' : CSS styling to affect the list of battles, operations, etc. (e.g. to affect {{para|battles}}).
The use of special formatting (such as bolding or changes in font size) in the list of battles{{spaced ndash}}particularly to mark battles as "important"{{spaced ndash}}is generally discouraged; while there are a ''few'' cases where such approaches may be both helpful to the reader and sufficiently well-sourced that they do not constitute original research, they are usually both unnecessary and potentially confusing. Similarly, dividing the list of battles into multiple blocks by inserting heading-like separations should be exceptional; if such a division is felt to be needed, a better solution may be to split the one campaignbox into two or more.<noinclude>
[[Category:WikiProject Military history template instructions|Campaignbox]]
</noinclude><includeonly>{{Sandbox other||
[[Category:Campaignbox templates| ]]
{{#ifeq:{{{noheader|}}}|yes | |
[[Category:Navigational box wrapper templates]]
[[Category:Military navigational boxes|Campaignbox]]
[[Category:Templates that add a category]]
}}}}</includeonly>
05cb24dd8b2b1a78bab960db82b26ce0d68c3063
Module:InfoboxImage/doc
828
301
608
2023-06-02T00:35:18Z
[[w>Voidxor
0
Use is discouraged per [[WP:THUMBSIZE]]; see {{Para|upright}} below instead.
wikitext
text/x-wiki
{{used in system}}
{{Module rating|protected}}
==Overview==
This module is used within infoboxes to process the image parameters and tidy up the formatting of the result.
==Parameters==
{| class="wikitable"
! Parameter
! Description
|-
| image
| Required. The main parameter that should be passed over which contains the image info.
|-
| size
| Size to display image, in pixels. Use is discouraged per [[WP:THUMBSIZE]]; see {{Para|upright}} below instead.
|-
| maxsize
| Maximum size to display image. Note: If no size or sizedefault params specified then image will be shown at maxsize.
|-
| sizedefault
| The size to use for the image if no size param is specified. Defaults to [[Wikipedia:Autosizing images|frameless]].
|-
| alt
| Alt text for the image.
|-
| title
| Title text for image (mouseover text).
|-
| border
| If yes, then a border is added.
|-
| page
| The page number to be displayed when using a multi-page image.
|-
| upright
| If upright=yes, adds "upright" which displays image at 75% of default image size (which is 220px if not changed at [[Special:Preferences]]). If a value, adds "upright=''value''" to image, where values less than 1 scale the image down (0.9 = 90%) and values greater than 1 scale the image up (1.15 = 115%).
|-
| center
| If yes, then the image is centered.
|-
| thumbtime
| thumbtime param, used for video clips.
|-
| suppressplaceholder
| If no, then will not suppress certain placeholder images. See {{section link||Placeholder images which can be suppressed}}.
|-
| link
| Page to go to when clicking on the image.
|-
| class
| HTML classes to add to the image.
|}
Note: If you specify the maxsize or sizedefault params, then you should include the px after the number.
{{Use dmy dates|date=July 2016}}
==Parameters displayed in image syntax==
All parameters:
:<syntaxhighlight lang="wikitext" style="overflow:auto;">{{#invoke:InfoboxImage | InfoboxImage | image={{{image}}} | size={{{size}}} | maxsize={{{maxsize}}} | sizedefault={{{sizedefault}}} | upright={{{upright}}} | alt={{{alt}}} | title={{{title}}} | thumbtime={{{thumbtime}}} | link={{{link}}} | border=yes | center=yes | page={{{page}}} | class={{{class}}} }}</syntaxhighlight>
:<code>{{#invoke:InfoboxImage | InfoboxImage | image={{{image}}} | size={{{size}}} | maxsize={{{maxsize}}} | sizedefault={{{sizedefault}}} | upright={{{upright}}} | alt={{{alt}}} | title={{{title}}} | thumbtime={{{thumbtime}}} | link={{{link}}} | border=yes | center=yes | page={{{page}}} | class={{{class}}}}}</code>
When "size" and "maxsize" are defined, the smaller of the two is used (if "px" is omitted it will be added by the module):
:<syntaxhighlight lang="wikitext" style="overflow:auto;">{{#invoke:InfoboxImage | InfoboxImage | image={{{image}}} | size=300px | maxsize=250px }}</syntaxhighlight>
:<code>{{#invoke:InfoboxImage | InfoboxImage | image={{{image}}} | size=300px | maxsize=250px }}</code>
When "size" is not defined, "sizedefault" is used, even if larger than "maxsize" (in actual use "px" is required after the number; omitted here to show it is not added by the module):
:<syntaxhighlight lang="wikitext" style="overflow:auto;">{{#invoke:InfoboxImage | InfoboxImage | image={{{image}}} | sizedefault=250px | maxsize=200px }}</syntaxhighlight>
:<code>{{#invoke:InfoboxImage | InfoboxImage | image={{{image}}} | sizedefault=250px | maxsize=200px }}</code>
When "size" and "sizedefault" are not defined, "maxsize" is used (in actual use "px" is required after the number; omitted here to show it is not added by the module):
:<syntaxhighlight lang="wikitext" style="overflow:auto;">{{#invoke:InfoboxImage | InfoboxImage | image={{{image}}} | maxsize=250px }}</syntaxhighlight>
:<code>{{#invoke:InfoboxImage | InfoboxImage | image={{{image}}} | maxsize=250px }}</code>
When "size", "sizedefault", and "maxsize" are not defined, "frameless" is added, which displays the image at the default thumbnail size (220px, but logged in users can change this at [[Special:Preferences]]) and is required if using "upright" to scale the default size:
:<syntaxhighlight lang="wikitext" style="overflow:auto;">{{#invoke:InfoboxImage | InfoboxImage | image={{{image}}} }}</syntaxhighlight>
:<code>{{#invoke:InfoboxImage | InfoboxImage | image={{{image}}} }}</code>
Use of "upright" without a number value, which displays the image at approximately 75% of the user's default size (multiplied by 0.75 then rounded to nearest 10):
:<syntaxhighlight lang="wikitext" style="overflow:auto;">{{#invoke:InfoboxImage | InfoboxImage | image={{{image}}} | upright = yes }}</syntaxhighlight>
:<code>{{#invoke:InfoboxImage | InfoboxImage | image={{{image}}} | upright = yes }}</code>
When "alt" is used without "title", the alt text is also used as the title:
:<syntaxhighlight lang="wikitext" style="overflow:auto;">{{#invoke:InfoboxImage | InfoboxImage | image={{{image}}} | alt = Alt text }}</syntaxhighlight>
:<code>{{#invoke:InfoboxImage | InfoboxImage | image={{{image}}} | alt = Alt text }}</code>
For more information, see [[Wikipedia:Extended image syntax]].
==Sample usage==
<syntaxhighlight lang="wikitext" style="overflow:auto;">
|image = {{#invoke:InfoboxImage|InfoboxImage|image={{{image|}}}|upright={{{image_upright|1}}}|alt={{{alt|}}}}}
</syntaxhighlight>
==Examples==
{| class="wikitable"
|-
| {{mlx|InfoboxImage|InfoboxImage}}
| {{#invoke:InfoboxImage|InfoboxImage}}
|-
| {{mlx|InfoboxImage|InfoboxImage|image{{=}}}}
| {{#invoke:InfoboxImage|InfoboxImage|image=}}
|-
|
{{mlx|InfoboxImage|InfoboxImage|image{{=}}Abbey Rd Studios.jpg}}<br />
{{mlx|InfoboxImage|InfoboxImage|image{{=}}File:Abbey Rd Studios.jpg}}<br />
{{mlx|InfoboxImage|InfoboxImage|image{{=}}Image:Abbey Rd Studios.jpg}}
| {{#invoke:InfoboxImage|InfoboxImage|image=Abbey Rd Studios.jpg}}
|-
|
{{mlx|InfoboxImage|InfoboxImage|image{{=}}Abbey Rd Studios.jpg|upright{{=}}yes}}<br />
| {{#invoke:InfoboxImage|InfoboxImage|image=Abbey Rd Studios.jpg|upright=yes}}
|-
|
{{mlx|InfoboxImage|InfoboxImage|image{{=}}Abbey Rd Studios.jpg|upright{{=}}1.2}}<br />
| {{#invoke:InfoboxImage|InfoboxImage|image=Abbey Rd Studios.jpg|upright=1.2}}
|-
|
{{mlx|InfoboxImage|InfoboxImage|image{{=}}Abbey Rd Studios.jpg|size{{=}}100px}}<br />
{{mlx|InfoboxImage|InfoboxImage|image{{=}}Abbey Rd Studios.jpg|size{{=}}100}}
| {{#invoke:InfoboxImage|InfoboxImage|image=Abbey Rd Studios.jpg|size=100px}}
|-
| {{mlx|InfoboxImage|InfoboxImage|image{{=}}{{elc|Image:Abbey Rd Studios.jpg|200px}}}}
| {{#invoke:InfoboxImage|InfoboxImage|image=[[Image:Abbey Rd Studios.jpg|200px]]}}
|-
| {{mlx|InfoboxImage|InfoboxImage|image{{=}}{{elc|Image:Abbey Rd Studios.jpg|200px}}|title=Abbey Road!}}
| {{#invoke:InfoboxImage|InfoboxImage|image=[[Image:Abbey Rd Studios.jpg|200px]]|title=Abbey Road!}}
|-
| {{mlx|InfoboxImage|InfoboxImage|image{{=}}Abbey Rd Studios.jpg|sizedefault{{=}}250px|alt{{=}}The front stairs and door of Abbey Road Studios}}
| {{#invoke:InfoboxImage|InfoboxImage|image=Abbey Rd Studios.jpg|sizedefault=250px|alt=The front stairs and door of Abbey Road Studios}}
|-
| {{mlx|InfoboxImage|InfoboxImage|image{{=}}Abbey Rd Studios.jpg|sizedefault{{=}}250|alt{{=}}The front stairs and door of Abbey Road Studios}}
| {{#invoke:InfoboxImage|InfoboxImage|image=Abbey Rd Studios.jpg|sizedefault=250|alt=The front stairs and door of Abbey Road Studios}}
|-
| {{mlx|InfoboxImage|InfoboxImage|image{{=}}Abbey Rd Studios.jpg|sizedefault{{=}}250px|alt{{=}}The front stairs and door of Abbey Road Studios|title=Exterior, front view of Abbey Road studios}}
| {{#invoke:InfoboxImage|InfoboxImage|image=Abbey Rd Studios.jpg|sizedefault=250px|alt=The front stairs and door of Abbey Road Studios|title=Exterior, front view of Abbey Road studios}}
|-
| {{mlx|InfoboxImage|InfoboxImage|image{{=}}Abbey Rd Studios.jpg|alt{{=}}The front stairs and door of Abbey Road Studios}}
| {{#invoke:InfoboxImage|InfoboxImage|image=Abbey Rd Studios.jpg|alt=The front stairs and door of Abbey Road Studios}}
|-
| {{mlx|InfoboxImage|InfoboxImage|image{{=}}Abbey Rd Studios.jpg|size{{=}}100px|alt{{=}}The front stairs and door of Abbey Road Studios}}
| {{#invoke:InfoboxImage|InfoboxImage|image=Abbey Rd Studios.jpg|size=100px|alt=The front stairs and door of Abbey Road Studios}}
|-
| {{mlx|InfoboxImage|InfoboxImage|image{{=}}Bandera de Bilbao.svg|size{{=}}100|border{{=}}yes}}
| {{#invoke:InfoboxImage|InfoboxImage|image=Bandera de Bilbao.svg|size=200|border=yes}}
|-
| {{mlx|InfoboxImage|InfoboxImage|image{{=}}Image is needed male.svg}}
| {{#invoke:InfoboxImage|InfoboxImage|image=Image is needed male.svg}}
|-
| {{mlx|InfoboxImage|InfoboxImage|image{{=}}Image is needed male.svg|suppressplaceholder=no}}
| {{#invoke:InfoboxImage|InfoboxImage|image=Image is needed male.svg|suppressplaceholder=no}}
|-
| {{mlx|InfoboxImage|InfoboxImage|image{{=}}{{elc|File:Image is needed male.svg|200px}}}}
| {{#invoke:InfoboxImage|InfoboxImage|image=[[File:Image is needed male.svg|200px]]}}
|-
| {{mlx|InfoboxImage|InfoboxImage|image{{=}}{{elc|File:Image is needed male.svg|200px}}|suppressplaceholder{{=}}no}}
| {{#invoke:InfoboxImage|InfoboxImage|image=[[File:Image is needed male.svg|200px]]|suppressplaceholder=no}}
|-
| {{mlx|InfoboxImage|InfoboxImage|image{{=}}Abbey Rd Studios.jpg|size=50px|maxsize{{=}}100px}}
| {{#invoke:InfoboxImage|InfoboxImage|image=Abbey Rd Studios.jpg|size=50px|maxsize=100px}}
|-
| {{mlx|InfoboxImage|InfoboxImage|image{{=}}Abbey Rd Studios.jpg|size=200px|maxsize{{=}}100px}}
| {{#invoke:InfoboxImage|InfoboxImage|image=Abbey Rd Studios.jpg|size=200px|maxsize=100px}}
|-
| {{mlx|InfoboxImage|InfoboxImage|image{{=}}{{elc|File:Abbey Rd Studios.jpg|200px}}|maxsize{{=}}100px}}
| {{#invoke:InfoboxImage|InfoboxImage|image=[[File:Abbey Rd Studios.jpg|200px]]|maxsize=100px}}
|-
| {{mlx|InfoboxImage|InfoboxImage|image{{=}}Abbey Rd Studios.jpg|maxsize{{=}}100px|center{{=}}yes}}
| {{#invoke:InfoboxImage|InfoboxImage|image=Abbey Rd Studios.jpg|maxsize=100px|center=yes}}
|-
| {{mlx|InfoboxImage|InfoboxImage|image{{=}}no such image|maxsize{{=}}100px|center{{=}}yes}}<!-- this issue sh'd be fixed somewhow-->
| {{#invoke:InfoboxImage|InfoboxImage|image=no such image|maxsize=100px|center=yes}}
|}
== Placeholder images which can be suppressed ==
{|
| style="vertical-align:top;" |
* [[:File:Blue - replace this image female.svg]]
* [[:File:Blue - replace this image male.svg]]
* [[:File:Female no free image yet.png]]
* [[:File:Male no free image yet.png]]
* [[:File:Flag of None (square).svg]]
* [[:File:Flag of None.svg]]
* [[:File:Flag of.svg]]
* [[:File:Green - replace this image female.svg]]
* [[:File:Green - replace this image male.svg]]
* [[:File:Image is needed female.svg]]
* [[:File:Image is needed male.svg]]
* [[:File:Location map of None.svg]]
* [[:File:Male no free image yet.png]]
* [[:File:Missing flag.png]]
* [[:File:No flag.svg]]
* [[:File:No free portrait.svg]]
* [[:File:No portrait (female).svg]]
* [[:File:No portrait (male).svg]]
* [[:File:Red - replace this image female.svg]]
* [[:File:Red - replace this image male.svg]]
* [[:File:Replace this image female (blue).svg]]
* [[:File:Replace this image female.svg]]
* [[:File:Replace this image male (blue).svg]]
* [[:File:Replace this image male.svg]]
* [[:File:Silver - replace this image female.svg]]
* [[:File:Silver - replace this image male.svg]]
* [[:File:Replace this image.svg]]
* [[:File:Cricket no pic.png]]
* [[:File:CarersLogo.gif]]
* [[:File:Diagram Needed.svg]]
* [[:File:Example.jpg]]
* [[:File:Image placeholder.png]]
* [[:File:No male portrait.svg]]
* [[:File:Nocover-upload.png]]
* [[:File:NoDVDcover copy.png]]
* [[:File:Noribbon.svg]]
| style="vertical-align:top;" |
* [[:File:No portrait-BFD-test.svg]]
* [[:File:Placeholder barnstar ribbon.png]]
* [[:File:Project Trains no image.png]]
* [[:File:Image-request.png]]
* [[:File:Sin bandera.svg]]
* [[:File:Sin escudo.svg]]
* [[:File:Replace this image - temple.png]]
* [[:File:Replace this image butterfly.png]]
* [[:File:Replace this image.svg]]
* [[:File:Replace this image1.svg]]
* [[:File:Resolution angle.png]]
* [[:File:Image-No portrait-text-BFD-test.svg]]
* [[:File:Insert image here.svg]]
* [[:File:No image available.png]]
* [[:File:NO IMAGE YET square.png]]
* [[:File:NO IMAGE YET.png]]
* [[:File:No Photo Available.svg]]
* [[:File:No Screenshot.svg]]
* [[:File:No-image-available.jpg]]
* [[:File:Null.png]]
* [[:File:PictureNeeded.gif]]
* [[:File:Place holder.jpg]]
* [[:File:Unbenannt.JPG]]
* [[:File:UploadACopyrightFreeImage.svg]]
* [[:File:UploadAnImage.gif]]
* [[:File:UploadAnImage.svg]]
* [[:File:UploadAnImageShort.svg]]
* [[:File:CarersLogo.gif]]
* [[:File:Diagram Needed.svg]]
* [[:File:No male portrait.svg]]
* [[:File:NoDVDcover copy.png]]
* [[:File:Placeholder barnstar ribbon.png]]
* [[:File:Project Trains no image.png]]
* [[:File:Image-request.png]]
|}
== Tracking categories ==
* {{clc|Pages using infoboxes with thumbnail images}}
<includeonly>{{Sandbox other||
{{DEFAULTSORT:Image, {{PAGENAME}}}}
[[Category:Modules for image handling]]
[[Category:Modules that add a tracking category]]
[[Category:Infobox modules]]
}}</includeonly>
c94fcbc786f35c8e23c8f499b3090efc604852c7
Template:Infobox country/doc
10
330
691
2023-06-18T09:56:36Z
[[]]>LaundryPizza03
0
/* Syntax */
wikitext
text/x-wiki
{{#ifeq:{{{nested|no}}}|no|{{documentation subpage}}{{hatnote|{{tl|Infobox geopolitical organisation}} and {{tl|Infobox former country}} redirect here; related parameters and examples are included below.}}}}
{{High-use}}
{{Lua|Module:Infobox|Module:InfoboxImage|Module:Coordinates|Module:Check for unknown parameters}}
{{Uses TemplateStyles|Template:Infobox country/styles.css}}
This infobox template is used to generate an infobox for the right-hand side of two specific types of article: on a country or territory, or on a geopolitical organisation. Parameter syntax and examples are detailed in the collapsed sections immediately below.
__FORCETOC__
== Syntax ==
<!---------------------- Country/territory use ---------------------->
{{hidden begin |toggle=left |titlestyle=font-size:120%; |title=Country or territory |style=font-size:100%;}}
<syntaxhighlight lang="wikitext" style="overflow:auto;">
{{Infobox country
|micronation = <!--yes if a micronation-->
|conventional_long_name = <!--Formal or official full name of the country in English-->
|native_name = <!--Country's name (usually full name) in its official/defacto language(s), hence in italics (double quotemarks)-->
|common_name = <!--Common name in English (used for wikilinks, captions, and to produce a default iso3166 code)-->
|status = <!--Status of country, especially useful for micronations-->
|image_flag = <!--e.g. Flag of country.svg-->
|alt_flag = <!--alt text for flag (text shown when pointer hovers over flag)-->
|flag_border = <!--set to no to disable border around the flag-->
|image_flag2 = <!--e.g. Second-flag of country.svg-->
|alt_flag2 = <!--alt text for second flag-->
|flag2_border = <!--set to no to disable border around the flag-->
|image_coat = <!--e.g. Coat of arms of country.svg-->
|alt_coat = <!--alt text for coat of arms-->
|symbol_type = <!--emblem, seal, etc (if not a coat of arms)-->
|national_motto = <!--in inverted commas and wikilinked if link exists-->
|englishmotto = <!--English language version of motto-->
|national_anthem = <!--in inverted commas and wikilinked if link exists-->
|royal_anthem = <!--in inverted commas and wikilinked if link exists-->
|other_symbol_type = <!--Use if a further symbol exists, e.g. hymn-->
|other_symbol =
|image_map = <!--e.g. LocationCountry.svg-->
|loctext = <!--text description of location of country-->
|alt_map = <!--alt text for map-->
|map_caption = <!--Caption to place below map-->
|image_map_size = <!--Map size in number of pixels-->
|image_map2 = <!--Another map, if required-->
|alt_map2 = <!--alt text for second map-->
|map_caption2 = <!--Caption to place below second map-->
|image_map2_size = <!--Map size in number of pixels-->
|capital = <!--Name of country/territory's capital, wikilinked if link exists-->
|coordinates = <!-- Coordinates for capital, using {{tl|coord}} -->
|largest_city = <!--Name of country/territory's largest city. Use "capital" (without quotation marks) if it's the capital.-->
|largest_settlement_type = <!--Type of settlement if largest settlement not a city-->
|largest_settlement = <!--Name of largest settlement-->
|official_languages = <!--Languages recognised in legislation, constitution, etc-->
|national_languages = <!--Country/territory-wide languages recognised but not necessarily in country/territory-wide law, etc-->
|regional_languages = <!--Languages recognised or associated with particular regions within the country/territory-->
|languages_type = <!--Use to specify a further type of language, if not official, national or regional-->
|languages = <!--Languages of the further type-->
|languages_sub = <!--Is this further type of language a sub-item of the previous non-sub type? ("yes" or "no")-->
|languages2_type = <!--Another further type of language-->
|languages2 = <!--Languages of this second further type-->
|languages2_sub = <!--Is the second alternative type of languages a sub-item of the previous non-sub type? ("yes" or "no")-->
|ethnic_groups = <!--List/breakdown of ethnic groups within the country/territory-->
|ethnic_groups_year = <!--Year of ethnic groups data (if provided)-->
|ethnic_groups_ref = <!--(for any ref/s to associate with ethnic groups data)-->
|religion = <!--Religion-->
|religion_year = <!--Year of religion data (if provided)-->
|religion_ref = <!--(for any ref/s to associate with religion data)-->
|demonym = <!--Term/s describing those associated with the country/territory (e.g. "Belgian" for the country Belgium)-->
|government_type = <!--(often a compound multi-wikilinked term, e.g. "Federal semi-presidential constitutional republic", etc)-->
|leader_title1 = <!--(for a country, usually the head of state's (wikilinked) title, e.g. "President", "Monarch")-->
|leader_name1 =
|leader_title2 = <!--(could be "Vice President", otherwise "Prime Minster", etc, etc)-->
|leader_name2 =
|leader_title14 = <!--(up to 14 distinct leaders may be included)-->
|leader_name14 =
|legislature = <!--Name of the country/territory's governing body, e.g. "Parliament", "Congress", etc-->
|upper_house = <!--Name of governing body's upper house, if given (e.g. "Senate")-->
|lower_house = <!--Name of governing body's lower house, if given (e.g. "Chamber of Deputies")-->
|sovereignty_type = <!--Brief description of country/territory's status ("Independence [from...]", "Autonomous province [of...]", etc)-->
|sovereignty_note =
|established_event1 = <!--First key event in history of country/territory's status or formation-->
|established_date1 = <!--Date of first key event-->
|established_event2 = <!--Second key event-->
|established_date2 = <!--Date of second key event-->
|established_event13 = <!--(up to 13 distinct events may be included)-->
|established_date13 =
|area_rank =
|area = <!--Major area size (in [[Template:convert]] either km2 or sqmi first)-->
|area_km2 = <!--Major area size (in square km)-->
|area_sq_mi = <!--Area in square mi (requires area_km2)-->
|area_footnote = <!--Optional footnote for area-->
|percent_water =
|area_label = <!--Label under "Area" (default is "Total")-->
|area_label2 = <!--Label below area_label (optional)-->
|area_data2 = <!--Text after area_label2 (optional)-->
|population_estimate =
|population_estimate_rank =
|population_estimate_year =
|population_census =
|population_census_year =
|population_density_km2 =
|population_density_sq_mi =
|population_density_rank =
|nummembers = <!--An alternative to population for micronation-->
|GDP_PPP = <!--(Gross Domestic Product from Purchasing Power Parity)-->
|GDP_PPP_rank =
|GDP_PPP_year =
|GDP_PPP_per_capita =
|GDP_PPP_per_capita_rank =
|GDP_nominal =
|GDP_nominal_rank =
|GDP_nominal_year =
|GDP_nominal_per_capita =
|GDP_nominal_per_capita_rank =
|Gini = <!--(Gini measure of income inequality; input number only; valid values are between 0 and 100)-->
|Gini_ref = <!--(for any ref/s to associate with Gini number)-->
|Gini_rank =
|Gini_year =
|HDI_year = <!-- Please use the year to which the data refers, not the publication year-->
|HDI = <!--(Human Development Index; input number only; valid values are between 0 and 1)-->
|HDI_change = <!--increase/decrease/steady; rank change from previous year-->
|HDI_rank =
|HDI_ref = <!--(for any ref/s to associate with HDI number)-->
|currency = <!--Name/s of currency/ies used in country/territory-->
|currency_code = <!--ISO 4217 code/s for currency/ies (each usually three capital letters)-->
|time_zone = <!--e.g. GMT, PST, AST, etc, etc (wikilinked if possible)-->
|utc_offset = <!--in the form "+N", where N is number of hours offset-->
|time_zone_DST = <!--Link to DST (Daylight Saving Time) used, otherwise leave empty-->
|utc_offset_DST = <!--in the form "+N", where N is number of hours offset-->
|DST_note = <!--Optional note regarding DST use-->
|antipodes = <!--Place/s exactly on the opposite side of the world to country/territory-->
|date_format = <!--all-numeric date format and era, such as [[Common Era|CE]], [[Anno Domini|AD]], [[Hijri year|AH]], etc.; e.g. {{abbr|yyyy|year}}-{{abbr|mm|month}}-{{abbr|dd|day}} ([[Anno Domini|AD]]) -->
|drives_on = <!--"right" or "left" (side of road)-->
|cctld = <!--Internet country code top-level domain identifier (e.g. [[.br]], [[.de]], etc)-->
|iso3166code = <!--ISO code only; no extra text. Use to override default from common_name parameter above; omit using "omit".-->
|calling_code = <!--e.g. [[+1]], [[+531]], [[+44]], etc-->
|patron_saint = <!--Use patron_saints for multiple-->
|image_map3 = <!--Optional third map position, e.g. for use with reference to footnotes below it-->
|alt_map3 = <!--alt text for third map position-->
|footnote_a = <!--For any footnote <sup>a</sup> used above-->
|footnote_b = <!--For any footnote <sup>b</sup> used above-->
|footnote_h = <!--For any footnote <sup>h</sup> used above-->
|footnotes = <!--For any generic non-numbered footnotes-->
}}
</syntaxhighlight>
{{hidden end}}
{{hidden begin |toggle=left|title=France-specific parameters}}<!--(France-specific parameters)-->
Note: Now redundant.
<syntaxhighlight lang="wikitext">
|metropole =
|metropole_area =
|metropole_area_rank =
|metropole_area_magnitude =
|metropole_areami² =
|metropole_population =
|metropole_population_estimate_rank =
|foot =
|foot2 =
|foot3 =
|foot4 =
|foot5 =
</syntaxhighlight>
<!--(France-specific parameters)-->
{{smaller|* If, on a particular page, the default widths provided for the flag and coat-of-arms/symbol images produce an unsatisfactory result, use ''flag_width'' (as % or px) to specify the width to be used for the flag image; the remaining width is then assigned to the coat-of-arms/symbol (if included).}}
{{hidden end}}
<!------------------------- Geopolitical use -------------------------->
{{hidden begin |toggle=left |titlestyle=font-size:120%; |title=Geopolitical organization |style=font-size:100%;}}
<syntaxhighlight lang="wikitext" style="overflow:auto;">
{{Infobox geopolitical organization
|name = <!-- (in English) -->
|native_name = <!-- Long-form name in native or any/all non-English languages -->
|linking_name = <!-- For wikilinks, if diff from name -->
|image_flag = <!-- Flag image's filename -->
|alt_flag = <!-- alt text for flag-->
|flag_border = <!--set to no to disable border around the flag-->
|symbol_type = <!-- Symbol, Emblem, Logo, etc. -->
|image_symbol = <!-- Symbol image's filename -->
|alt_symbol = <!-- alt text for symbol -->
|symbol_width = <!-- Symbol image's width (default 85px) -->
|motto = <!-- "[motto]" -->
|englishmotto = <!--English language version of motto-->
|anthem = <!-- ''[anthem name]'' -->
|text_symbol_type = <!-- for other types of text symbol -->
|text_symbol = <!-- e.g. ''[hymn name]'' -->
|image_map = <!-- Map image's filename -->
|loctext = <!--text description of location of organization-->
|alt_map = <!-- alt text for map image -->
|map_width = <!-- Map image's width (default 250px) -->
|map_caption =
|org_type = <!-- e.g. Trade bloc -->
|membership_type = <!-- (default "Membership") -->
|membership = <!-- Type/s and/or number/s of members -->
|admin_center_type = <!-- e.g. "Administrative center" (default) -->
|admin_center = <!-- Location/s of administrative center/s -->
|languages_type = <!-- e.g. "[[Official language]]s" (default) -->
|languages =
|leader_title1 = <!-- e.g. "Chair", "President", etc. -->
|leader_name1 =
|leader_title2 = <!-- e.g. "Deputy chair", etc. -->
|leader_name2 =
|leader_title14 =
|leader_name14 =
|established = <!-- Usually a date, in lieu of event/s hereafter -->
|established_event1 =
|established_date1 =
|established_event2 =
|established_date2 =
|established_event9 =
|established_date9 =
|official_website =
|area_km2 = <!-- major area size (in sq_km) -->
|area_sq_mi = <!-- area in square mi (requires area_km2) -->
|area_footnote = <!-- optional footnote for area -->
|percent_water =
|area_label = <!-- label under "Area" (default is "Total") -->
|area_label2 = <!-- label below area_label (optional) -->
|area_dabodyalign = <!-- text after area_label2 (optional) -->
|population_estimate =
|population_estimate_year =
|population_density_km2 =
|population_density_sq_mi =
|GDP_PPP =
|GDP_PPP_rank =
|GDP_PPP_year =
|GDP_PPP_per_capita =
|GDP_nominal =
|GDP_nominal_year =
|GDP_nominal_per_capita =
|Gini = <!-- number only, 0-100 -->
|Gini_ref = <!-- for any ref/s to associate with Gini number -->
|Gini_year =
|HDI = <!-- number only, 0-1 -->
|HDI_ref = <!-- for any ref/s to associate with HDI number -->
|HDI_year =
|currency =
|currency_code =
|time_zone =
|utc_offset = <!-- +N, where N is number of hours -->
|footnote1 =
|footnote2 =
|footnote7 =
|footnotes = <!-- For generic non-numbered footnotes -->
}}
</syntaxhighlight>
{{hidden end}}
<!-------------------- Former country use ---------------------->
{{hidden begin |toggle=left |titlestyle=font-size:120%; |title=Former country |style=font-size:100%;}}
<syntaxhighlight lang="wikitext" style="overflow:auto;">
{{Infobox former country
|native_name = <!-- Name in a modern syntax of native language(s). Leave blank if name is only in English.
Separate with line breaks<br/> or use Template:Plainlist. If language uses Latin characters, place name(s) in italics. -->
|conventional_long_name = <!-- Full name in English -->
|common_name = <!-- Name to be used in constructing links and category names; not for display -->
|iso3166code = omit <!-- For a country or geopolitical version of a country that ceased to exist prior to the introduction of iso3166-->
|era = <!-- Use: "Napoleonic Wars", "Cold War", etc. -->
|status = <!-- Status: see Category list on template page -->
|status_text = <!-- A free text to describe status at the top of the infobox. Use sparingly. -->
|empire = <!-- The empire or country to which the entity was in a state of dependency -->
|government_type = <!-- To generate categories: "Monarchy", "Republic", etc. to generate categories -->
<!-- Rise and fall, events, years and dates -->
<!-- only fill in the start/end event entry if a specific article exists. Don't just say "abolition" or "declaration" -->
|event_start = <!-- Default: "Established" -->
|date_start = <!-- Optional: Date of establishment, in format 1 January (no year) -->
|year_start = <!-- Year of establishment -->
|event_end = <!-- Default: "Disestablished" -->
|date_end = <!-- Optional: Date of disestablishment, in format 1 January (no year) -->
|year_end = <!-- Year of disestablishment -->
|year_exile_start = <!-- Year of start of exile (if dealing with exiled government: status="Exile") -->
|year_exile_end = <!-- Year of end of exile (leave blank if still in exile) -->
|event1 = <!-- Optional: other events between "start" and "end" -->
|date_event1 =
|event2 =
|date_event2 =
|event3 =
|date_event3 =
|event4 =
|date_event4 =
|event5 =
|date_event5 =
|event6 =
|date_event6 =
|event_pre = <!-- Optional: A crucial event that took place before "event_start" -->
|date_pre =
|event_post = <!-- Optional: A crucial event that took place after "event_end" -->
|date_post =
<!-- Flag navigation: Preceding and succeeding entities p1 to p5 and s1 to s5 -->
|p1 = <!-- Name of the article for preceding entity, numbered 1-5 -->
|flag_p1 = <!-- Default: "Flag of {{{p1}}}.svg" (size 30) -->
|image_p1 = <!-- Use: [[File:Sin escudo.svg|20px|Image missing]] -->
|p2 =
|flag_p2 =
|p3 =
|flag_p3 =
|p4 =
|flag_p4 =
|p5 =
|flag_p5 =
|s1 = <!-- Name of the article for succeeding entity, numbered 1-5 -->
|flag_s1 = <!-- Default: "Flag of {{{s1}}}.svg" (size 30) -->
|image_s1 = <!-- Use: [[File:Sin escudo.svg|20px|Image missing]] -->
|s2 =
|flag_s2 =
|s3 =
|flag_s3 =
|s4 =
|flag_s4 =
|s5 =
|flag_s5 =
|image_flag = <!-- Default: Flag of {{{common_name}}}.svg -->
|flag_alt = <!-- Alt text for flag -->
|image_flag2 = <!-- Second flag -->
|flag_alt2 = <!-- Alt text for second flag -->
|flag = <!-- Link target under flag image. Default: Flag of {{{common_name}}} -->
|flag2 = <!-- Link target under flag2 image. Default: Flag of {{{common_name}}} -->
|flag_type = <!-- Displayed text for link under flag. Default "Flag" -->
|flag2_type = <!-- Displayed text for link under flag2. Default "Flag" -->
|image_coat = <!-- Default: Coat of arms of {{{common_name}}}.svg -->
|coa_size = <!-- Size of coat of arms -->
|coat_alt = <!-- Alt text for coat of arms -->
|symbol_type = <!-- Displayed text for link under symbol. Default "Coat of arms" -->
|symbol_type_article = <!-- Link target under symbol image. Default: Coat of arms of {{{common_name}}} -->
|image_map =
|image_map_size = <!--Map size in number of pixels-->
|image_map_alt =
|image_map_caption =
|image_map2 = <!-- If second map is needed; does not appear by default -->
|image_map2_size = <!--Map size in number of pixels-->
|image_map2_alt =
|image_map2_caption =
|capital =
|capital_exile = <!-- If status="Exile" -->
|national_motto =
|national_anthem =
|common_languages =
|religion =
|demonym =
|currency =
<!-- Titles and names of the first and last leaders and their deputies -->
|leader1 = <!-- Name of king or president -->
|leader2 =
|leader3 =
|leader4 =
|leader21 = <!--(up to 21 distinct leaders may be included)-->
|year_leader1 = <!-- Years served -->
|year_leader2 =
|year_leader3 =
|year_leader4 =
|year_leader21 =
|title_leader = <!-- Default: "King" for monarchy, otherwise "President" -->
|representative1 = <!-- Name of representative of head of state (e.g. colonial governor) -->
|representative2 =
|representative3 =
|representative4 =
|representative5 =
|year_representative1 = <!-- Years served -->
|year_representative2 =
|year_representative3 =
|year_representative4 =
|year_representative5 =
|title_representative = <!-- Default: "Governor" -->
|deputy1 = <!-- Name of prime minister -->
|deputy2 =
|deputy3 =
|deputy4 =
|year_deputy1 = <!-- Years served -->
|year_deputy2 =
|year_deputy3 =
|year_deputy4 =
|title_deputy = <!-- Default: "Prime minister" -->
<!-- Legislature -->
|legislature = <!-- Name of legislature -->
|house1 = <!-- Name of first chamber -->
|type_house1 = <!-- Default: "Upper house" -->
|house2 = <!-- Name of second chamber -->
|type_house2 = <!-- Default: "Lower house" -->
<!-- Area and population of a given year -->
|stat_year1 = <!-- year of the statistic, specify either area, population or both -->
|stat_area1 = <!-- area in square kilometres (w/o commas or spaces); area in square miles is calculated -->
|stat_pop1 = <!-- population (w/o commas or spaces) -->
|stat_year2 =
|stat_area2 =
|stat_pop2 =
|stat_year3 =
|stat_area3 =
|stat_pop3 =
|stat_year4 =
|stat_area4 =
|stat_pop4 =
|stat_year5 =
|stat_area5 =
|stat_pop5 =
|today = <!-- Present-day countries that overlap with the territorial extent of the former country. Do not use this parameter if there are more than four such countries. --><!-- Do NOT add flags, per MOS:INFOBOXFLAG -->
|footnote_a = <!-- Accepts wikilinks -->
|footnote_b = <!-- Accepts wikilinks -->
...
|footnote_h = <!-- Accepts wikilinks -->
|footnotes = <!-- Accepts wikilinks -->
}}
</syntaxhighlight>
{{hidden end}}
== Examples ==
<!------------------ Country/territory example ------------------->
{{hidden begin |toggle=left |titlestyle=font-size:120%; |title=Country or territory |style=font-size:100%;}}
{{Infobox country
|conventional_long_name = Republic of Cameroon
|native_name = {{lang|fr|République du Cameroun}}
|common_name = Cameroon
|image_flag = Flag of Cameroon.svg
|alt_flag = Vertical tricolor (green, red, yellow) with a five-pointed gold star in the center of the red.
|image_coat = Coat of arms of Cameroon.svg
|symbol_type = Coat of arms
|image_map = Cameroon (orthographic projection).svg
|alt_map = Location of Cameroon on the globe.
|national_motto = <br/>{{native phrase|fr|"Paix – Travail – Patrie"|italics=off}}<br/>{{small|"Peace – Work – Fatherland"}}
|national_anthem = <br/>"{{native phrase|fr|[[O Cameroon, Cradle of our Forefathers|Ô Cameroun, Berceau de nos Ancêtres]]|nolink=yes|italics=off}}"<br/>{{raise|0.2em|{{small|''O Cameroon, Cradle of our Forefathers''}} {{lower|0.1em|<sup>a</sup>}}}}
|official_languages = {{hlist |[[French language|French]] |[[English language|English]]}}
|demonym = Cameroonian
|ethnic_groups =
{{unbulleted list
| {{nowrap|31% [[Ethnic groups in Cameroon|Cameroon Highlanders]]}}
| 19% [[Bantu peoples|Equatorial Bantu]]
| 11% [[Kirdi]]
| 10% [[Fula people|Fulani]]
| {{0|0}}8% [[Bantu peoples|Northwestern Bantu]]
| {{0|0}}7% Eastern Nigritic
| 13% other African
| <1% non-African
}}
|capital = [[Yaoundé]]
|coordinates = {{coord|3|52|N|11|31|E}}
|largest_city = [[Douala]]
|government_type = [[Republic]]
|leader_title1 = [[List of heads of state of Cameroon|President]]
|leader_name1 = [[Paul Biya]]
|leader_title2 = [[Prime Minister of Cameroon|Prime Minister]]
|leader_name2 = [[Philémon Yang]]
|legislature = [[National Assembly (Cameroon)|National Assembly]]
|area_rank = 54th <!--Demographic Yearbook 1.-->
|area_km2 = 475,442
|area_sq_mi = 183,568 <!--Do not remove per [[WP:MOSNUM]]-->
|percent_water = 1.3 <!--CIA World Factbook-->
|population_estimate = 20,129,878
|population_estimate_rank = 58th <!--UN World Population Prospects-->
|population_estimate_year = July 2012
|population_census = 17,463,836
|population_census_year = 2005
|population_density_km2 = 39.7
|population_density_sq_mi = 102.8 <!--Do not remove per [[WP:MOSNUM]]-->
|population_density_rank = 167th <!--UN World Population Prospects-->
|GDP_PPP = $47.251 billion
|GDP_PPP_year = 2011
|GDP_PPP_per_capita = $2,257
|GDP_PPP_per_capita_rank =
|GDP_nominal = $25.759 billion
|GDP_nominal_year = 2011
|GDP_nominal_per_capita = $1,230
|sovereignty_type = Independence {{nobold|from [[France]]}}
|established_event1 = Declared
|established_date1 = 1 January 1960
|established_event2 = {{nowrap|Annexation of former<br/>[[British Cameroons]]}}
|established_date2 = 1 October 1961
|HDI_year = 2011
|HDI_change = increase <!--increase/decrease/steady-->
|HDI = 0.482 <!--number only-->
|HDI_ref =
|HDI_rank = 150th
|Gini_year = 2001
|Gini_change = <!--increase/decrease/steady-->
|Gini = 44.6 <!--number only-->
|Gini_ref =
|Gini_rank =
|currency = [[Central African CFA franc]]
|currency_code = XAF
|time_zone = [[West Africa Time|WAT]]
|utc_offset = +1
|time_zone_DST =
|utc_offset_DST =
|drives_on = right
|calling_code = [[+237]]
|cctld = [[.cm]]
|footnote_a = These are the titles as given in the ''Constitution of the Republic of Cameroon'', Article X. The French version of the song is sometimes called {{lang|fr|Chant de Ralliement}}, as in ''National Anthems of the World''; and the English version "O Cameroon, Cradle of Our Forefathers", as in DeLancey and DeLancey 61.
}}
<syntaxhighlight lang="wikitext" style="overflow:auto;">
{{Infobox country
|conventional_long_name = Republic of Cameroon
|native_name = {{lang|fr|République du Cameroun}}
|common_name = Cameroon
|image_flag = Flag of Cameroon.svg
|alt_flag = Vertical tricolor (green, red, yellow) with a five-pointed gold star in the center of the red.
|image_coat = Coat of arms of Cameroon.svg
|symbol_type = Coat of arms
|image_map = Cameroon (orthographic projection).svg
|alt_map = Location of Cameroon on the globe.
|national_motto = <br/>{{native phrase|fr|"Paix – Travail – Patrie"|italics=off}}<br/>{{small|"Peace – Work – Fatherland"}}
|national_anthem = <br/>"{{native phrase|fr|[[O Cameroon, Cradle of our Forefathers|Ô Cameroun, Berceau de nos Ancêtres]]|nolink=yes|italics=off}}"<br/>{{raise|0.2em|{{small|''O Cameroon, Cradle of our Forefathers''}} {{lower|0.1em|<sup>a</sup>}}}}
|official_languages = {{hlist |[[French language|French]] |[[English language|English]]}}
|demonym = Cameroonian
|ethnic_groups =
{{unbulleted list
| {{nowrap|31% [[Ethnic groups in Cameroon|Cameroon Highlanders]]}}
| 19% [[Bantu peoples|Equatorial Bantu]]
| 11% [[Kirdi]]
| 10% [[Fula people|Fulani]]
| {{0|0}}8% [[Bantu peoples|Northwestern Bantu]]
| {{0|0}}7% Eastern Nigritic
| 13% other African
| <1% non-African
}}
|capital = [[Yaoundé]]
|coordinates = {{coord|3|52|N|11|31|E}}
|largest_city = [[Douala]]
|government_type = [[Republic]]
|leader_title1 = [[List of heads of state of Cameroon|President]]
|leader_name1 = [[Paul Biya]]
|leader_title2 = [[Prime Minister of Cameroon|Prime Minister]]
|leader_name2 = [[Philémon Yang]]
|legislature = [[National Assembly (Cameroon)|National Assembly]]
|area_rank = 54th <!--Demographic Yearbook 1.-->
|area_km2 = 475,442
|area_sq_mi = 183,568 <!--Do not remove per [[WP:MOSNUM]]-->
|percent_water = 1.3 <!--CIA World Factbook-->
|population_estimate = 20,129,878
|population_estimate_rank = 58th <!--UN World Population Prospects-->
|population_estimate_year = July 2012
|population_census = 17,463,836
|population_census_year = 2005
|population_density_km2 = 39.7
|population_density_sq_mi = 102.8 <!--Do not remove per [[WP:MOSNUM]]-->
|population_density_rank = 167th <!--UN World Population Prospects-->
|GDP_PPP = $47.251 billion
|GDP_PPP_year = 2011
|GDP_PPP_per_capita = $2,257
|GDP_PPP_per_capita_rank =
|GDP_nominal = $25.759 billion
|GDP_nominal_year = 2011
|GDP_nominal_per_capita = $1,230
|sovereignty_type = Independence {{nobold|from [[France]]}}
|established_event1 = Declared
|established_date1 = 1 January 1960
|established_event2 = {{nowrap|Annexation of former<br/>[[British Cameroons]]}}
|established_date2 = 1 October 1961
|HDI_year = 2011
|HDI_change = increase <!--increase/decrease/steady-->
|HDI = 0.482 <!--number only-->
|HDI_ref =
|HDI_rank = 150th
|Gini_year = 2001
|Gini_change = <!--increase/decrease/steady-->
|Gini = 44.6 <!--number only-->
|Gini_ref =
|Gini_rank =
|currency = [[Central African CFA franc]]
|currency_code = XAF
|time_zone = [[West Africa Time|WAT]]
|utc_offset = +1
|time_zone_DST = not observed
|utc_offset_DST = +1
|drives_on = right
|calling_code = [[+237]]
|cctld = [[.cm]]
|footnote_a = These are the titles as given in the ''Constitution of the Republic of Cameroon'', Article X. The French version of the song is sometimes called {{lang|fr|Chant de Ralliement}}, as in ''National Anthems of the World''; and the English version "O Cameroon, Cradle of Our Forefathers", as in DeLancey and DeLancey 61.
}}
</syntaxhighlight>
{{hidden end}}
<!-------------- Geopolitical organization example --------------->
{{hidden begin |toggle=left |titlestyle=font-size:120%; |title=Geopolitical organization |style=font-size:100%;}}
{{Infobox geopolitical organization
|name =
{{collapsible list
|titlestyle = background:transparent;text-align:center;font-size:85%;
|title = {{resize|130%|European Union}}
|liststyle = text-align:center;
| {{smaller|{{native name|bg|Европейски съюз}}<br/><!--
-->{{native name|hr|Europska unija}}<br/><!--
-->{{native name|cs|Evropská unie}}<br/><!--
-->{{native name|da|Den Europæiske Union}}<br/><!--
-->{{native name|nl|Europese Unie}}<br /><!--
-->{{native name|et|Euroopa Liit}}<br/><!--
-->{{native name|fi|Euroopan unioni}}<br/><!--
-->{{native name|fr|Union européenne}}<br/><!--
-->{{native name|de|Europäische Union}}<br/><!--
-->{{native name|el|Ευρωπαϊκή Ένωση}}<br/><!--
-->{{native name|hu|Európai Unió}}<br/><!--
-->{{native name|ga|An tAontas Eorpach}}<br/><!--
-->{{native name|it|Unione europea}}<br/><!--
-->{{native name|lv|Eiropas Savienība}}<br/><!--
-->{{native name|lt|Europos Sąjunga}}<br/><!--
-->{{native name|mt|Unjoni Ewropea}}<br/><!--
-->{{native name|pl|Unia Europejska}}<br/><!--
-->{{native name|pt|União Europeia}}<br/><!--
-->{{native name|ro|Uniunea Europeană}}<br/><!--
-->{{native name|sk|Európska únia}}<br/><!--
-->{{native name|sl|Evropska unija}}<br/><!--
-->{{native name|es|Unión Europea}}<br/><!--
-->{{native name|sv|Europeiska unionen}}<!--
-->}}
}}
|linking_name = Europe
|image_flag = Flag of Europe.svg
|alt_flag = Circle of 12 gold stars on a blue background
|motto = "[[Motto of the European Union|United in diversity]]"
|anthem = <div style="padding-bottom:0.2em;">"[[Anthem of Europe|Ode to Joy]]" {{small|(orchestral)}}</div>[[File:Anthem of Europe (US Navy instrumental short version).ogg|center]]
|image_map = EU Globe No Borders.svg
|map_caption = An [[Orthographic projection (cartography)|orthographic projection]] of the world, highlighting the European Union and its Member States (green).
|map_width = 220px
|admin_center_type = Political centres
|admin_center = {{unbulleted list |[[Brussels]] ([[Brussels and the European Union|de facto capital]])|[[Luxembourg (city)|Luxembourg]] |[[Strasbourg]]}}
|largest_city = [[London]]
|official_languages =
{{collapsible list
|titlestyle = background:transparent;text-align:left;font-weight:normal;
|title = [[Languages of the European Union|24 languages]]
| {{hlist |[[Bulgarian language|Bulgarian]] |[[Croatian language|Croatian]] |[[Czech language|Czech]] |[[Danish language|Danish]] |[[Dutch language|Dutch]] |[[English language|English]] |[[Estonian language|Estonian]] |[[Finnish language|Finnish]] |[[French language|French]] |[[German language|German]] |[[Greek language|Greek]] |[[Hungarian language|Hungarian]] |[[Irish language|Irish]] |[[Italian language|Italian]] |[[Latvian language|Latvian]] |[[Lithuanian language|Lithuanian]] |[[Maltese language|Maltese]] |[[Polish language|Polish]] |[[Portuguese language|Portuguese]] |[[Romanian language|Romanian]] |[[Slovak language|Slovak]] |[[Slovene language|Slovene]] |[[Spanish language|Spanish]] |[[Swedish language|Swedish]]}}
}}
|demonym = [[Citizenship of the European Union|European]]
|membership_type = [[Member state of the European Union|Member state]]s
|membership =
{{collapsible list
|titlestyle = background:transparent;text-align:left;font-weight:normal;
|title = 27 states
|{{flagcountry|Austria}} |{{flagcountry|Belgium|state}} |{{flagcountry|Bulgaria}}
|{{flagcountry|Croatia}} |{{flagcountry|Cyprus}} |{{flagcountry|Czech Republic}}
|{{flagcountry|Denmark}} |{{flagcountry|Estonia}} |{{flagcountry|Finland}}
|{{flagcountry|France}} |{{flagcountry|Germany}} |{{flagcountry|Greece}}
|{{flagcountry|Hungary}} |{{flagcountry|Ireland}} |{{flagcountry|Italy}}
|{{flagcountry|Latvia}} |{{flagcountry|Lithuania}} |{{flagcountry|Luxembourg}}
|{{flagcountry|Malta}} |{{flagcountry|Netherlands}} |{{flagcountry|Poland}}
|{{flagcountry|Portugal}} |{{flagcountry|Romania}} |{{flagcountry|Slovakia}}
|{{flagcountry|Slovenia}} |{{flagcountry|Spain}} |{{flagcountry|Sweden}}
}}
|leader_title1 = [[President of the European Council|President of the European Council]]
|leader_name1 = {{nowrap|[[Charles Michel]] ([[Mouvement Réformateur|MR]])}}
|leader_title2 = [[President of the European Commission|President of the Commission]]
|leader_name2 = {{nowrap|[[Ursula von der Leyen]] ([[Christian Democratic Union of Germany|CDU]])}}
|legislature = [[Legislature of the European Union]]
|upper_house = {{nowrap|[[Council of the European Union]]}}
|lower_house = [[European Parliament]]
|established_event1 = [[Treaty of Paris (1951)|Treaty of Paris]]
|established_date1 = 23 July 1952
|established_event2 = [[Treaty of Rome]]
|established_date2 = 1 January 1958
|established_event3 = {{nowrap|[[Maastricht Treaty|Treaty of Maastricht]]}}
|established_date3 = 1 November 1993
|official_website = {{URL|europa.eu}}
|area_rank = 7th<sup>a</sup><!--gives link to list--><!--Calculated by taking out EU members from the list-->
|area_km2 = 4,381,376 <!--Do not remove per [[WP:MOSNUM]]-->
|area_sq_mi = 1,691,658 <!--Do not remove per [[WP:MOSNUM]]-->
|percent_water = 3.08
|population_estimate = 507,890,191
|population_estimate_rank = 3rd<sup>a</sup><!--gives link to list--><!--Calculated by taking out EU members from the list-->
|population_estimate_year = 2012
|population_density_km2 = 116.2 <!--502,486,499 / 4,324,782km2 = 116.2 people/km2 (1 January 2011)-->
|population_density_sq_mi = 300.9 <!--502,486,499 / 1,669,807sq_mi = 300.9 people/sq_mi (1 January 2011)-->
|population_density_rank = <!--Calculated by taking out EU members from the list-->
<!--IMF GDP data published in September 2011; so please do not use the IMF *projections* for 2011-->
|GDP_PPP = $15.821 trillion
|GDP_PPP_rank = 1st<sup>a</sup><!--gives link to list--><!--Calculated by taking out EU members from the list-->
|GDP_PPP_year = 2011
|GDP_PPP_per_capita = $31,607<!--same ref as above-->
|GDP_PPP_per_capita_rank = 15th<sup>a</sup><!--Calculated by taking out EU members from the list-->
|GDP_nominal = $17.577 trillion
|GDP_nominal_rank = 1st<sup>a</sup><!--Calculated by taking out EU members from the list-->
|GDP_nominal_year = 2011
|GDP_nominal_per_capita = $35,116
|GDP_nominal_per_capita_rank = 14th<sup>a</sup><!--gives link to list--><!--Calculated by taking out EU members from the list-->
|Gini_year = 2010
|Gini_change = <!--increase/decrease/steady-->
|Gini = 30.4 <!--number only-->
|Gini_ref =
|Gini_rank =
|HDI_year = 2011
|HDI_change = increase <!--increase/decrease/steady-->
|HDI = 0.876 <!--number only-->
|HDI_ref =
|HDI_rank = 13th<!--Calculated by taking out EU members from the list-->{{\}}25th<sup>a</sup><!--Calculated with EU members in the list-->
|currency =
{{(!}} cellspacing="0" cellpadding="0"
{{!-}} style="height: 22px;"
! colspan="4" style="font-size: 120%; white-space:nowrap" {{!}} [[Eurozone]]{{spaces|2}}{{nobold|{{small|(17 countries)}}}}
{{!-}} style="height: 22px;"
! {{flagicon|EU}}
! [[Euro]]
! [[Euro sign|€]]
! [[ISO 4217|EUR]]
{{!-}} style="height: 22px;"
! colspan="4" style="font-size: 120%;" {{!}} [[Currencies of the European Union|Other currencies]]
{{!-}} style="height: 22px;"
{{!}} {{flagicon|Bulgaria}}
{{!}} [[Bulgarian lev|Lev]]
{{!}} лв
{{!}} [[ISO 4217|BGN]]
{{!-}} style="height: 22px;"
{{!}} {{flagicon|Croatia}}
{{!}} [[Croatian kuna|Kuna]]
{{!}} kn
{{!}} [[ISO 4217|HRK]]
{{!-}} style="height: 22px;"
{{!}} {{flagicon|Czech Republic}}
{{!}} [[Czech koruna|Koruna]]
{{!}} Kč
{{!}} [[ISO 4217|CZK]]
{{!-}} style="height: 22px;"
{{!}} {{flagicon|Denmark}}
{{!}} [[Danish krone|Krone]]
{{!}} kr
{{!}} [[ISO 4217|DKK]]
{{!-}} style="height: 22px;"
{{!}} {{flagicon|Hungary}}
{{!}} [[Hungarian forint|Forint]]
{{!}} Ft
{{!}} [[ISO 4217|HUF]]
{{!-}} style="height: 22px;"
{{!}} {{flagicon|Latvia}}
{{!}} [[Latvian lats|Lats]]
{{!}} Ls
{{!}} [[ISO 4217|LVL]]
{{!-}} style="height: 22px;"
{{!}} {{flagicon|Lithuania}}
{{!}} [[Lithuanian litas|Litas]]
{{!}} Lt
{{!}} [[ISO 4217|LTL]]
{{!-}} style="height: 22px;"
{{!}} {{flagicon|Poland}}
{{!}} [[Polish złoty|Złoty]]
{{!}} zł
{{!}} [[ISO 4217|PLN]]
{{!-}} style="height: 22px;"
{{!}} {{flagicon|Romania}}
{{!}} [[Romanian Leu|Leu]]
{{!}} L
{{!}} [[ISO 4217|RON]]
{{!-}} style="height: 22px;"
{{!}} {{flagicon|Sweden}}
{{!}} [[Swedish krona|Krona]]
{{!}} kr
{{!}} [[ISO 4217|SEK]]
{{!)}}
|time_zone =
|utc_offset = +0 to +2
|time_zone_DST =
|utc_offset_DST = +1 to +3
|date_format =
|cctld = [[.eu]]
|calling_code = [[Telephone numbers in the European Union|27 codes]]
|footnote_a = If considered as a single entity.
}}
<syntaxhighlight lang="wikitext" style="overflow:auto;">
{{Infobox geopolitical organization
|name =
{{collapsible list
|titlestyle = background:transparent;text-align:center;font-size:85%;
|title = {{resize|130%|European Union}}
|liststyle = text-align:center;
| {{smaller|{{native name|bg|Европейски съюз}}<br/><!--
-->{{native name|hr|Europska unija}}<br/><!--
-->{{native name|cs|Evropská unie}}<br/><!--
-->{{native name|da|Den Europæiske Union}}<br/><!--
-->{{native name|nl|Europese Unie}}<br /><!--
-->{{native name|et|Euroopa Liit}}<br/><!--
-->{{native name|fi|Euroopan unioni}}<br/><!--
-->{{native name|fr|Union européenne}}<br/><!--
-->{{native name|de|Europäische Union}}<br/><!--
-->{{native name|el|Ευρωπαϊκή Ένωση}}<br/><!--
-->{{native name|hu|Európai Unió}}<br/><!--
-->{{native name|ga|An tAontas Eorpach}}<br/><!--
-->{{native name|it|Unione europea}}<br/><!--
-->{{native name|lv|Eiropas Savienība}}<br/><!--
-->{{native name|lt|Europos Sąjunga}}<br/><!--
-->{{native name|mt|Unjoni Ewropea}}<br/><!--
-->{{native name|pl|Unia Europejska}}<br/><!--
-->{{native name|pt|União Europeia}}<br/><!--
-->{{native name|ro|Uniunea Europeană}}<br/><!--
-->{{native name|sk|Európska únia}}<br/><!--
-->{{native name|sl|Evropska unija}}<br/><!--
-->{{native name|es|Unión Europea}}<br/><!--
-->{{native name|sv|Europeiska unionen}}<!--
-->}}
}}
|linking_name = Europe
|image_flag = Flag of Europe.svg
|alt_flag = Circle of 12 gold stars on a blue background
|motto = "[[Motto of the European Union|United in diversity]]"
|anthem = <div style="padding-bottom:0.2em;">''[[Anthem of Europe|Ode to Joy]]'' {{small|(orchestral)}}</div>{{center|[[File:Anthem of Europe (US Navy instrumental short version).ogg]]}}
|image_map = EU Globe No Borders.svg
|map_caption = An [[Orthographic projection (cartography)|orthographic projection]] of the world, highlighting the European Union and its Member States (green).
|map_width = 220px
|admin_center_type = Political centres
|admin_center = {{unbulleted list |[[Brussels]] ([[Brussels and the European Union|de facto capital]])|[[Luxembourg (city)|Luxembourg]] |[[Strasbourg]]}}
|largest_city = [[London]]
|official_languages =
{{collapsible list
|titlestyle = background:transparent;text-align:left;font-weight:normal;
|title = [[Languages of the European Union|24 languages]]
| {{hlist |[[Bulgarian language|Bulgarian]] |[[Croatian language|Croatian]] |[[Czech language|Czech]] |[[Danish language|Danish]] |[[Dutch language|Dutch]] |[[English language|English]] |[[Estonian language|Estonian]] |[[Finnish language|Finnish]] |[[French language|French]] |[[German language|German]] |[[Greek language|Greek]] |[[Hungarian language|Hungarian]] |[[Irish language|Irish]] |[[Italian language|Italian]] |[[Latvian language|Latvian]] |[[Lithuanian language|Lithuanian]] |[[Maltese language|Maltese]] |[[Polish language|Polish]] |[[Portuguese language|Portuguese]] |[[Romanian language|Romanian]] |[[Slovak language|Slovak]] |[[Slovene language|Slovene]] |[[Spanish language|Spanish]] |[[Swedish language|Swedish]]}}
}}
|demonym = [[Citizenship of the European Union|European]]
|membership_type = [[Member state of the European Union|Member state]]s
|membership =
{{collapsible list
|titlestyle = background:transparent;text-align:left;font-weight:normal;
|title = 27 states
|{{flagcountry|Austria}} |{{flagcountry|Belgium|state}} |{{flagcountry|Bulgaria}}
|{{flagcountry|Croatia}} |{{flagcountry|Cyprus}} |{{flagcountry|Czech Republic}}
|{{flagcountry|Denmark}} |{{flagcountry|Estonia}} |{{flagcountry|Finland}}
|{{flagcountry|France}} |{{flagcountry|Germany}} |{{flagcountry|Greece}}
|{{flagcountry|Hungary}} |{{flagcountry|Ireland}} |{{flagcountry|Italy}}
|{{flagcountry|Latvia}} |{{flagcountry|Lithuania}} |{{flagcountry|Luxembourg}}
|{{flagcountry|Malta}} |{{flagcountry|Netherlands}} |{{flagcountry|Poland}}
|{{flagcountry|Portugal}} |{{flagcountry|Romania}} |{{flagcountry|Slovakia}}
|{{flagcountry|Slovenia}} |{{flagcountry|Spain}} |{{flagcountry|Sweden}}
}}
|leader_title1 = [[President of the European Council|President of the European Council]]
|leader_name1 = {{nowrap|[[Charles Michel]] ([[Mouvement Réformateur|MR]])}}
|leader_title2 = [[President of the European Commission|President of the Commission]]
|leader_name2 = {{nowrap|[[Ursula von der Leyen]] ([[Christian Democratic Union of Germany|CDU]])}}
|legislature = [[Legislature of the European Union]]
|upper_house = {{nowrap|[[Council of the European Union]]}}
|lower_house = [[European Parliament]]
|established_event1 = [[Treaty of Paris (1951)|Treaty of Paris]]
|established_date1 = 23 July 1952
|established_event2 = [[Treaty of Rome]]
|established_date2 = 1 January 1958
|established_event3 = {{nowrap|[[Maastricht Treaty|Treaty of Maastricht]]}}
|established_date3 = 1 November 1993
|official_website = {{URL|europa.eu}}
|area_rank = 7th<sup>a</sup><!--gives link to list--><!--Calculated by taking out EU members from the list-->
|area_km2 = 4,381,376 <!--Do not remove per [[WP:MOSNUM]]-->
|area_sq_mi = 1,691,658 <!--Do not remove per [[WP:MOSNUM]]-->
|percent_water = 3.08
|population_estimate = 507,890,191
|population_estimate_rank = 3rd<sup>a</sup><!--gives link to list--><!--Calculated by taking out EU members from the list-->
|population_estimate_year = 2012
|population_density_km2 = 116.2 <!--502,486,499 / 4,324,782km2 = 116.2 people/km2 (1 January 2011)-->
|population_density_sq_mi = 300.9 <!--502,486,499 / 1,669,807sq_mi = 300.9 people/sq_mi (1 January 2011)-->
|population_density_rank = <!--Calculated by taking out EU members from the list-->
<!--IMF GDP data published in September 2011; so please do not use the IMF *projections* for 2011-->
|GDP_PPP = $15.821 trillion
|GDP_PPP_rank = 1st<sup>a</sup><!--gives link to list--><!--Calculated by taking out EU members from the list-->
|GDP_PPP_year = 2011
|GDP_PPP_per_capita = $31,607
|GDP_PPP_per_capita_rank = 15th<sup>a</sup><!--Calculated by taking out EU members from the list-->
|GDP_nominal = $17.577 trillion
|GDP_nominal_rank = 1st<sup>a</sup><!--Calculated by taking out EU members from the list-->
|GDP_nominal_year = 2011
|GDP_nominal_per_capita = $35,116
|GDP_nominal_per_capita_rank = 14th<sup>a</sup><!--gives link to list--><!--Calculated by taking out EU members from the list-->
|Gini_year = 2010
|Gini_change = <!--increase/decrease/steady-->
|Gini = 30.4 <!--number only-->
|Gini_ref =
|Gini_rank =
|HDI_year = 2011
|HDI_change = increase <!--increase/decrease/steady-->
|HDI = 0.876 <!--number only-->
|HDI_ref =
|HDI_rank = 13th<!--Calculated by taking out EU members from the list-->{{\}}25th<sup>a</sup><!--Calculated with EU members in the list-->
|currency =
{{(!}} cellspacing="0" cellpadding="0"
{{!-}} style="height: 22px;"
! colspan="4" style="font-size: 120%; white-space:nowrap" {{!}} [[Eurozone]]{{spaces|2}}{{nobold|{{small|(17 countries)}}}}
{{!-}} style="height: 22px;"
! {{flagicon|EU}}
! [[Euro]]
! [[Euro sign|€]]
! [[ISO 4217|EUR]]
{{!-}} style="height: 22px;"
! colspan="4" style="font-size: 120%;" {{!}} [[Currencies of the European Union|Other currencies]]
{{!-}} style="height: 22px;"
{{!}} {{flagicon|Bulgaria}}
{{!}} [[Bulgarian lev|Lev]]
{{!}} лв
{{!}} [[ISO 4217|BGN]]
{{!-}} style="height: 22px;"
{{!}} {{flagicon|Croatia}}
{{!}} [[Croatian kuna|Kuna]]
{{!}} kn
{{!}} [[ISO 4217|HRK]]
{{!-}} style="height: 22px;"
{{!}} {{flagicon|Czech Republic}}
{{!}} [[Czech koruna|Koruna]]
{{!}} Kč
{{!}} [[ISO 4217|CZK]]
{{!-}} style="height: 22px;"
{{!}} {{flagicon|Denmark}}
{{!}} [[Danish krone|Krone]]
{{!}} kr
{{!}} [[ISO 4217|DKK]]
{{!-}} style="height: 22px;"
{{!}} {{flagicon|Hungary}}
{{!}} [[Hungarian forint|Forint]]
{{!}} Ft
{{!}} [[ISO 4217|HUF]]
{{!-}} style="height: 22px;"
{{!}} {{flagicon|Latvia}}
{{!}} [[Latvian lats|Lats]]
{{!}} Ls
{{!}} [[ISO 4217|LVL]]
{{!-}} style="height: 22px;"
{{!}} {{flagicon|Lithuania}}
{{!}} [[Lithuanian litas|Litas]]
{{!}} Lt
{{!}} [[ISO 4217|LTL]]
{{!-}} style="height: 22px;"
{{!}} {{flagicon|Poland}}
{{!}} [[Polish złoty|Złoty]]
{{!}} zł
{{!}} [[ISO 4217|PLN]]
{{!-}} style="height: 22px;"
{{!}} {{flagicon|Romania}}
{{!}} [[Romanian Leu|Leu]]
{{!}} L
{{!}} [[ISO 4217|RON]]
{{!-}} style="height: 22px;"
{{!}} {{flagicon|Sweden}}
{{!}} [[Swedish krona|Krona]]
{{!}} kr
{{!}} [[ISO 4217|SEK]]
{{!)}}
|time_zone =
|utc_offset = +0 to +2
|time_zone_DST =
|utc_offset_DST = +1 to +3
|date_format =
|cctld = [[.eu]]
|calling_code = [[Telephone numbers in the European Union|27 codes]]
|footnote_a = If considered as a single entity.
}}
</syntaxhighlight>
{{hidden end}}
<!------------------ Former country example ------------------->
{{hidden begin |toggle=left |titlestyle=font-size:120%; |title=Former country |style=font-size:100%;}}
{{Infobox former country
|native_name = ''Deutsches Reich''
|conventional_long_name = German Empire
|common_name = Germany
|iso3166code = omit
|status = Empire
|era = [[New Imperialism]]/[[World War I|WWI]]
|event_start = [[Unification of Germany|Unification]]
|date_start = 18 January
|year_start = 1871
|event_end = [[German Revolution of 1918–1919|Republic declared]]
|date_end = 9 November
|year_end = 1918
|event_post = Formal abdication
|date_post = 28 November 1918
|p1 = North German Confederation
|flag_p1 = Flag of the German Empire.svg
|p2 = Kingdom of Bavaria
|flag_p2 = Flag of Bavaria (striped).svg
|p3 = Kingdom of Württemberg
|flag_p3 = Flagge Königreich Württemberg.svg
|p4 = Grand Duchy of Baden
|flag_p4 = Flagge Großherzogtum Baden (1871-1891).svg
|p5 = Grand Duchy of Hesse
|flag_p5 = Flagge_Großherzogtum_Hessen_ohne_Wappen.svg
|p6 = Alsace-Lorraine
|flag_p6 = Flag of France.svg
|s1 = Weimar Republic
|s2 = Republic of Alsace-Lorraine
|s3 = Free City of Danzig
|s4 = Second Polish Republic
|s5 = Klaipėda Region
|s6 = Saar (League of Nations)
|s7 = Hlučín Region
|s8 = South Jutland County{{!}}Northern Schleswig
|s9 = Eupen-Malmedy
|flag_s1 = Flag of Germany (3-2 aspect ratio).svg
|flag_s2 = Flag of the Republic of Alsace-Lorraine.svg
|flag_s3 = Gdansk flag.svg
|flag_s4 = Flag of Poland.svg
|flag_s5 = Flag of Lithuania 1918-1940.svg
|flag_s6 = Flag of Saar 1920-1935.svg
|flag_s7 = Flag of Bohemia.svg
|flag_s8 = Flag of Denmark.svg
|flag_s9 = Flag of Belgium.svg
|image_flag = Flag of the German Empire.svg
|flag_alt = Horizontal tricolor (black, white, red)
|flag_caption = Flag of the German Empire
|image_coat = Wappen Deutsches Reich - Reichsadler 1889.svg
|symbol_type = Imperial Coat of arms
|coat_alt = Shield containing a black, one-headed, rightward-looking eagle with red beak, tongue and claws. On its breast is a shield with another eagle. Over its head is an imperial crown with two crossing ribbons.
|image_map = German Empire, Wilhelminian third version.svg
|image_map_alt = Located in north central Europe, containing modern Germany plus much of modern Poland
|image_map_caption = Territory of the German Empire in 1914, prior to [[World War I]]
|national_motto = ''[[Gott mit uns]]''<br/>{{small|"God with us"}}
|national_anthem = {{plainlist|
* ''(none official)''
* "[[Heil dir im Siegerkranz]]" (Imperial)
* "[[Deutschlandlied]]" (popular)
* "[[Die Wacht am Rhein]]" (unofficial)
}}
|capital = Berlin
|common_languages =
;Official language
:[[German language|German]]
;Unofficial minority languages
:[[Danish language|Danish]], [[French language|French]], [[Polish language|Polish]], [[Saterland Frisian language|Frisian]], [[Old Prussian language|Old Prussian]], [[Lithuanian language|Lithuanian]]
;Colonial languages
:[[Bantu languages|Bantu]], [[Oshiwambo]], [[Afrikaans]], [[Swahili language|Swahili]] (African Colonies)
:[[Chinese language|Chinese]] (Tsingtao & Jiaozhou bay)
:[[Papuan languages]] (German New Guinea)
:[[Samoan language|Samoan]] (German Samoa)
|government_type = Constitutional monarchy
|title_leader = [[German Emperor|Emperor]]
|leader1 = [[William I, German Emperor|William I]]
|year_leader1 = 1871–1888
|leader2 = [[Frederick III, German Emperor|Frederick III]]
|year_leader2 = 1888
|leader3 = [[Wilhelm II, German Emperor|Wilhelm II]]
|year_leader3 = 1888–1918
|title_deputy = [[List of Chancellors of Germany|Chancellor]]
|deputy1 = [[Otto von Bismarck]] (first)
|year_deputy1 = 1871–1890
|deputy2 = [[Friedrich Ebert]] (last)
|year_deputy2 = 8–9 Nov 1918
|legislature = [[Reichstag (German Empire)|Reichstag]]
|house1 = [[Reichsrat (Germany)|Reichsrat]]
|type_house1 = State council
|stat_year1 = 1871
|religion = {{plainlist|
* [[Lutherans]]~60%
* [[Roman Catholics]]~40%
}}
|stat_pop1 = {{formatnum:41058792}}
|stat_year2 = 1890
|stat_pop2 = {{formatnum:49428470}}
|stat_year4 = 1910
|stat_pop4 = {{formatnum:64925993}}
|stat_area4 = 540857.54
|currency = {{plainlist|
* [[Vereinsthaler]], [[South German gulden]], [[Bremen thaler]], [[Hamburg mark]], [[French franc]] {{small|(until 1873, together)}}
* [[German gold mark|Goldmark]] {{small|(1873–1914)}}
* [[German Papiermark|Papiermark]] {{small|(after 1914)}}
}}
|footnotes = Area and population not including colonial possessions
|today =
}}
<syntaxhighlight lang="wikitext" style="overflow:auto;">
{{Infobox former country
|native_name = ''Deutsches Reich''
|conventional_long_name = German Empire
|common_name = Germany
|iso3166code = omit
|status = Empire
|era = [[New Imperialism]]/[[World War I|WWI]]
|event_start = [[Unification of Germany|Unification]]
|date_start = 18 January
|year_start = 1871
|event_end = [[German Revolution of 1918–1919|Republic declared]]
|date_end = 9 November
|year_end = 1918
|event_post = Formal abdication
|date_post = 28 November 1918
|p1 = North German Confederation
|flag_p1 = Flag of the German Empire.svg
|p2 = Kingdom of Bavaria
|flag_p2 = Flag of Bavaria (striped).svg
|p3 = Kingdom of Württemberg
|flag_p3 = Flagge Königreich Württemberg.svg
|p4 = Grand Duchy of Baden
|flag_p4 = Flagge Großherzogtum Baden (1871-1891).svg
|p5 = Grand Duchy of Hesse
|flag_p5 = Flagge_Großherzogtum_Hessen_ohne_Wappen.svg
|p6 = Alsace-Lorraine
|flag_p6 = Flag of France.svg
|s1 = Weimar Republic
|s2 = Republic of Alsace-Lorraine
|s3 = Free City of Danzig
|s4 = Second Polish Republic
|s5 = Klaipėda Region
|s6 = Saar (League of Nations)
|s7 = Hlučín Region
|s8 = South Jutland County{{!}}Northern Schleswig
|s9 = Eupen-Malmedy
|flag_s1 = Flag of Germany (3-2 aspect ratio).svg
|flag_s2 = Flag of the Republic of Alsace-Lorraine.svg
|flag_s3 = Gdansk flag.svg
|flag_s4 = Flag of Poland.svg
|flag_s5 = Flag of Lithuania 1918-1940.svg
|flag_s6 = Flag of Saar 1920-1935.svg
|flag_s7 = Flag of Bohemia.svg
|flag_s8 = Flag of Denmark.svg
|flag_s9 = Flag of Belgium.svg
|image_flag = Flag of the German Empire.svg
|flag_alt = Horizontal tricolor (black, white, red)
|flag_caption = Flag of the German Empire
|image_coat = Wappen Deutsches Reich - Reichsadler 1889.svg
|symbol_type = Imperial Coat of arms
|coat_alt = Shield containing a black, one-headed, rightward-looking eagle with red beak, tongue and claws. On its breast is a shield with another eagle. Over its head is an imperial crown with two crossing ribbons.
|image_map = German Empire, Wilhelminian third version.svg
|image_map_alt = Located in north central Europe, containing modern Germany plus much of modern Poland
|image_map_caption = Territory of the German Empire in 1914, prior to [[World War I]]
|national_motto = ''[[Gott mit uns]]''<br/>{{small|"God with us"}}
|national_anthem = {{plainlist|
* ''(none official)''
* "[[Heil dir im Siegerkranz]]" (Imperial)
* "[[Deutschlandlied]]" (popular)
* "[[Die Wacht am Rhein]]" (unofficial)
}}
|capital = Berlin
|common_languages =
;Official language
:[[German language|German]]
;Unofficial minority languages
:[[Danish language|Danish]], [[French language|French]], [[Polish language|Polish]], [[Saterland Frisian language|Frisian]], [[Old Prussian language|Old Prussian]], [[Lithuanian language|Lithuanian]]
;Colonial languages
:[[Bantu languages|Bantu]], [[Oshiwambo]], [[Afrikaans]], [[Swahili language|Swahili]] (African Colonies)
:[[Chinese language|Chinese]] (Tsingtao & Jiaozhou bay)
:[[Papuan languages]] (German New Guinea)
:[[Samoan language|Samoan]] (German Samoa)
|government_type = Constitutional monarchy
|title_leader = [[German Emperor|Emperor]]
|leader1 = [[William I, German Emperor|William I]]
|year_leader1 = 1871–1888
|leader2 = [[Frederick III, German Emperor|Frederick III]]
|year_leader2 = 1888
|leader3 = [[Wilhelm II, German Emperor|Wilhelm II]]
|year_leader3 = 1888–1918
|title_deputy = [[List of Chancellors of Germany|Chancellor]]
|deputy1 = [[Otto von Bismarck]] (first)
|year_deputy1 = 1871–1890
|deputy2 = [[Friedrich Ebert]] (last)
|year_deputy2 = 8–9 Nov 1918
|legislature = [[Reichstag (German Empire)|Reichstag]]
|house1 = [[Reichsrat (Germany)|Reichsrat]]
|type_house1 = State council
|stat_year1 = 1871
|religion = {{plainlist|
* [[Lutherans]]~60%
* [[Roman Catholics]]~40%
}}
|stat_pop1 = {{formatnum:41058792}}
|stat_year2 = 1890
|stat_pop2 = {{formatnum:41058792}}
|stat_year4 = 1910
|stat_pop4 = {{formatnum:41058792}}
|stat_area4 = 540857.54
|currency = {{plainlist|
* [[Vereinsthaler]], [[South German gulden]], [[Bremen thaler]], [[Hamburg mark]], [[French franc]] {{small|(until 1873, together)}}
* [[German gold mark|Goldmark]] {{small|(1873–1914)}}
* [[German Papiermark|Papiermark]] {{small|(after 1914)}}
}}
|footnotes = Area and population not including colonial possessions
|today =
}}
</syntaxhighlight>
{{hidden end}}
== Errors ==
If the template generates errors when calculating data for the Gini or HDI fields, it will add the article to [[:Category:Country articles requiring maintenance]]. This only happens if the page is in the [[WP:MAINSPACE|main article space]], not any other [[WP:NAMESPACE|namespaces]].
== Microformat ==
{{UF-hcard-place}}
== Tracking categories ==
* {{clc|Country articles requiring maintenance}}
* {{clc|Pages using infobox country with unknown parameters}}
* {{clc|Pages using infobox country with syntax problems}}
* {{clc|Pages using infobox country or infobox former country with the flag caption or type parameters}}
* {{clc|Pages using infobox country or infobox former country with the symbol caption or type parameters}}
* {{clc|Former country articles using status text with Colony or Exile}}
== TemplateData ==
{{TemplateData header}}
{{collapse top|title=TemplateData}}
<templatedata>
{
"description": "This template produces an infobox for countries that covers their major attributes such as their flags, ethnic makeup, and political system.",
"format": "{{_\n| ______________________ = _\n}}\n",
"params": {
"conventional_long_name": {
"label": "Conventional long name",
"type": "string",
"required": false,
"description": "Formal or official full name of the country in English. This entry should not be enclosed in brackets.",
"example": "The United States of America"
},
"common_name": {},
"linking_name": {},
"native_name": {
"label": "Native name",
"type": "string",
"required": false,
"example": "{{native name|Bundesrepublik Deutschland}}",
"description": "Country's name (usually full name) in its native language, hence in italics (double quotemarks). The template {{native name}} should be used with this parameter to automatically italicize the text."
},
"name": {
"label": "Geopolitical organisation name",
"type": "string",
"required": false,
"description": "Name of the geopolitical organisation in English."
},
"image_flag": {
"label": "Flag",
"type": "wiki-file-name",
"required": false,
"example": "Flag of Iceland.svg",
"description": "File name of an image file on Wikipedia or on Commons that contains the country's current flag. Do not enclose this entry in double brackets and do not give it a prefix such as File:"
},
"flag_width": {
"label": "Flag width",
"type": "string",
"required": false,
"description": "If the default widths provided for the flag and coat-of-arms/symbol images produce an unsatisfactory result, use this to specify the width to be used for the flag image; the remaining width is then assigned to the coat-of-arms/symbol (if included). Can be done as a % or px."
},
"alt_flag": {
"label": "Flag alt text",
"type": "string",
"required": false,
"description": "Alternate text for flag (text shown when pointer hovers over flag)."
},
"flag_border": {
"label": "Flag border",
"type": "string",
"required": false,
"description": "Set to no to disable border around the flag."
},
"flag_caption": {
"label": "Flag caption",
"type": "string",
"required": false,
"description": "Use this parameter to enter a caption for the flag, if one is necessary. Do not end this entry with a period.",
"example": "1992 version of the flag prior to the country's dissolution"
},
"image_flag2": {
"label": "Second flag",
"type": "wiki-file-name",
"required": false,
"example": "Secondflag of Namibia.svg",
"description": "If a country has a second flag— perhaps because of an ongoing civil war or a dispute over sovereignty— you can provide the file name of that second flag in this parameter. Do not include the prefix File:, and do not enclose it in double brackets."
},
"alt_flag2": {
"label": "Second flag alt text",
"type": "string",
"required": false,
"description": "Alt text for second flag (text shown when pointer hovers over flag)."
},
"flag2_border": {
"label": "Second flag border",
"type": "string",
"required": false,
"description": "Set to no to disable border around the flag."
},
"image_coat": {
"label": "Coat of arms",
"type": "wiki-file-name",
"aliases": [
"image_symbol"
],
"example": "Great Seal of the United States (obverse).svg"
},
"symbol_width": {
"label": "Symbol width",
"type": "string",
"required": false,
"description": "Symbol image's width.",
"default": "85px"
},
"alt_coat": {
"label": "Coat of arms alt text",
"type": "string",
"aliases": [
"alt_symbol",
"coat_alt"
],
"required": false,
"description": "Alt text for coat of arms."
},
"symbol_type": {
"label": "Symbol type",
"type": "string",
"required": false,
"description": "If not a coat of arms.",
"example": "emblem, seal, etc"
},
"symbol_type_article": {
"label": "Symbol type article",
"type": "string",
"description": "An article about the type of symbol of the country"
},
"text_symbol": {
"label": "Text symbol",
"type": "string",
"required": false,
"description": "For other types of text symbol.",
"example": "''[hymn name]''"
},
"text_symbol_type": {
"label": "Text symbol type",
"type": "string",
"required": false,
"description": "For other types of text symbol."
},
"other_symbol": {
"label": "Other symbol",
"type": "string",
"required": false,
"description": "Use if a further symbol exists."
},
"other_symbol_type": {
"label": "Other symbol type",
"type": "string",
"required": false
},
"national_motto": {
"label": "National motto",
"type": "string",
"required": false,
"example": "{{lang|de|''{{lang|de|[[Das Lied der Deutschen|Einigkeit und Recht und Freiheit]]}}''}}",
"description": "In inverted commas and wikilinked if link exists. Can also be used with the {{lang}} template and correct two-letter language code to designate the language of the motto where not provided in English."
},
"motto": {
"label": "Motto",
"type": "string",
"required": false
},
"national_anthem": {
"label": "National anthem",
"type": "string",
"required": false,
"description": "In inverted commas and wikilinked if link exists."
},
"anthem": {
"label": "Anthem",
"type": "string",
"required": false
},
"royal_anthem": {
"label": "Royal anthem",
"type": "string",
"required": false,
"description": "In inverted commas and wikilinked if link exists."
},
"image_map": {
"label": "Map",
"type": "string",
"required": false,
"example": "LocationCountry.svg"
},
"map_width": {
"label": "Map width",
"type": "string",
"required": false,
"description": "Map image's width.",
"default": "250px"
},
"alt_map": {
"label": "Map alt text",
"type": "string",
"required": false
},
"map_caption": {
"label": "Map caption",
"type": "string",
"required": false,
"description": "Caption to place below map."
},
"image_map2": {
"label": "Map 2",
"type": "string",
"required": false,
"description": "Another map, if required."
},
"map2_width": {
"label": "Map 2 width",
"type": "string",
"required": false
},
"alt_map2": {
"label": "Map 2 alt text",
"type": "string",
"required": false
},
"map_caption2": {
"label": "Map 2 caption",
"type": "string",
"required": false,
"description": "Caption to place below second map."
},
"image_map3": {},
"map3_width": {},
"alt_map3": {},
"map_caption3": {},
"capital": {
"label": "Capital",
"type": "string",
"required": false,
"description": "Name of country/territory's capital, wikilinked if link exists."
},
"capital_type": {
"label": "Capital type",
"type": "string",
"required": false
},
"coordinates": {
"label": "Coordinates",
"type": "string",
"required": false,
"description": "The geographic coordinates of the capital."
},
"latd": {
"label": "Latitude degrees",
"type": "string",
"required": false,
"description": "The degrees of the capital's latitude."
},
"latm": {
"label": "Latitude minutes",
"type": "string",
"description": "The minutes of the capital's latitude."
},
"latNS": {
"label": "Latitude NS",
"type": "string",
"description": "The direction of the capital's latitude."
},
"longd": {
"label": "Longitude degrees",
"type": "string",
"description": "The degrees of the capital's longitude."
},
"longm": {
"label": "Longitude minutes",
"type": "string",
"description": "The minutes of the capital's longitude."
},
"longEW": {
"label": "Longitude EW",
"type": "string",
"description": "The direction of the capital's longitude."
},
"admin_center": {
"label": "Administrative center",
"type": "string",
"required": false,
"description": "Location/s of administrative center/s."
},
"admin_center_type": {
"label": "Administrative center type",
"type": "string",
"required": false,
"default": "Administrative center"
},
"capital2": {
"label": "Capital 2",
"type": "string",
"required": false,
"description": "Name of country/territory's capital, wikilinked if link exists."
},
"capital_type2": {
"label": "Capital 2 type",
"type": "string",
"required": false
},
"admin_center2": {
"label": "Administrative center 2",
"type": "string",
"required": false
},
"admin_center_type2": {
"label": "Administrative center 2 type",
"type": "string",
"required": false
},
"largest_city": {
"label": "Largest city",
"type": "string",
"required": false,
"description": "Name of country/territory's largest city. Use \"capital\" (without quotemarks) if it's the capital."
},
"largest_settlement": {
"label": "Largest settlement",
"type": "string",
"required": false,
"description": "Name of largest settlement if not a city."
},
"largest_settlement_type": {
"label": "Largest settlement type",
"type": "string",
"required": false,
"description": "Type of settlement if largest settlement not a city."
},
"official_languages": {
"label": "Official languages",
"type": "string",
"required": false,
"description": "Languages recognised in legislation, constitution, etc."
},
"national_languages": {
"label": "National languages",
"type": "string",
"required": false,
"description": "Country/territory-wide languages recognised but not necessarily in country/territory-wide law, etc."
},
"regional_languages": {
"label": "Regional languages",
"type": "string",
"required": false,
"description": "Languages recognised or associated with particular regions within the country/territory."
},
"languages_type": {
"label": "Languages type",
"type": "string",
"description": "Use to specify a further type of language, if not official, national or regional."
},
"languages_sub": {
"label": "Languages sub",
"type": "string",
"required": false,
"description": "Is this further type of language a sub-item of the previous non-sub type?",
"example": "'yes' or 'no'"
},
"languages": {
"label": "Languages",
"type": "string",
"required": false,
"description": "Languages of the further type."
},
"languages2_type": {
"label": "2nd languages type",
"type": "string",
"description": "Use to specify a 2nd further type of language, if not official, national or regional."
},
"languages2_sub": {
"label": "Languages 2 sub",
"type": "string",
"required": false,
"description": "Is the second alternative type of languages a sub-item of the previous non-sub type?",
"example": "'yes or 'no'"
},
"languages2": {
"label": "Languages 2",
"type": "string",
"required": false,
"description": "Languages of the second further type."
},
"ethnic_groups": {
"label": "Ethnic groups",
"type": "string",
"required": false,
"description": "The primary ethnic groups of the country",
"example": "{{unbulleted list | 68.8% [[Bumiputera (Malaysia)|Bumiputera]] | 23.2% [[Malaysian Chinese|Chinese]] | 7.0% [[Malaysian Indian|Indian]] | 1.0% Others }}"
},
"ethnic_groups_ref": {
"label": "Ethnic groups reference",
"type": "string",
"required": false,
"description": "Reference, in <ref> format, of ethnic composition"
},
"ethnic_groups_year": {
"label": "Ethnic groups year",
"type": "number",
"required": false,
"description": "Year the ethnic group statistic is from",
"example": "2017"
},
"religion": {
"label": "Religions",
"type": "string",
"required": false,
"description": "List of religious affiliations in {{ublist}} format",
"example": "{{ublist|list_style=line-height:1.3em; |class=nowrap | 33.2% [[Buddhism in Singapore|Buddhism]]...}}"
},
"religion_ref": {
"label": "Religions reference",
"type": "string",
"required": false,
"description": "Reference, in <ref> format, of religious composition"
},
"demonym": {
"label": "Demonym",
"type": "string",
"required": false,
"description": "Name of residents of this country",
"example": "Singaporean",
"suggested": true
},
"org_type": {
"label": "Organization type",
"type": "string",
"required": false
},
"membership": {
"label": "membership",
"type": "string",
"required": false
},
"membership_type": {
"label": "membership_type",
"type": "string",
"required": false
},
"government_type": {
"label": "Type of government",
"type": "string",
"required": false,
"description": "The type of government, e.g. federal republic",
"example": "[[Monarchy]]"
},
"politics_link": {
"label": "Politics link",
"type": "string",
"required": false
},
"leader_title1": {
"label": "Leader 1 title",
"type": "line",
"required": false,
"description": "Title of principal leader",
"example": "[[President of Singapore|President]]"
},
"leader_name1": {
"label": "Leader 1 name",
"type": "line",
"required": false,
"description": "Name of principal leader",
"example": "[[Halimah Yacob]]"
},
"leader_title2": {
"label": "Leader 2 title",
"type": "line",
"required": false,
"description": "Title of 2nd leader",
"example": "[[Prime Minister of Singapore|Prime Minister]]"
},
"leader_name2": {
"label": "Leader 2 name",
"type": "line",
"description": "Name of 2nd leader",
"example": "[[Lee Hsien Loong]]"
},
"leader_title3": {
"label": "Leader 3 title",
"type": "line",
"required": false,
"description": "Title of 3rd leader",
"example": "[[Deputy Prime Minister of Singapore|Deputy Prime Ministers]]"
},
"leader_name3": {
"label": "Leader 3 name",
"type": "line",
"description": "Name of 3rd leader",
"example": "[[Teo Chee Hean]]<br>[[Tharman Shanmugaratnam]]"
},
"leader_title4": {
"label": "Leader 4 title",
"type": "line",
"required": false,
"description": "Title of the 4th leader",
"example": "[[President pro tempore of the United States Senate|President pro tempore]]"
},
"leader_name4": {
"label": "Leader 4 name",
"type": "line",
"description": "Name of the 4th leader"
},
"leader_title5": {
"label": "leader_title5",
"type": "string",
"required": false
},
"leader_name5": {
"label": "Leader name 5",
"type": "string"
},
"leader_title6": {
"label": "Leader title 6",
"type": "string",
"required": false
},
"leader_name6": {
"label": "Leader name 6",
"type": "string"
},
"leader_title7": {
"label": "Leader title7",
"type": "string",
"required": false
},
"leader_name7": {
"label": "Leader name 7",
"type": "string"
},
"leader_title8": {
"label": "Leader title 8",
"type": "string",
"required": false
},
"leader_name8": {
"label": "Leader name 8",
"type": "string"
},
"leader_title9": {
"label": "Leader title 9",
"type": "string",
"required": false
},
"leader_name9": {
"label": "Leader name 9",
"type": "string"
},
"leader_title10": {
"label": "Leader title 10",
"type": "string",
"required": false
},
"leader_name10": {
"label": "Leader name 10",
"type": "string"
},
"leader_title11": {
"label": "Leader title 11",
"type": "string",
"required": false
},
"leader_name11": {
"label": "Leader name 11",
"type": "string"
},
"leader_title12": {
"label": "Leader title 12",
"type": "string",
"required": false
},
"leader_name12": {
"label": "Leader name 12",
"type": "string"
},
"leader_title13": {
"label": "Leader title 13",
"type": "string",
"required": false
},
"leader_name13": {
"label": "Leader name 13",
"type": "string"
},
"leader_title14": {
"label": "Leader title 14",
"type": "string",
"required": false
},
"leader_name14": {
"label": "Leader name 14",
"type": "string"
},
"legislature": {
"label": "Legislature",
"type": "line",
"description": "Name of, and link to, the country's national legislature",
"example": "[[Parliament of Singapore|Parliament]]"
},
"upper_house": {
"description": "Upper house of the country or organization's legislature",
"type": "string",
"example": "[[United States House of Representatives|House of Representatives]]"
},
"lower_house": {
"description": "Lower house of the country or organization's legislature",
"label": "Lower house",
"type": "string",
"example": "[[United States House of Representatives|House of Representatives]]"
},
"sovereignty_type": {
"label": "Sovereignty type",
"type": "line",
"required": false,
"description": "Type of sovereignty this country has",
"example": "Independence"
},
"sovereignty_note": {
"label": "Sovereignty note",
"type": "content",
"required": false,
"description": "Note about this country's sovereignty",
"example": "from the [[United Kingdom]]"
},
"established": {
"label": "established",
"type": "string",
"required": false
},
"established_event1": {
"label": "Establishment event 1",
"type": "string",
"required": false
},
"established_date1": {
"label": "Establishment date 1",
"type": "string",
"required": false
},
"established_event2": {
"label": "Establishment event 2",
"type": "string",
"required": false
},
"established_date2": {
"label": "Establishment date 2",
"type": "string",
"required": false
},
"established_event3": {
"label": "Establishment event 3",
"type": "string",
"required": false
},
"established_date3": {
"label": "Establishment date 3",
"type": "string",
"required": false
},
"established_event4": {
"label": "Establishment event 4",
"type": "string",
"required": false
},
"established_date4": {
"label": "established_date4",
"type": "string",
"required": false
},
"established_event5": {
"label": "Establishment event 5",
"type": "string",
"required": false
},
"established_date5": {
"label": "established_date5",
"type": "string",
"required": false
},
"established_event6": {
"label": "established_event6",
"type": "string",
"required": false
},
"established_date6": {
"label": "established_date6",
"type": "string",
"required": false
},
"established_event7": {
"label": "established_event7",
"type": "string",
"required": false
},
"established_date7": {
"label": "established_date7",
"type": "string",
"required": false
},
"established_event8": {
"label": "established_event8",
"type": "string",
"required": false
},
"established_date8": {
"label": "established_date8",
"type": "string",
"required": false
},
"established_event9": {
"label": "established_event9",
"type": "string",
"required": false
},
"established_date9": {
"label": "established_date9",
"type": "string",
"required": false
},
"established_event10": {
"label": "established_event10",
"type": "string",
"required": false
},
"established_date10": {
"label": "established_date10",
"type": "string",
"required": false
},
"established_event11": {
"label": "established_event11",
"type": "string",
"required": false
},
"established_date11": {
"label": "established_date11",
"type": "string",
"required": false
},
"established_event12": {
"label": "established_event12",
"type": "string",
"required": false
},
"established_date12": {
"label": "established_date12",
"type": "string",
"required": false
},
"area_km2": {
"label": "Land area (km²)",
"type": "number",
"required": false,
"description": "Land area of the country in square kilometers",
"example": "722.5",
"suggested": true
},
"area_link": {
"label": "area_link",
"type": "string",
"required": false
},
"area_label": {
"label": "area_label",
"type": "string",
"required": false
},
"FR_foot4": {
"label": "FR_foot4",
"type": "string",
"required": false,
"deprecated": true
},
"area_footnote": {
"label": "area_footnote",
"type": "string",
"required": false
},
"area_rank": {
"label": "Area rank",
"type": "string",
"required": false,
"description": "Rank among countries of land area",
"example": "174th",
"suggested": true
},
"area_sq_mi": {
"label": "Land area (mi²)",
"type": "number",
"required": false,
"description": "Land area of the country in square miles",
"example": "290"
},
"percent_water": {
"label": "percent_water",
"type": "string",
"required": false
},
"area_label2": {
"label": "area_label2",
"type": "string",
"required": false
},
"area_data2": {
"label": "area_data2",
"type": "string",
"required": false
},
"area_label3": {
"label": "area_label3",
"type": "string",
"required": false
},
"area_data3": {
"label": "area_data3",
"type": "string",
"required": false
},
"FR_metropole": {
"label": "FR_metropole",
"type": "string",
"required": false,
"deprecated": true
},
"FR_foot2": {
"label": "FR_foot2",
"type": "string",
"required": false,
"deprecated": true
},
"FR_IGN_area_km2": {
"label": "FR_IGN_area_km2",
"type": "string",
"required": false,
"deprecated": true
},
"FR_IGN_area_rank": {
"label": "FR_IGN_area_rank",
"type": "string",
"required": false,
"deprecated": true
},
"FR_IGN_area_sq_mi": {
"label": "FR_IGN_area_sq_mi",
"type": "string",
"required": false,
"deprecated": true
},
"FR_foot3": {
"label": "FR_foot3",
"type": "string",
"required": false,
"deprecated": true
},
"FR_cadastre_area_km2": {
"label": "FR_cadastre_area_km2",
"type": "string",
"required": false,
"deprecated": true
},
"FR_cadastre_area_rank": {
"label": "FR_cadastre_area_rank",
"type": "string",
"required": false,
"deprecated": true
},
"FR_cadastre_area_sq_mi": {
"label": "FR_cadastre_area_sq_mi",
"type": "string",
"required": false,
"deprecated": true
},
"population_estimate": {
"label": "Population estimate",
"type": "number",
"required": false,
"description": "An estimate of the country's population",
"example": "24,000,000"
},
"population_census": {
"label": "Population census",
"type": "string"
},
"population_link": {
"label": "Population link",
"type": "url"
},
"population_estimate_year": {
"label": "Population estimate year",
"type": "number",
"description": "The year the population estimate is from",
"example": "2018"
},
"population_estimate_rank": {
"label": "Population estimate rank",
"type": "string",
"description": "Rank among countries in estimated population",
"example": "3rd"
},
"population_label2": {
"label": "population_label2",
"type": "string",
"required": false
},
"population_data2": {
"label": "Population data 2",
"type": "string",
"required": false
},
"population_label3": {
"label": "Population label 3",
"type": "string",
"required": false
},
"population_data3": {
"label": "Population data 3",
"type": "string",
"required": false
},
"population_census_year": {
"label": "Population census year",
"type": "number",
"required": false,
"description": "Year the population census statistics are from",
"example": "2010"
},
"population_census_rank": {
"label": "Population census rank",
"type": "string",
"description": "Rank among countries in census population",
"example": "3rd"
},
"population_density_km2": {
"label": "Population density per km²",
"type": "number",
"example": "20,212",
"description": "Population density per square kilometer"
},
"population_density_sq_mi": {
"label": "Population density per mi²",
"type": "number",
"description": "Population density per square mile",
"example": "20,212"
},
"pop_den_footnote": {
"label": "Population density footnote",
"type": "string",
"description": "footnote about the population density statistic"
},
"population_density_rank": {
"label": "Population density rank",
"type": "string",
"required": false,
"description": "Rank among countries in population density",
"example": "3rd"
},
"FR_metropole_population": {
"label": "FR_metropole_population",
"type": "string",
"required": false,
"deprecated": true
},
"FR_total_population_estimate_year": {
"label": "FR_total_population_estimate_year",
"type": "string",
"deprecated": true
},
"FR_foot": {
"label": "FR_foot",
"type": "string",
"deprecated": true
},
"FR_total_population_estimate": {
"label": "FR_total_population_estimate",
"type": "string",
"deprecated": true
},
"FR_total_population_estimate_rank": {
"label": "FR_total_population_estimate_rank",
"type": "string",
"deprecated": true
},
"FR_metropole_population_estimate_rank": {
"label": "FR_metropole_population_estimate_rank",
"type": "string",
"deprecated": true
},
"FR_foot5": {
"label": "FR_foot5",
"type": "string",
"required": false,
"deprecated": true
},
"GDP_PPP": {
"label": "GDP (PPP)",
"type": "line",
"required": false,
"description": "Gross domestic product (purchasing power parity)",
"example": "$554.855 billion",
"suggested": true
},
"GDP_PPP_year": {
"label": "GDP (PPP) year cited",
"type": "number",
"required": false,
"description": "Year the GDP (PPP) statistic is cited from",
"example": "2018",
"suggested": true
},
"GDP_PPP_rank": {
"label": "GDP (PPP) rank",
"type": "string",
"required": false,
"description": "Rank among countries for GDP PPP",
"example": "39th"
},
"GDP_PPP_per_capita": {
"label": "GDP_PPP_per_capita",
"type": "line",
"required": false,
"description": "Gross domestic product (purchasing power parity) per capita",
"example": "$98,014"
},
"GDP_PPP_per_capita_rank": {
"label": "GDP (PPP) per capita rank",
"type": "line",
"required": false,
"description": "Rank among countries for GDP PPP per capita",
"example": "3rd"
},
"GDP_nominal": {
"label": "GDP (nominal)",
"type": "string",
"required": false,
"description": "Nominal GDP of the country"
},
"GDP_nominal_year": {
"label": "GDP (nominal) year",
"type": "number",
"required": false,
"description": "Year cited for the country's nominal GDP statistic"
},
"GDP_nominal_rank": {
"label": "GDP (nominal) rank",
"type": "string",
"required": false,
"description": "Rank among countries for nominal GDP",
"example": "41st"
},
"GDP_nominal_per_capita": {
"label": "GDP (nominal) per capita",
"type": "string",
"required": false,
"description": "Nominal GDP per capita in the country",
"example": "$61,766"
},
"GDP_nominal_per_capita_rank": {
"label": "GDP (nominal) per capita rank",
"type": "string",
"required": false,
"description": "Rank among countries for nominal GDP per capita",
"example": "8th"
},
"Gini": {
"label": "Gini index",
"type": "number",
"required": false,
"description": "Gini index of the country",
"example": "46.4"
},
"Gini_year": {
"label": "Gini index year cited",
"type": "number",
"required": false,
"description": "Year the gini index statistic is cited for",
"example": "2014"
},
"Gini_change": {
"label": "Gini change",
"type": "string",
"required": false,
"description": "\"increase\" or \"decrease\" (over last year)",
"example": "increase"
},
"Gini_ref": {
"label": "Gini index reference",
"type": "line",
"required": false,
"description": "Reference for cited Gini index statistic"
},
"Gini_rank": {
"label": "Gini rank",
"type": "string",
"required": false,
"description": "Rank of Gini indices",
"example": "30th"
},
"HDI": {
"label": "Human development index",
"type": "number",
"required": false,
"example": "0.932",
"suggested": true,
"description": "The country's human development index (HDI)"
},
"HDI_year": {
"label": "Human Development Index year",
"type": "number",
"required": false,
"description": "Year to which the HDI statistic refers",
"example": "2017",
"suggested": true
},
"HDI_change": {
"label": "HDI change",
"type": "string",
"required": false,
"description": "\"increase\" or \"decrease\" from previous year",
"example": "increase"
},
"HDI_ref": {
"label": "Human Development Index reference",
"type": "line",
"required": false,
"description": "Reference for HDI statistic"
},
"HDI_rank": {
"label": "Human development index rank",
"type": "string",
"required": false,
"description": "Rank among countries for HDI score",
"example": "9th"
},
"currency": {
"label": "Currency",
"type": "line",
"required": false,
"description": "National/official currency name and article link",
"example": "[[Singapore dollar]]"
},
"currency_code": {
"label": "Currency code",
"type": "line",
"required": false,
"description": "Currency code of the official currency",
"example": "SGD"
},
"time_zone": {
"label": "Time zone",
"type": "line",
"required": false,
"description": "National time zone(s)",
"example": "[[Singapore Standard Time|SST]]"
},
"utc_offset": {
"label": "UTC offsets",
"type": "string",
"example": "−4 to −12, +10, +11"
},
"utc_offset_DST": {
"label": "UTF offsets (DST)",
"type": "string",
"example": "−4 to −10"
},
"DST_note": {
"label": "DST note",
"type": "string",
"example": "{{efn|name=\"time\"}}"
},
"time_zone_DST": {
"label": "Time zones (DST)",
"type": "string",
"required": false
},
"DST": {
"label": "Daylight savings time",
"type": "string",
"required": false
},
"antipodes": {
"label": "antipodes",
"type": "string",
"required": false
},
"date_format": {
"label": "Date format",
"type": "string",
"required": false
},
"drives_on": {
"label": "drives on",
"type": "string",
"required": false
},
"rail gauge": {
"label": "Rail gauge",
"type": "string",
"required": false
},
"calling_code": {
"label": "Calling code",
"type": "string",
"example": "+1"
},
"patron_saint": {
"label": "Patron saint",
"aliases": [
"patron_saints"
],
"type": "string",
"required": false
},
"iso3166code": {
"label": "ISO 3166 code",
"type": "string",
"description": "ISO 3166 code for the country",
"example": "US"
},
"cctld": {
"label": "Country code top level domain",
"type": "string",
"example": ".se"
},
"official_website": {
"label": "official_website",
"type": "string",
"required": false,
"description": "For geopolitical entities: do not use government website (e.g. usa.gov) for countries (e.g. [[United States]])."
},
"footnote_a": {
"label": "footnote_a",
"type": "string",
"required": false
},
"footnote_b": {
"label": "footnote_b",
"type": "string",
"required": false
},
"footnote_c": {
"label": "footnote_c",
"type": "string",
"required": false
},
"footnote_d": {
"label": "footnote_d",
"type": "string",
"required": false
},
"footnote_e": {
"label": "footnote_e",
"type": "string",
"required": false
},
"footnote_f": {
"label": "footnote_f",
"type": "string",
"required": false
},
"footnote_g": {
"label": "footnote_g",
"type": "string",
"required": false
},
"footnote_h": {
"label": "footnote_h",
"type": "string",
"required": false
},
"footnote1": {
"label": "footnote1",
"type": "string",
"required": false
},
"footnote2": {
"label": "footnote2",
"type": "string",
"required": false
},
"footnote3": {
"label": "footnote3",
"type": "string",
"required": false
},
"footnote4": {
"label": "footnote4",
"type": "string",
"required": false
},
"footnote5": {
"label": "footnote5",
"type": "string",
"required": false
},
"footnote6": {
"label": "footnote6",
"type": "string",
"required": false
},
"footnote7": {
"label": "footnote7",
"type": "string",
"required": false
},
"footnote8": {
"label": "footnote8",
"type": "string",
"required": false
},
"footnotes": {
"label": "footnotes",
"type": "string",
"required": false
},
"navbar": {
"label": "navbar",
"type": "string",
"required": false
},
"micronation": {},
"status": {
"type": "line"
},
"status_text": {
"type": "line"
},
"empire": {},
"year_end": {
"type": "number"
},
"year_exile_start": {
"type": "number"
},
"year_exile_end": {
"type": "number"
},
"life_span": {
"type": "line"
},
"year_start": {
"type": "number"
},
"flag_size": {
"type": "line"
},
"flag_alt": {
"type": "string"
},
"flag_alt2": {
"type": "string"
},
"flag_type": {
"type": "string"
},
"coa_size": {
"type": "line"
},
"englishmotto": {
"type": "string",
"label": "Motto in English",
"description": "The country's motto translated into English"
},
"image_map_size": {
"type": "line"
},
"image_map_alt": {
"type": "string"
},
"image_map_caption": {
"type": "content"
},
"image_map2_size": {
"type": "line"
},
"image_map2_alt": {
"type": "string"
},
"image_map2_caption": {
"type": "content"
},
"loctext": {
"type": "string"
},
"capital_exile": {
"type": "string"
},
"recognized_languages": {
"aliases": [
"recognised_languages"
],
"type": "content",
"label": "Recognized languages",
"description": "Recognized languages of the country, possibly in list format"
},
"recognized_national_languages": {
"aliases": [
"recognised_national_languages"
],
"type": "content",
"label": "Recognized national languages",
"description": "Recognized national languages of the country, possibly in list format"
},
"recognized_regional_languages": {
"aliases": [
"recognised_regional_languages"
],
"type": "content",
"label": "Recognized regional languages",
"description": "Recognized regional languages of the country, possibly in list format"
},
"common_languages": {
"type": "content",
"label": "Common languages",
"description": "Common languages of the country, possibly in list format",
"example": "{{ublist|[[English language|English]]|[[Spanish language|Spanish]]|[[Chinese language|Chinese]]}}"
},
"religion_year": {
"type": "number",
"label": "Religion statistic year",
"description": "Year the religion statistic is from",
"example": "2015"
},
"leader_title15": {
"type": "line"
},
"leader_name15": {
"type": "line"
},
"title_leader": {
"type": "line",
"label": "Leader's title",
"description": "Title of the country's leader",
"example": "[[President of the United States|President]]"
},
"year_leader1": {
"type": "line",
"label": "Leader 1 years",
"description": "Years the first leader reigned",
"example": "1776-1795"
},
"leader1": {
"type": "line",
"label": "Leader 1",
"description": "The first leader of the country",
"example": "[[George Washington]]"
},
"year_leader2": {
"type": "line"
},
"leader2": {
"type": "line"
},
"year_leader3": {
"type": "line"
},
"leader3": {
"type": "line"
},
"year_leader4": {
"type": "line"
},
"leader4": {
"type": "line"
},
"year_leader5": {
"type": "line"
},
"leader5": {
"type": "line"
},
"year_leader6": {
"type": "line"
},
"leader6": {
"type": "line"
},
"year_leader7": {
"type": "line"
},
"leader7": {
"type": "line"
},
"year_leader8": {
"type": "line"
},
"leader8": {
"type": "line"
},
"year_leader9": {
"type": "line"
},
"leader9": {
"type": "line"
},
"year_leader10": {
"type": "line"
},
"leader10": {
"type": "line"
},
"year_leader11": {
"type": "line",
"label": "Leader 11 years",
"description": "Year of leader 11",
"example": "1980-1987"
},
"leader11": {
"type": "line"
},
"title_representative": {
"type": "line",
"label": "Representative title",
"description": "Title of the country's representative",
"example": "[[Governor General of Canada|Governor General]]"
},
"year_representative1": {
"type": "line",
"label": "Representative 1 years",
"description": "Year of representative 1",
"example": "1492-1506"
},
"representative1": {
"type": "line",
"label": "Representative 1",
"description": "First representative"
},
"year_representative2": {
"type": "line",
"label": "Representative 2 years",
"description": "Year of representative 2",
"example": "1552-1580"
},
"representative2": {
"type": "line"
},
"year_representative3": {
"type": "line",
"label": "Representative 3 years",
"description": "Year of representative 3",
"example": "1652-1666"
},
"representative3": {
"type": "line"
},
"year_representative4": {
"type": "line",
"label": "Representative 4 year",
"description": "Year of representative 4",
"example": "1652-1666"
},
"representative4": {
"type": "line"
},
"year_representative5": {
"type": "line",
"label": "Representative 5 years",
"description": "Year of representative 5",
"example": "1652-1666"
},
"representative5": {
"type": "line"
},
"title_deputy": {
"type": "line"
},
"year_deputy1": {
"type": "line",
"label": "Deputy 1 years",
"description": "Years of the 1st deputy",
"example": "2006-2009"
},
"deputy1": {
"type": "line",
"label": "Deputy 1",
"description": "First deputy"
},
"year_deputy2": {
"type": "line",
"label": "Deputy 2 years",
"description": "Years of the 2nd deputy",
"example": "2009-2011"
},
"deputy2": {
"type": "line"
},
"year_deputy3": {
"type": "line",
"label": "Deputy 3 years",
"description": "Years of the 3rd deputy",
"example": "2011-2013"
},
"deputy3": {
"type": "line"
},
"year_deputy4": {
"type": "line",
"label": "Deputy 4 years",
"description": "Years of the 4th deputy",
"example": "2013-2016"
},
"deputy4": {
"type": "line"
},
"year_deputy5": {
"type": "line",
"label": "Deputy 5 years",
"description": "Years of the 5th deputy",
"example": "2016-2018"
},
"deputy5": {
"type": "line"
},
"year_deputy6": {
"type": "line",
"label": "Deputy 6 years",
"description": "Years of the 6th deputy",
"example": "2018-"
},
"deputy6": {
"type": "line"
},
"type_house1": {
"type": "line"
},
"house1": {
"type": "line"
},
"type_house2": {
"type": "line"
},
"house2": {
"type": "line"
},
"event_pre": {
"type": "line"
},
"established_event13": {
"label": "Establishment event 13",
"type": "line"
},
"established_date13": {
"label": "Establishment date 13",
"type": "date"
},
"established_event14": {
"type": "line"
},
"established_date14": {
"type": "line"
},
"established_event15": {
"type": "line"
},
"established_date15": {
"type": "line"
},
"event_start": {
"label": "Starting event",
"description": "The foundational event of the country",
"example": "Established",
"type": "string"
},
"date_pre": {},
"date_start": {
"label": "Date established",
"description": "Date the country, dynasty or organization was established (date of event_start)",
"example": "601 CE",
"type": "string"
},
"event1": {
"label": "Event 1",
"description": "First significant event",
"example": "Signing of the [[Chanyuan Treaty]] with [[Liao dynasty|Liao]]",
"type": "string"
},
"date_event1": {
"label": "Event 1 date",
"description": "Date of the first significant event",
"example": "601",
"type": "date"
},
"event2": {
"label": "Event 2",
"description": "Second significant event",
"example": "[[Alliance Conducted at Sea|Alliance with Jin]]",
"type": "string"
},
"date_event2": {
"label": "Event 2 date",
"description": "Date of the second significant event",
"type": "string"
},
"event3": {
"label": "Event 3",
"description": "Third significant event",
"example": "[[Jingkang Incident]]",
"type": "string"
},
"date_event3": {},
"event4": {
"label": "Event 4",
"description": "Fourth significant event",
"example": "Beginning of [[Mongol conquest of the Song dynasty|Mongol invasion]]",
"type": "string"
},
"date_event4": {},
"event5": {
"label": "Event 5",
"description": "Fifth significant event",
"example": "Fall of [[Hangzhou|Lin'an]]",
"type": "string"
},
"date_event5": {},
"event6": {
"label": "Event 6",
"description": "Sixth significant event",
"example": "[[Krystallnacht]]",
"type": "string"
},
"date_event6": {},
"event_end": {
"label": "Event ending the country",
"description": "The event that caused the country to stop existing or transition, if applicable",
"example": "[[Battle of Yamen]] (end of dynasty)",
"type": "string"
},
"date_end": {
"label": "End date",
"description": "Date the country stopped existing or transitioned, if applicable",
"example": "1433",
"type": "date"
},
"event_post": {},
"date_post": {},
"area_ha": {},
"area_acre": {},
"area_land_km2": {},
"area_land_ha": {},
"area_land_sq_mi": {},
"area_land_acre": {},
"area_water_km2": {},
"area_water_ha": {},
"area_water_sq_mi": {},
"area_water_acre": {},
"stat_area1": {},
"stat_area2": {},
"stat_area3": {},
"stat_area4": {},
"stat_area5": {},
"area_land_footnote": {},
"area_water_footnote": {},
"stat_year1": {},
"ref_area1": {},
"stat_year2": {},
"ref_area2": {},
"stat_year3": {},
"ref_area3": {},
"stat_year4": {},
"ref_area4": {},
"stat_year5": {
"label": "Statistic 5 year",
"description": "Year of statistic 5",
"example": "1933",
"type": "number"
},
"ref_area5": {},
"stat_pop1": {},
"stat_pop2": {},
"stat_pop3": {},
"stat_pop4": {},
"stat_pop5": {},
"ref_pop1": {},
"ref_pop2": {},
"ref_pop3": {},
"ref_pop4": {},
"ref_pop5": {},
"nummembers": {},
"p1": {},
"s1": {},
"flag_p1": {},
"image_p1": {},
"border_p1": {},
"flag_p2": {},
"image_p2": {},
"p2": {},
"border_p2": {},
"flag_p3": {},
"image_p3": {},
"p3": {},
"border_p3": {},
"flag_p4": {},
"image_p4": {},
"p4": {},
"border_p4": {},
"flag_p5": {},
"image_p5": {},
"p5": {},
"border_p5": {},
"flag_p6": {},
"image_p6": {},
"p6": {},
"border_p6": {},
"flag_p7": {},
"image_p7": {},
"p7": {},
"border_p7": {},
"flag_p8": {},
"image_p8": {},
"p8": {},
"border_p8": {},
"flag_p9": {},
"image_p9": {},
"p9": {},
"border_p9": {},
"flag_p10": {},
"image_p10": {},
"p10": {},
"border_p10": {},
"flag_p11": {},
"image_p11": {},
"p11": {},
"border_p11": {},
"flag_p12": {},
"image_p12": {},
"p12": {},
"border_p12": {},
"flag_p13": {},
"image_p13": {},
"p13": {},
"border_p13": {},
"flag_p14": {},
"image_p14": {},
"p14": {},
"border_p14": {},
"flag_p15": {},
"image_p15": {},
"p15": {},
"border_p15": {},
"flag_s1": {},
"image_s1": {},
"border_s1": {},
"flag_s2": {},
"image_s2": {},
"s2": {},
"border_s2": {},
"flag_s3": {},
"image_s3": {},
"s3": {},
"border_s3": {},
"flag_s4": {},
"image_s4": {},
"s4": {},
"border_s4": {},
"flag_s5": {},
"image_s5": {},
"s5": {},
"border_s5": {},
"flag_s6": {},
"image_s6": {},
"s6": {},
"border_s6": {},
"flag_s7": {},
"image_s7": {},
"s7": {},
"border_s7": {},
"flag_s8": {},
"image_s8": {},
"s8": {},
"border_s8": {},
"flag_s9": {},
"image_s9": {},
"s9": {},
"border_s9": {},
"flag_s10": {},
"image_s10": {},
"s10": {},
"border_s10": {},
"flag_s11": {},
"image_s11": {},
"s11": {},
"border_s11": {},
"flag_s12": {},
"image_s12": {},
"s12": {},
"border_s12": {},
"flag_s13": {},
"image_s13": {},
"s13": {},
"border_s13": {},
"flag_s14": {},
"image_s14": {},
"s14": {},
"border_s14": {},
"flag_s15": {},
"image_s15": {},
"s15": {},
"border_s15": {},
"today": {
"label": "Today part of",
"description": "For former countries, a list of countries of which the former country's territories are now part, if no more than four.",
"example": "{{plainlist| *[[Czech Republic]] *[[Denmark]] *[[France]] *[[Germany]] }}",
"type": "content",
"suggested": true
},
"footnotes2": {},
"symbol_caption": {},
"nested": {}
},
"paramOrder": [
"conventional_long_name",
"common_name",
"linking_name",
"native_name",
"name",
"image_flag",
"flag_width",
"alt_flag",
"flag_border",
"flag_caption",
"image_flag2",
"alt_flag2",
"flag2_border",
"image_coat",
"symbol_width",
"alt_coat",
"symbol_type",
"symbol_type_article",
"text_symbol",
"text_symbol_type",
"other_symbol",
"other_symbol_type",
"national_motto",
"motto",
"national_anthem",
"anthem",
"royal_anthem",
"image_map",
"map_width",
"alt_map",
"map_caption",
"image_map2",
"map2_width",
"alt_map2",
"map_caption2",
"image_map3",
"map3_width",
"alt_map3",
"map_caption3",
"capital",
"capital_type",
"coordinates",
"latd",
"latm",
"latNS",
"longd",
"longm",
"longEW",
"admin_center",
"admin_center_type",
"capital2",
"capital_type2",
"admin_center2",
"admin_center_type2",
"largest_city",
"largest_settlement",
"largest_settlement_type",
"official_languages",
"national_languages",
"regional_languages",
"languages_type",
"languages_sub",
"languages",
"languages2_type",
"languages2_sub",
"languages2",
"ethnic_groups",
"ethnic_groups_ref",
"ethnic_groups_year",
"religion",
"religion_ref",
"demonym",
"org_type",
"membership",
"membership_type",
"government_type",
"politics_link",
"leader_title1",
"leader_name1",
"leader_title2",
"leader_name2",
"leader_title3",
"leader_name3",
"leader_title4",
"leader_name4",
"leader_title5",
"leader_name5",
"leader_title6",
"leader_name6",
"leader_title7",
"leader_name7",
"leader_title8",
"leader_name8",
"leader_title9",
"leader_name9",
"leader_title10",
"leader_name10",
"leader_title11",
"leader_name11",
"leader_title12",
"leader_name12",
"leader_title13",
"leader_name13",
"leader_title14",
"leader_name14",
"legislature",
"upper_house",
"lower_house",
"sovereignty_type",
"sovereignty_note",
"established",
"established_event1",
"established_date1",
"established_event2",
"established_date2",
"established_event3",
"established_date3",
"established_event4",
"established_date4",
"established_event5",
"established_date5",
"established_event6",
"established_date6",
"established_event7",
"established_date7",
"established_event8",
"established_date8",
"established_event9",
"established_date9",
"established_event10",
"established_date10",
"established_event11",
"established_date11",
"established_event12",
"established_date12",
"area_km2",
"area_link",
"area_label",
"FR_foot4",
"area_footnote",
"area_rank",
"area_sq_mi",
"percent_water",
"area_label2",
"area_data2",
"area_label3",
"area_data3",
"FR_metropole",
"FR_foot2",
"FR_IGN_area_km2",
"FR_IGN_area_rank",
"FR_IGN_area_sq_mi",
"FR_foot3",
"FR_cadastre_area_km2",
"FR_cadastre_area_rank",
"FR_cadastre_area_sq_mi",
"population_estimate",
"population_census",
"population_link",
"population_estimate_year",
"population_estimate_rank",
"population_label2",
"population_data2",
"population_label3",
"population_data3",
"population_census_year",
"population_census_rank",
"population_density_km2",
"population_density_sq_mi",
"pop_den_footnote",
"population_density_rank",
"FR_metropole_population",
"FR_total_population_estimate_year",
"FR_foot",
"FR_total_population_estimate",
"FR_total_population_estimate_rank",
"FR_metropole_population_estimate_rank",
"FR_foot5",
"GDP_PPP",
"GDP_PPP_year",
"GDP_PPP_rank",
"GDP_PPP_per_capita",
"GDP_PPP_per_capita_rank",
"GDP_nominal",
"GDP_nominal_year",
"GDP_nominal_rank",
"GDP_nominal_per_capita",
"GDP_nominal_per_capita_rank",
"Gini",
"Gini_year",
"Gini_change",
"Gini_ref",
"Gini_rank",
"HDI",
"HDI_year",
"HDI_change",
"HDI_ref",
"HDI_rank",
"currency",
"currency_code",
"time_zone",
"utc_offset",
"utc_offset_DST",
"DST_note",
"time_zone_DST",
"DST",
"antipodes",
"date_format",
"drives_on",
"rail gauge",
"calling_code",
"patron_saint",
"iso3166code",
"cctld",
"official_website",
"footnote_a",
"footnote_b",
"footnote_c",
"footnote_d",
"footnote_e",
"footnote_f",
"footnote_g",
"footnote_h",
"footnote1",
"footnote2",
"footnote3",
"footnote4",
"footnote5",
"footnote6",
"footnote7",
"footnote8",
"footnotes",
"navbar",
"micronation",
"status",
"status_text",
"empire",
"year_end",
"year_exile_start",
"year_exile_end",
"life_span",
"year_start",
"flag_size",
"flag_alt",
"flag_alt2",
"flag_type",
"coa_size",
"englishmotto",
"image_map_size",
"image_map_alt",
"image_map_caption",
"image_map2_size",
"image_map2_alt",
"image_map2_caption",
"loctext",
"capital_exile",
"recognized_languages",
"recognized_national_languages",
"recognized_regional_languages",
"common_languages",
"religion_year",
"leader_title15",
"leader_name15",
"title_leader",
"year_leader1",
"leader1",
"year_leader2",
"leader2",
"year_leader3",
"leader3",
"year_leader4",
"leader4",
"year_leader5",
"leader5",
"year_leader6",
"leader6",
"year_leader7",
"leader7",
"year_leader8",
"leader8",
"year_leader9",
"leader9",
"year_leader10",
"leader10",
"year_leader11",
"leader11",
"title_representative",
"year_representative1",
"representative1",
"year_representative2",
"representative2",
"year_representative3",
"representative3",
"year_representative4",
"representative4",
"year_representative5",
"representative5",
"title_deputy",
"year_deputy1",
"deputy1",
"year_deputy2",
"deputy2",
"year_deputy3",
"deputy3",
"year_deputy4",
"deputy4",
"year_deputy5",
"deputy5",
"year_deputy6",
"deputy6",
"type_house1",
"house1",
"type_house2",
"house2",
"established_event13",
"established_date13",
"established_event14",
"established_date14",
"established_event15",
"established_date15",
"event_pre",
"date_pre",
"event_start",
"date_start",
"event1",
"date_event1",
"event2",
"date_event2",
"event3",
"date_event3",
"event4",
"date_event4",
"event5",
"date_event5",
"event6",
"date_event6",
"event_end",
"date_end",
"event_post",
"date_post",
"area_ha",
"area_acre",
"area_land_km2",
"area_land_ha",
"area_land_sq_mi",
"area_land_acre",
"area_water_km2",
"area_water_ha",
"area_water_sq_mi",
"area_water_acre",
"stat_area1",
"stat_area2",
"stat_area3",
"stat_area4",
"stat_area5",
"area_land_footnote",
"area_water_footnote",
"stat_year1",
"ref_area1",
"stat_year2",
"ref_area2",
"stat_year3",
"ref_area3",
"stat_year4",
"ref_area4",
"stat_year5",
"ref_area5",
"stat_pop1",
"stat_pop2",
"stat_pop3",
"stat_pop4",
"stat_pop5",
"ref_pop1",
"ref_pop2",
"ref_pop3",
"ref_pop4",
"ref_pop5",
"nummembers",
"p1",
"s1",
"flag_p1",
"image_p1",
"border_p1",
"flag_p2",
"image_p2",
"p2",
"border_p2",
"flag_p3",
"image_p3",
"p3",
"border_p3",
"flag_p4",
"image_p4",
"p4",
"border_p4",
"flag_p5",
"image_p5",
"p5",
"border_p5",
"flag_p6",
"image_p6",
"p6",
"border_p6",
"flag_p7",
"image_p7",
"p7",
"border_p7",
"flag_p8",
"image_p8",
"p8",
"border_p8",
"flag_p9",
"image_p9",
"p9",
"border_p9",
"flag_p10",
"image_p10",
"p10",
"border_p10",
"flag_p11",
"image_p11",
"p11",
"border_p11",
"flag_p12",
"image_p12",
"p12",
"border_p12",
"flag_p13",
"image_p13",
"p13",
"border_p13",
"flag_p14",
"image_p14",
"p14",
"border_p14",
"flag_p15",
"image_p15",
"p15",
"border_p15",
"flag_s1",
"image_s1",
"border_s1",
"flag_s2",
"image_s2",
"s2",
"border_s2",
"flag_s3",
"image_s3",
"s3",
"border_s3",
"flag_s4",
"image_s4",
"s4",
"border_s4",
"flag_s5",
"image_s5",
"s5",
"border_s5",
"flag_s6",
"image_s6",
"s6",
"border_s6",
"flag_s7",
"image_s7",
"s7",
"border_s7",
"flag_s8",
"image_s8",
"s8",
"border_s8",
"flag_s9",
"image_s9",
"s9",
"border_s9",
"flag_s10",
"image_s10",
"s10",
"border_s10",
"flag_s11",
"image_s11",
"s11",
"border_s11",
"flag_s12",
"image_s12",
"s12",
"border_s12",
"flag_s13",
"image_s13",
"s13",
"border_s13",
"flag_s14",
"image_s14",
"s14",
"border_s14",
"flag_s15",
"image_s15",
"s15",
"border_s15",
"today",
"footnotes2",
"symbol_caption",
"nested"
]
}
</templatedata>
{{cob}}
<includeonly>{{Sandbox other||
<!--Categories below this line, please; interwikis at Wikidata-->
[[Category:Country infobox templates| ]]
[[Category:Templates that add a tracking category]]
}}</includeonly>
8cbf1ee3b4b56465bfd9368aea3d43fd02b80e66
Module:Coordinates
828
219
444
2023-06-21T17:33:40Z
[[w>Ladsgroup
0
Switch from proto-relative urls (//foo.bar.com) to HTTPS (https://foo.bar.com). Since we are only serving https in Wikimedia now, it always outputs https links. At the same time, proto-relative add two duplicate rows to externallinks table meaning this is adding tens of millions of extra and useless rows bloating the table
Scribunto
text/plain
--[[
This module is intended to replace the functionality of {{Coord}} and related
templates. It provides several methods, including
{{#invoke:Coordinates | coord }} : General function formatting and displaying
coordinate values.
{{#invoke:Coordinates | dec2dms }} : Simple function for converting decimal
degree values to DMS format.
{{#invoke:Coordinates | dms2dec }} : Simple function for converting DMS format
to decimal degree format.
{{#invoke:Coordinates | link }} : Export the link used to reach the tools
]]
require('strict')
local math_mod = require("Module:Math")
local coordinates = {};
local isSandbox = mw.getCurrentFrame():getTitle():find('sandbox', 1, true);
local current_page = mw.title.getCurrentTitle()
local page_name = mw.uri.encode( current_page.prefixedText, 'WIKI' );
local coord_link = 'https://geohack.toolforge.org/geohack.php?pagename=' .. page_name .. '¶ms='
--[[ Helper function, replacement for {{coord/display/title}} ]]
local function displaytitle(coords)
return mw.getCurrentFrame():extensionTag{
name = 'indicator',
args = { name = 'coordinates' },
content = '<span id="coordinates">[[Geographic coordinate system|Coordinates]]: ' .. coords .. '</span>'
}
end
--[[ Helper function, used in detecting DMS formatting ]]
local function dmsTest(first, second)
if type(first) ~= 'string' or type(second) ~= 'string' then
return nil
end
local s = (first .. second):upper()
return s:find('^[NS][EW]$') or s:find('^[EW][NS]$')
end
--[[ Wrapper function to grab args, see Module:Arguments for this function's documentation. ]]
local function makeInvokeFunc(funcName)
return function (frame)
local args = require('Module:Arguments').getArgs(frame, {
wrappers = 'Template:Coord'
})
return coordinates[funcName](args, frame)
end
end
--[[ Helper function, handle optional args. ]]
local function optionalArg(arg, supplement)
return arg and arg .. supplement or ''
end
--[[
Formats any error messages generated for display
]]
local function errorPrinter(errors)
local result = ""
for i,v in ipairs(errors) do
result = result .. '<strong class="error">Coordinates: ' .. v[2] .. '</strong><br />'
end
return result
end
--[[
Determine the required CSS class to display coordinates
Usually geo-nondefault is hidden by CSS, unless a user has overridden this for himself
default is the mode as specificied by the user when calling the {{coord}} template
mode is the display mode (dec or dms) that we will need to determine the css class for
]]
local function displayDefault(default, mode)
if default == "" then
default = "dec"
end
if default == mode then
return "geo-default"
else
return "geo-nondefault"
end
end
--[[
specPrinter
Output formatter. Takes the structure generated by either parseDec
or parseDMS and formats it for inclusion on Wikipedia.
]]
local function specPrinter(args, coordinateSpec)
local uriComponents = coordinateSpec["param"]
if uriComponents == "" then
-- RETURN error, should never be empty or nil
return "ERROR param was empty"
end
if args["name"] then
uriComponents = uriComponents .. "&title=" .. mw.uri.encode(coordinateSpec["name"])
end
local geodmshtml = '<span class="geo-dms" title="Maps, aerial photos, and other data for this location">'
.. '<span class="latitude">' .. coordinateSpec["dms-lat"] .. '</span> '
.. '<span class="longitude">' ..coordinateSpec["dms-long"] .. '</span>'
.. '</span>'
local lat = tonumber( coordinateSpec["dec-lat"] ) or 0
local geodeclat
if lat < 0 then
-- FIXME this breaks the pre-existing precision
geodeclat = tostring(coordinateSpec["dec-lat"]):sub(2) .. "°S"
else
geodeclat = (coordinateSpec["dec-lat"] or 0) .. "°N"
end
local long = tonumber( coordinateSpec["dec-long"] ) or 0
local geodeclong
if long < 0 then
-- FIXME does not handle unicode minus
geodeclong = tostring(coordinateSpec["dec-long"]):sub(2) .. "°W"
else
geodeclong = (coordinateSpec["dec-long"] or 0) .. "°E"
end
local geodechtml = '<span class="geo-dec" title="Maps, aerial photos, and other data for this location">'
.. geodeclat .. ' '
.. geodeclong
.. '</span>'
local geonumhtml = '<span class="geo">'
.. coordinateSpec["dec-lat"] .. '; '
.. coordinateSpec["dec-long"]
.. '</span>'
local inner = '<span class="' .. displayDefault(coordinateSpec["default"], "dms" ) .. '">' .. geodmshtml .. '</span>'
.. '<span class="geo-multi-punct"> / </span>'
.. '<span class="' .. displayDefault(coordinateSpec["default"], "dec" ) .. '">';
if not args["name"] then
inner = inner .. geodechtml
.. '<span style="display:none"> / ' .. geonumhtml .. '</span></span>'
else
inner = inner .. '<span class="vcard">' .. geodechtml
.. '<span style="display:none"> / ' .. geonumhtml .. '</span>'
.. '<span style="display:none"> (<span class="fn org">'
.. args["name"] .. '</span>)</span></span></span>'
end
local stylesheetLink = 'Module:Coordinates' .. ( isSandbox and '/sandbox' or '' ) .. '/styles.css'
return mw.getCurrentFrame():extensionTag{
name = 'templatestyles', args = { src = stylesheetLink }
} .. '<span class="plainlinks nourlexpansion">[' .. coord_link .. uriComponents ..
' ' .. inner .. ']</span>'
end
--[[ Helper function, convert decimal to degrees ]]
local function convert_dec2dms_d(coordinate)
local d = math_mod._round( coordinate, 0 ) .. "°"
return d .. ""
end
--[[ Helper function, convert decimal to degrees and minutes ]]
local function convert_dec2dms_dm(coordinate)
coordinate = math_mod._round( coordinate * 60, 0 );
local m = coordinate % 60;
coordinate = math.floor( (coordinate - m) / 60 );
local d = coordinate % 360 .."°"
return d .. string.format( "%02d′", m )
end
--[[ Helper function, convert decimal to degrees, minutes, and seconds ]]
local function convert_dec2dms_dms(coordinate)
coordinate = math_mod._round( coordinate * 60 * 60, 0 );
local s = coordinate % 60
coordinate = math.floor( (coordinate - s) / 60 );
local m = coordinate % 60
coordinate = math.floor( (coordinate - m) / 60 );
local d = coordinate % 360 .."°"
return d .. string.format( "%02d′", m ) .. string.format( "%02d″", s )
end
--[[
Helper function, convert decimal latitude or longitude to
degrees, minutes, and seconds format based on the specified precision.
]]
local function convert_dec2dms(coordinate, firstPostfix, secondPostfix, precision)
local coord = tonumber(coordinate)
local postfix
if coord >= 0 then
postfix = firstPostfix
else
postfix = secondPostfix
end
precision = precision:lower();
if precision == "dms" then
return convert_dec2dms_dms( math.abs( coord ) ) .. postfix;
elseif precision == "dm" then
return convert_dec2dms_dm( math.abs( coord ) ) .. postfix;
elseif precision == "d" then
return convert_dec2dms_d( math.abs( coord ) ) .. postfix;
end
end
--[[
Convert DMS format into a N or E decimal coordinate
]]
local function convert_dms2dec(direction, degrees_str, minutes_str, seconds_str)
local degrees = tonumber(degrees_str)
local minutes = tonumber(minutes_str) or 0
local seconds = tonumber(seconds_str) or 0
local factor = 1
if direction == "S" or direction == "W" then
factor = -1
end
local precision = 0
if seconds_str then
precision = 5 + math.max( math_mod._precision(seconds_str), 0 );
elseif minutes_str and minutes_str ~= '' then
precision = 3 + math.max( math_mod._precision(minutes_str), 0 );
else
precision = math.max( math_mod._precision(degrees_str), 0 );
end
local decimal = factor * (degrees+(minutes+seconds/60)/60)
return string.format( "%." .. precision .. "f", decimal ) -- not tonumber since this whole thing is string based.
end
--[[
Checks input values to for out of range errors.
]]
local function validate( lat_d, lat_m, lat_s, long_d, long_m, long_s, source, strong )
local errors = {};
lat_d = tonumber( lat_d ) or 0;
lat_m = tonumber( lat_m ) or 0;
lat_s = tonumber( lat_s ) or 0;
long_d = tonumber( long_d ) or 0;
long_m = tonumber( long_m ) or 0;
long_s = tonumber( long_s ) or 0;
if strong then
if lat_d < 0 then
table.insert(errors, {source, "latitude degrees < 0 with hemisphere flag"})
end
if long_d < 0 then
table.insert(errors, {source, "longitude degrees < 0 with hemisphere flag"})
end
--[[
#coordinates is inconsistent about whether this is an error. If globe: is
specified, it won't error on this condition, but otherwise it will.
For not simply disable this check.
if long_d > 180 then
table.insert(errors, {source, "longitude degrees > 180 with hemisphere flag"})
end
]]
end
if lat_d > 90 then
table.insert(errors, {source, "latitude degrees > 90"})
end
if lat_d < -90 then
table.insert(errors, {source, "latitude degrees < -90"})
end
if lat_m >= 60 then
table.insert(errors, {source, "latitude minutes >= 60"})
end
if lat_m < 0 then
table.insert(errors, {source, "latitude minutes < 0"})
end
if lat_s >= 60 then
table.insert(errors, {source, "latitude seconds >= 60"})
end
if lat_s < 0 then
table.insert(errors, {source, "latitude seconds < 0"})
end
if long_d >= 360 then
table.insert(errors, {source, "longitude degrees >= 360"})
end
if long_d <= -360 then
table.insert(errors, {source, "longitude degrees <= -360"})
end
if long_m >= 60 then
table.insert(errors, {source, "longitude minutes >= 60"})
end
if long_m < 0 then
table.insert(errors, {source, "longitude minutes < 0"})
end
if long_s >= 60 then
table.insert(errors, {source, "longitude seconds >= 60"})
end
if long_s < 0 then
table.insert(errors, {source, "longitude seconds < 0"})
end
return errors;
end
--[[
parseDec
Transforms decimal format latitude and longitude into the
structure to be used in displaying coordinates
]]
local function parseDec( lat, long, format )
local coordinateSpec = {}
local errors = {}
if not long then
return nil, {{"parseDec", "Missing longitude"}}
elseif not tonumber(long) then
return nil, {{"parseDec", "Longitude could not be parsed as a number: " .. long}}
end
errors = validate( lat, nil, nil, long, nil, nil, 'parseDec', false );
coordinateSpec["dec-lat"] = lat;
coordinateSpec["dec-long"] = long;
local mode = coordinates.determineMode( lat, long );
coordinateSpec["dms-lat"] = convert_dec2dms( lat, "N", "S", mode) -- {{coord/dec2dms|{{{1}}}|N|S|{{coord/prec dec|{{{1}}}|{{{2}}}}}}}
coordinateSpec["dms-long"] = convert_dec2dms( long, "E", "W", mode) -- {{coord/dec2dms|{{{2}}}|E|W|{{coord/prec dec|{{{1}}}|{{{2}}}}}}}
if format then
coordinateSpec.default = format
else
coordinateSpec.default = "dec"
end
return coordinateSpec, errors
end
--[[
parseDMS
Transforms degrees, minutes, seconds format latitude and longitude
into the a structure to be used in displaying coordinates
]]
local function parseDMS( lat_d, lat_m, lat_s, lat_f, long_d, long_m, long_s, long_f, format )
local coordinateSpec, errors, backward = {}, {}
lat_f = lat_f:upper();
long_f = long_f:upper();
-- Check if specified backward
if lat_f == 'E' or lat_f == 'W' then
lat_d, long_d, lat_m, long_m, lat_s, long_s, lat_f, long_f, backward = long_d, lat_d, long_m, lat_m, long_s, lat_s, long_f, lat_f, true;
end
errors = validate( lat_d, lat_m, lat_s, long_d, long_m, long_s, 'parseDMS', true );
if not long_d then
return nil, {{"parseDMS", "Missing longitude" }}
elseif not tonumber(long_d) then
return nil, {{"parseDMS", "Longitude could not be parsed as a number:" .. long_d }}
end
if not lat_m and not lat_s and not long_m and not long_s and #errors == 0 then
if math_mod._precision( lat_d ) > 0 or math_mod._precision( long_d ) > 0 then
if lat_f:upper() == 'S' then
lat_d = '-' .. lat_d;
end
if long_f:upper() == 'W' then
long_d = '-' .. long_d;
end
return parseDec( lat_d, long_d, format );
end
end
coordinateSpec["dms-lat"] = lat_d.."°"..optionalArg(lat_m,"′") .. optionalArg(lat_s,"″") .. lat_f
coordinateSpec["dms-long"] = long_d.."°"..optionalArg(long_m,"′") .. optionalArg(long_s,"″") .. long_f
coordinateSpec["dec-lat"] = convert_dms2dec(lat_f, lat_d, lat_m, lat_s) -- {{coord/dms2dec|{{{4}}}|{{{1}}}|0{{{2}}}|0{{{3}}}}}
coordinateSpec["dec-long"] = convert_dms2dec(long_f, long_d, long_m, long_s) -- {{coord/dms2dec|{{{8}}}|{{{5}}}|0{{{6}}}|0{{{7}}}}}
if format then
coordinateSpec.default = format
else
coordinateSpec.default = "dms"
end
return coordinateSpec, errors, backward
end
--[[
Check the input arguments for coord to determine the kind of data being provided
and then make the necessary processing.
]]
local function formatTest(args)
local result, errors
local backward, primary = false, false
local function getParam(args, lim)
local ret = {}
for i = 1, lim do
ret[i] = args[i] or ''
end
return table.concat(ret, '_')
end
if not args[1] then
-- no lat logic
return errorPrinter( {{"formatTest", "Missing latitude"}} )
elseif not tonumber(args[1]) then
-- bad lat logic
return errorPrinter( {{"formatTest", "Unable to parse latitude as a number:" .. args[1]}} )
elseif not args[4] and not args[5] and not args[6] then
-- dec logic
result, errors = parseDec(args[1], args[2], args.format)
if not result then
return errorPrinter(errors);
end
-- formatting for geohack: geohack expects D_N_D_E notation or D;D notation
-- wikiminiatlas doesn't support D;D notation
-- #coordinates parserfunction doesn't support negative decimals with NSWE
result.param = table.concat({
math.abs(tonumber(args[1])),
((tonumber(args[1]) or 0) < 0) and 'S' or 'N',
math.abs(tonumber(args[2])),
((tonumber(args[2]) or 0) < 0) and 'W' or 'E',
args[3] or ''}, '_')
elseif dmsTest(args[4], args[8]) then
-- dms logic
result, errors, backward = parseDMS(args[1], args[2], args[3], args[4],
args[5], args[6], args[7], args[8], args.format)
if args[10] then
table.insert(errors, {'formatTest', 'Extra unexpected parameters'})
end
if not result then
return errorPrinter(errors)
end
result.param = getParam(args, 9)
elseif dmsTest(args[3], args[6]) then
-- dm logic
result, errors, backward = parseDMS(args[1], args[2], nil, args[3],
args[4], args[5], nil, args[6], args['format'])
if args[8] then
table.insert(errors, {'formatTest', 'Extra unexpected parameters'})
end
if not result then
return errorPrinter(errors)
end
result.param = getParam(args, 7)
elseif dmsTest(args[2], args[4]) then
-- d logic
result, errors, backward = parseDMS(args[1], nil, nil, args[2],
args[3], nil, nil, args[4], args.format)
if args[6] then
table.insert(errors, {'formatTest', 'Extra unexpected parameters'})
end
if not result then
return errorPrinter(errors)
end
result.param = getParam(args, 5)
else
-- Error
return errorPrinter({{"formatTest", "Unknown argument format"}}) .. '[[Category:Pages with malformed coordinate tags]]'
end
result.name = args.name
local extra_param = {'dim', 'globe', 'scale', 'region', 'source', 'type'}
for _, v in ipairs(extra_param) do
if args[v] then
table.insert(errors, {'formatTest', 'Parameter: "' .. v .. '=" should be "' .. v .. ':"' })
end
end
local ret = specPrinter(args, result)
if #errors > 0 then
ret = ret .. ' ' .. errorPrinter(errors) .. '[[Category:Pages with malformed coordinate tags]]'
end
return ret, backward
end
--[[
Generate Wikidata tracking categories.
]]
local function makeWikidataCategories(qid)
local ret
local qid = qid or mw.wikibase.getEntityIdForCurrentPage()
if mw.wikibase and current_page.namespace == 0 then
if qid and mw.wikibase.entityExists(qid) and mw.wikibase.getBestStatements(qid, "P625") and mw.wikibase.getBestStatements(qid, "P625")[1] then
local snaktype = mw.wikibase.getBestStatements(qid, "P625")[1].mainsnak.snaktype
if snaktype == 'value' then
-- coordinates exist both here and on Wikidata, and can be compared.
ret = 'Coordinates on Wikidata'
elseif snaktype == 'somevalue' then
ret = 'Coordinates on Wikidata set to unknown value'
elseif snaktype == 'novalue' then
ret = 'Coordinates on Wikidata set to no value'
end
else
-- We have to either import the coordinates to Wikidata or remove them here.
ret = 'Coordinates not on Wikidata'
end
end
if ret then
return string.format('[[Category:%s]]', ret)
else
return ''
end
end
--[[
link
Simple function to export the coordinates link for other uses.
Usage:
{{#invoke:Coordinates | link }}
]]
function coordinates.link(frame)
return coord_link;
end
--[[
dec2dms
Wrapper to allow templates to call dec2dms directly.
Usage:
{{#invoke:Coordinates | dec2dms | decimal_coordinate | positive_suffix |
negative_suffix | precision }}
decimal_coordinate is converted to DMS format. If positive, the positive_suffix
is appended (typical N or E), if negative, the negative suffix is appended. The
specified precision is one of 'D', 'DM', or 'DMS' to specify the level of detail
to use.
]]
coordinates.dec2dms = makeInvokeFunc('_dec2dms')
function coordinates._dec2dms(args)
local coordinate = args[1]
local firstPostfix = args[2] or ''
local secondPostfix = args[3] or ''
local precision = args[4] or ''
return convert_dec2dms(coordinate, firstPostfix, secondPostfix, precision)
end
--[[
Helper function to determine whether to use D, DM, or DMS
format depending on the precision of the decimal input.
]]
function coordinates.determineMode( value1, value2 )
local precision = math.max( math_mod._precision( value1 ), math_mod._precision( value2 ) );
if precision <= 0 then
return 'd'
elseif precision <= 2 then
return 'dm';
else
return 'dms';
end
end
--[[
dms2dec
Wrapper to allow templates to call dms2dec directly.
Usage:
{{#invoke:Coordinates | dms2dec | direction_flag | degrees |
minutes | seconds }}
Converts DMS values specified as degrees, minutes, seconds too decimal format.
direction_flag is one of N, S, E, W, and determines whether the output is
positive (i.e. N and E) or negative (i.e. S and W).
]]
coordinates.dms2dec = makeInvokeFunc('_dms2dec')
function coordinates._dms2dec(args)
local direction = args[1]
local degrees = args[2]
local minutes = args[3]
local seconds = args[4]
return convert_dms2dec(direction, degrees, minutes, seconds)
end
--[[
coord
Main entry point for Lua function to replace {{coord}}
Usage:
{{#invoke:Coordinates | coord }}
{{#invoke:Coordinates | coord | lat | long }}
{{#invoke:Coordinates | coord | lat | lat_flag | long | long_flag }}
...
Refer to {{coord}} documentation page for many additional parameters and
configuration options.
Note: This function provides the visual display elements of {{coord}}. In
order to load coordinates into the database, the {{#coordinates:}} parser
function must also be called, this is done automatically in the Lua
version of {{coord}}.
]]
coordinates.coord = makeInvokeFunc('_coord')
function coordinates._coord(args)
if not tonumber(args[1]) and not args[2] then
args[3] = args[1]; args[1] = nil
local entity = mw.wikibase.getEntityObject(args.qid)
if entity
and entity.claims
and entity.claims.P625
and entity.claims.P625[1].mainsnak.snaktype == 'value'
then
local precision = entity.claims.P625[1].mainsnak.datavalue.value.precision
args[1] = entity.claims.P625[1].mainsnak.datavalue.value.latitude
args[2] = entity.claims.P625[1].mainsnak.datavalue.value.longitude
if precision then
precision = -math_mod._round(math.log(precision)/math.log(10),0)
args[1] = math_mod._round(args[1],precision)
args[2] = math_mod._round(args[2],precision)
end
end
end
local contents, backward = formatTest(args)
local Notes = args.notes or ''
local Display = args.display and args.display:lower() or 'inline'
-- it and ti are short for inline,title and title,inline
local function isInline(s)
-- Finds whether coordinates are displayed inline.
return s:find('inline') ~= nil or s == 'i' or s == 'it' or s == 'ti'
end
local function isInTitle(s)
-- Finds whether coordinates are displayed in the title.
return s:find('title') ~= nil or s == 't' or s == 'it' or s == 'ti'
end
local function coord_wrapper(in_args)
-- Calls the parser function {{#coordinates:}}.
return mw.getCurrentFrame():callParserFunction('#coordinates', in_args) or ''
end
local text = ''
if isInline(Display) then
text = text .. '<span class="geo-inline">' .. contents .. Notes .. '</span>'
end
if isInTitle(Display) then
-- Add to output since indicator content is invisible to Lua later on
if not isInline(Display) then
text = text .. '<span class="geo-inline-hidden noexcerpt">' .. contents .. Notes .. '</span>'
end
text = text .. displaytitle(contents .. Notes) .. makeWikidataCategories(args.qid)
end
if not args.nosave then
local page_title, count = mw.title.getCurrentTitle(), 1
if backward then
local tmp = {}
while not string.find((args[count-1] or ''), '[EW]') do tmp[count] = (args[count] or ''); count = count+1 end
tmp.count = count; count = 2*(count-1)
while count >= tmp.count do table.insert(tmp, 1, (args[count] or '')); count = count-1 end
for i, v in ipairs(tmp) do args[i] = v end
else
while count <= 9 do args[count] = (args[count] or ''); count = count+1 end
end
if isInTitle(Display) and not page_title.isTalkPage and page_title.subpageText ~= 'doc' and page_title.subpageText ~= 'testcases' then args[10] = 'primary' end
args.notes, args.format, args.display = nil
text = text .. coord_wrapper(args)
end
return text
end
--[[
coord2text
Extracts a single value from a transclusion of {{Coord}}.
IF THE GEOHACK LINK SYNTAX CHANGES THIS FUNCTION MUST BE MODIFIED.
Usage:
{{#invoke:Coordinates | coord2text | {{Coord}} | parameter }}
Valid values for the second parameter are: lat (signed integer), long (signed integer), type, scale, dim, region, globe, source
]]
function coordinates._coord2text(coord,type)
if coord == '' or type == '' or not type then return nil end
type = mw.text.trim(type)
if type == 'lat' or type == 'long' then
local result, negative = mw.text.split((mw.ustring.match(coord,'[%.%d]+°[NS] [%.%d]+°[EW]') or ''), ' ')
if type == 'lat' then
result, negative = result[1], 'S'
else
result, negative = result[2], 'W'
end
result = mw.text.split(result, '°')
if result[2] == negative then result[1] = '-'..result[1] end
return result[1]
else
return mw.ustring.match(coord, 'params=.-_' .. type .. ':(.-)[ _]')
end
end
function coordinates.coord2text(frame)
return coordinates._coord2text(frame.args[1],frame.args[2])
end
--[[
coordinsert
Injects some text into the Geohack link of a transclusion of {{Coord}} (if that text isn't already in the transclusion). Outputs the modified transclusion of {{Coord}}.
IF THE GEOHACK LINK SYNTAX CHANGES THIS FUNCTION MUST BE MODIFIED.
Usage:
{{#invoke:Coordinates | coordinsert | {{Coord}} | parameter:value | parameter:value | … }}
Do not make Geohack unhappy by inserting something which isn't mentioned in the {{Coord}} documentation.
]]
function coordinates.coordinsert(frame)
-- for the 2nd or later integer parameter (the first is the coord template, as above)
for i, v in ipairs(frame.args) do
if i ~= 1 then
-- if we cannot find in the coord_template the i_th coordinsert parameter e.g. region
if not mw.ustring.find(frame.args[1], (mw.ustring.match(frame.args[i], '^(.-:)') or '')) then
-- find from the params= up to the first possibly-present underscore
-- and append the i_th coordinsert parameter and a space
-- IDK why we're adding a space but it does seem somewhat convenient
frame.args[1] = mw.ustring.gsub(frame.args[1], '(params=.-)_? ', '%1_'..frame.args[i]..' ')
end
end
end
if frame.args.name then
-- if we can't find the vcard class
if not mw.ustring.find(frame.args[1], '<span class="vcard">') then
-- take something that looks like a coord template and add the vcard span with class and fn org class
local namestr = frame.args.name
frame.args[1] = mw.ustring.gsub(
frame.args[1],
'(<span class="geo%-default">)(<span[^<>]*>[^<>]*</span><span[^<>]*>[^<>]*<span[^<>]*>[^<>]*</span></span>)(</span>)',
'%1<span class="vcard">%2<span style="display:none"> (<span class="fn org">' .. namestr .. '</span>)</span></span>%3'
)
-- then find anything from coordinates parameters to the 'end' and attach the title parameter
frame.args[1] = mw.ustring.gsub(
frame.args[1],
'(¶ms=[^&"<>%[%] ]*) ',
'%1&title=' .. mw.uri.encode(namestr) .. ' '
)
end
end
-- replace the existing indicator with a new indicator using the modified content
frame.args[1] = mw.ustring.gsub(
frame.args[1],
'(<span class="geo%-inline[^"]*">(.+)</span>)\127[^\127]*UNIQ%-%-indicator%-%x+%-%-?QINU[^\127]*\127',
function (inline, coord) return inline .. displaytitle(coord) end
)
return frame.args[1]
end
return coordinates
6162d7e98fcf6faab5809049e0a48bb3e67d88e3
Template:Campaignbox Second Punic War
10
1063
2187
2023-06-26T23:10:16Z
[[]]>Nostalgia of Iran
0
Fixed redirect
wikitext
text/x-wiki
{{Campaignbox
| name = Campaignbox Second Punic War
| title = [[Second Punic War|{{Wrap|Second Punic War}}]]
| listclass = hlist
| battles =
; Prelude
* [[Siege of Saguntum|Saguntum]]
* [[Battle of Rhone Crossing|Rhone]]
* [[Hannibal's crossing of the Alps|Crossing of the Alps]]
; Italy
* [[Battle of Ticinus|Ticinus]]
* [[Battle of the Trebia|Trebia]]
* [[Siege of Mutina (218 BC)|Mutina]]
* [[Battle of Placentia (217 BC)|Placentia]]
* [[Battle of Victumulae|Victumulae]]
* [[Battle of Lake Trasimene|Lake Trasimene]]
* [[Battle of Umbrian Lake|Umbrian Lake]]
* [[Hannibal's crossing of the Apennines|Crossing of the Apennines]]
* [[Battle of Ager Falernus|Ager Falernus]]
* [[Battle of Geronium|Geronium]]
* [[Battle of Cannae|Cannae]]
* [[Battle of Silva Litana|Silva Litana]]
* [[Battle of Nola (216 BC)|1st Nola]]
* [[Siege of Nuceria Alfaterna|Nuceria Alfaterna]]
* [[Siege of Casilinum (216–215 BC)|1st Casilinum]]
* [[Battle of Hamae|Hamae]]
* [[Siege of Petelia|1st Petelia]]
* [[Battle of Cumae (215 BC)|Cumae]]
* [[Battle of Nola (215 BC)|2nd Nola]]
* [[Battle of Beneventum (214 BC)|1st Beneventum]]
* [[Battle of Nola (214 BC)|3rd Nola]]
* [[Siege of Casilinum (214 BC)|2nd Casilinum]]
* [[Battle of Lucania|Lucania]]
* [[Siege of Arpi|Arpi]]
* [[Battle of Tarentum (212 BC)|1st Tarentum]]
* [[Battle of Beneventum (212 BC)|2nd Beneventum]]
* [[Battle of Campi Veteres|Campi Veteres]]
* [[Battle of Capua|1st Capua]]
* [[Battle of the Silarus|Silarus]]
* [[Battle of Herdonia (212 BC)|1st Herdonia]]
* [[Siege of Capua (211 BC)|2nd Capua]]
* [[Hannibal's raid to Rome|Rome]]
* [[Battle of Sapriportis|Sapriportis]]
* [[Battle of Herdonia (210 BC)|2nd Herdonia]]
* [[Battle of Numistro|Numistro]]
* [[Battle of Canusium|Canusium]]
* [[Siege of Manduria|Manduria]]
* [[Siege of Caulonia|Caulonia]]
* [[Battle of Tarentum (209 BC)|2nd Tarentum]]
* [[Battle of Locri (208 BC)|Locri]]
* [[Battle of Petelia|2nd Petelia]]
* [[Battle of Venusia|Venusia]]
* [[Battle of Grumentum|Grumentum]]
* [[Battle of the Metaurus|Metaurus]]
* [[Battle of Crotona|Crotona]]
* [[Battle of Insubria|Insubria]]
; Iberia
* [[Battle of Cissa|Cissa]]
* [[Battle of Ebro River|Ebro River]]
* [[Battle of Ibera|Ibera]]
* [[Siege of Illiturgis|Illiturgis]]
* [[Battle of Munda (214 BC)|Munda]]
* [[Battle of Orongi|Orongi]]
* [[Battle of the Upper Baetis|Upper Baetis]]
* [[Battle of New Carthage|1st New Carthage]]
* [[Battle of Baria|Baria]]
* [[Battle of Baecula|Baecula]]
* [[Battle of Ilipa|Ilipa]]
* [[Mutiny at Sucro|Sucro]]
* [[Battle of Carteia|1st Carteia]]
* [[Battle of Carteia (naval)|2nd Carteia]]
* [[Battle of Cartagena (206 BC)|2nd New Carthage]]
; Sicily and Sardinia
* [[Battle of Lilybaeum|Lilybaeum]]
* [[Capture of Malta (218 BC)|Malta]]
* [[Battle of Decimomannu|Decimomannu]]
* [[Battle of Leontini|Leontini]]
* [[Siege of Syracuse (213–212 BC)|Syracuse]]
* [[Battle of Himera (211 BC)|Himera]]
* [[Siege of Agrigentum (210 BC)|Agrigentum]]
; North Africa
* [[Siege of Utica (204 BC)|1st Utica]]
* [[Battle of Utica (203 BC)|2nd Utica]]
* [[Battle of the Great Plains|Great Plains]]
* [[Battle of Cirta|Cirta]]
* [[Battle of Zama|Zama]]
}}<noinclude>
[[Category:Punic Wars navigational boxes|Second Punic War]]
[[Category:Ancient Rome campaignbox templates|Campaign]]
</noinclude>
f3015ca66e7919fa2b20c4ea9e8e7f8fb1283732
Template:Italics correction
10
1015
2085
2023-07-03T21:20:48Z
[[]]>Quondum
0
Undoing "font-style:italic" change: this is explicitly not supposed to be part of the template function (see template documentation) and creates double italics; which is highly undesirable since this is in many articles
wikitext
text/x-wiki
<span style="padding-right:0.15em;">{{{1}}}</span><noinclude>
{{Documentation}}
<!-- PLEASE ADD CATEGORIES AND INTERWIKI LINK ON THE DOCUMENTATION PAGE. -->
</noinclude>
e03ce33da89b58bc1b12b6ecfe93700d98be1ab5
Module:Location map
828
1037
2135
2023-07-04T08:09:33Z
[[]]>TheDJ
0
Avoid resizing on mobile skin and make scrollable instead
Scribunto
text/plain
require('strict')
local p = {}
local getArgs = require('Module:Arguments').getArgs
local function round(n, decimals)
local pow = 10^(decimals or 0)
return math.floor(n * pow + 0.5) / pow
end
function p.getMapParams(map, frame)
if not map then
error('The name of the location map definition to use must be specified', 2)
end
local moduletitle = mw.title.new('Module:Location map/data/' .. map)
if not moduletitle then
error(string.format('%q is not a valid name for a location map definition', map), 2)
elseif moduletitle.exists then
local mapData = mw.loadData('Module:Location map/data/' .. map)
return function(name, params)
if name == nil then
return 'Module:Location map/data/' .. map
elseif mapData[name] == nil then
return ''
elseif params then
return mw.message.newRawMessage(tostring(mapData[name]), unpack(params)):plain()
else
return mapData[name]
end
end
else
error('Unable to find the specified location map definition: "Module:Location map/data/' .. map .. '" does not exist', 2)
end
end
function p.data(frame, args, map)
if not args then
args = getArgs(frame, {frameOnly = true})
end
if not map then
map = p.getMapParams(args[1], frame)
end
local params = {}
for k,v in ipairs(args) do
if k > 2 then
params[k-2] = v
end
end
return map(args[2], #params ~= 0 and params)
end
local hemisphereMultipliers = {
longitude = { W = -1, w = -1, E = 1, e = 1 },
latitude = { S = -1, s = -1, N = 1, n = 1 }
}
local function decdeg(degrees, minutes, seconds, hemisphere, decimal, direction)
if decimal then
if degrees then
error('Decimal and DMS degrees cannot both be provided for ' .. direction, 2)
elseif minutes then
error('Minutes can only be provided with DMS degrees for ' .. direction, 2)
elseif seconds then
error('Seconds can only be provided with DMS degrees for ' .. direction, 2)
elseif hemisphere then
error('A hemisphere can only be provided with DMS degrees for ' .. direction, 2)
end
local retval = tonumber(decimal)
if retval then
return retval
end
error('The value "' .. decimal .. '" provided for ' .. direction .. ' is not valid', 2)
elseif seconds and not minutes then
error('Seconds were provided for ' .. direction .. ' without minutes also being provided', 2)
elseif not degrees then
if minutes then
error('Minutes were provided for ' .. direction .. ' without degrees also being provided', 2)
elseif hemisphere then
error('A hemisphere was provided for ' .. direction .. ' without degrees also being provided', 2)
end
return nil
end
decimal = tonumber(degrees)
if not decimal then
error('The degree value "' .. degrees .. '" provided for ' .. direction .. ' is not valid', 2)
elseif minutes and not tonumber(minutes) then
error('The minute value "' .. minutes .. '" provided for ' .. direction .. ' is not valid', 2)
elseif seconds and not tonumber(seconds) then
error('The second value "' .. seconds .. '" provided for ' .. direction .. ' is not valid', 2)
end
decimal = decimal + (minutes or 0)/60 + (seconds or 0)/3600
if hemisphere then
local multiplier = hemisphereMultipliers[direction][hemisphere]
if not multiplier then
error('The hemisphere "' .. hemisphere .. '" provided for ' .. direction .. ' is not valid', 2)
end
decimal = decimal * multiplier
end
return decimal
end
-- Finds a parameter in a transclusion of {{Coord}}.
local function coord2text(para,coord) -- this should be changed for languages which do not use Arabic numerals or the degree sign
local lat, long = mw.ustring.match(coord,'<span class="p%-latitude latitude">([^<]+)</span><span class="p%-longitude longitude">([^<]+)</span>')
if lat then
return tonumber(para == 'longitude' and long or lat)
end
local result = mw.text.split(mw.ustring.match(coord,'%-?[%.%d]+°[NS] %-?[%.%d]+°[EW]') or '', '[ °]')
if para == 'longitude' then result = {result[3], result[4]} end
if not tonumber(result[1]) or not result[2] then
mw.log('Malformed coordinates value')
mw.logObject(para, 'para')
mw.logObject(coord, 'coord')
return error('Malformed coordinates value', 2)
end
return tonumber(result[1]) * hemisphereMultipliers[para][result[2]]
end
-- effectively make removeBlanks false for caption and maplink, and true for everything else
-- if useWikidata is present but blank, convert it to false instead of nil
-- p.top, p.bottom, and their callers need to use this
function p.valueFunc(key, value)
if value then
value = mw.text.trim(value)
end
if value ~= '' or key == 'caption' or key == 'maplink' then
return value
elseif key == 'useWikidata' then
return false
end
end
local function getContainerImage(args, map)
if args.AlternativeMap then
return args.AlternativeMap
elseif args.relief and map('image1') ~= '' then
return map('image1')
else
return map('image')
end
end
function p.top(frame, args, map)
if not args then
args = getArgs(frame, {frameOnly = true, valueFunc = p.valueFunc})
end
if not map then
map = p.getMapParams(args[1], frame)
end
local width
local default_as_number = tonumber(mw.ustring.match(tostring(args.default_width),"%d*"))
if not args.width then
width = round((default_as_number or 240) * (tonumber(map('defaultscale')) or 1))
elseif mw.ustring.sub(args.width, -2) == 'px' then
width = mw.ustring.sub(args.width, 1, -3)
else
width = args.width
end
local width_as_number = tonumber(mw.ustring.match(tostring(width),"%d*")) or 0;
if width_as_number == 0 then
-- check to see if width is junk. If it is, then use default calculation
width = round((default_as_number or 240) * (tonumber(map('defaultscale')) or 1))
width_as_number = tonumber(mw.ustring.match(tostring(width),"%d*")) or 0;
end
if args.max_width ~= "" and args.max_width ~= nil then
-- check to see if width bigger than max_width
local max_as_number = tonumber(mw.ustring.match(args.max_width,"%d*")) or 0;
if width_as_number>max_as_number and max_as_number>0 then
width = args.max_width;
end
end
local retval = frame:extensionTag{name = 'templatestyles', args = {src = 'Module:Location map/styles.css'}}
if args.float == 'center' then
retval = retval .. '<div class="center">'
end
if args.caption and args.caption ~= '' and args.border ~= 'infobox' then
retval = retval .. '<div class="locmap noviewer noresize thumb '
if args.float == '"left"' or args.float == 'left' then
retval = retval .. 'tleft'
elseif args.float == '"center"' or args.float == 'center' or args.float == '"none"' or args.float == 'none' then
retval = retval .. 'tnone'
else
retval = retval .. 'tright'
end
retval = retval .. '"><div class="thumbinner" style="width:' .. (width + 2) .. 'px'
if args.border == 'none' then
retval = retval .. ';border:none'
elseif args.border then
retval = retval .. ';border-color:' .. args.border
end
retval = retval .. '"><div style="position:relative;width:' .. width .. 'px' .. (args.border ~= 'none' and ';border:1px solid lightgray">' or '">')
else
retval = retval .. '<div class="locmap" style="width:' .. width .. 'px;'
if args.float == '"left"' or args.float == 'left' then
retval = retval .. 'float:left;clear:left'
elseif args.float == '"center"' or args.float == 'center' then
retval = retval .. 'float:none;clear:both;margin-left:auto;margin-right:auto'
elseif args.float == '"none"' or args.float == 'none' then
retval = retval .. 'float:none;clear:none'
else
retval = retval .. 'float:right;clear:right'
end
retval = retval .. '"><div style="width:' .. width .. 'px;padding:0"><div style="position:relative;width:' .. width .. 'px">'
end
local image = getContainerImage(args, map)
local currentTitle = mw.title.getCurrentTitle()
retval = string.format(
'%s[[File:%s|%spx|%s%s|class=notpageimage]]',
retval,
image,
width,
args.alt or ((args.label or currentTitle.text) .. ' is located in ' .. map('name')),
args.maplink and ('|link=' .. args.maplink) or ''
)
if args.caption and args.caption ~= '' then
if (currentTitle.namespace == 0) and mw.ustring.find(args.caption, '##') then
retval = retval .. '[[Category:Pages using location map with a double number sign in the caption]]'
end
end
if args.overlay_image then
return retval .. '<div style="position:absolute;top:0;left:0">[[File:' .. args.overlay_image .. '|' .. width .. 'px|class=notpageimage]]</div>'
else
return retval
end
end
function p.bottom(frame, args, map)
if not args then
args = getArgs(frame, {frameOnly = true, valueFunc = p.valueFunc})
end
if not map then
map = p.getMapParams(args[1], frame)
end
local retval = '</div>'
local currentTitle = mw.title.getCurrentTitle()
if not args.caption or args.border == 'infobox' then
if args.border then
retval = retval .. '<div style="padding-top:0.2em">'
else
retval = retval .. '<div style="font-size:91%;padding-top:3px">'
end
retval = retval
.. (args.caption or (args.label or currentTitle.text) .. ' (' .. map('name') .. ')')
.. '</div>'
elseif args.caption ~= '' then
-- This is not the pipe trick. We're creating a link with no text on purpose, so that CSS can give us a nice image
retval = retval .. '<div class="thumbcaption"><div class="magnify">[[:File:' .. getContainerImage(args, map) .. '|class=notpageimage| ]]</div>' .. args.caption .. '</div>'
end
if args.switcherLabel then
retval = retval .. '<span class="switcher-label" style="display:none">' .. args.switcherLabel .. '</span>'
elseif args.autoSwitcherLabel then
retval = retval .. '<span class="switcher-label" style="display:none">Show map of ' .. map('name') .. '</span>'
end
retval = retval .. '</div></div>'
if args.caption_undefined then
mw.log('Removed parameter caption_undefined used.')
local parent = frame:getParent()
if parent then
mw.log('Parent is ' .. parent:getTitle())
end
mw.logObject(args, 'args')
if currentTitle.namespace == 0 then
retval = retval .. '[[Category:Location maps with removed parameters|caption_undefined]]'
end
end
if map('skew') ~= '' or map('lat_skew') ~= '' or map('crosses180') ~= '' or map('type') ~= '' then
mw.log('Removed parameter used in map definition ' .. map())
if currentTitle.namespace == 0 then
local key = (map('skew') ~= '' and 'skew' or '') ..
(map('lat_skew') ~= '' and 'lat_skew' or '') ..
(map('crosses180') ~= '' and 'crosses180' or '') ..
(map('type') ~= '' and 'type' or '')
retval = retval .. '[[Category:Location maps with removed parameters|' .. key .. ' ]]'
end
end
if string.find(map('name'), '|', 1, true) then
mw.log('Pipe used in name of map definition ' .. map())
if currentTitle.namespace == 0 then
retval = retval .. '[[Category:Location maps with a name containing a pipe]]'
end
end
if args.float == 'center' then
retval = retval .. '</div>'
end
return retval
end
local function markOuterDiv(x, y, imageDiv, labelDiv)
return mw.html.create('div')
:addClass('od')
:cssText('top:' .. round(y, 3) .. '%;left:' .. round(x, 3) .. '%')
:node(imageDiv)
:node(labelDiv)
end
local function markImageDiv(mark, marksize, label, link, alt, title)
local builder = mw.html.create('div')
:addClass('id')
:cssText('left:-' .. round(marksize / 2) .. 'px;top:-' .. round(marksize / 2) .. 'px')
:attr('title', title)
if marksize ~= 0 then
builder:wikitext(string.format(
'[[File:%s|%dx%dpx|%s|link=%s%s|class=notpageimage]]',
mark,
marksize,
marksize,
label,
link,
alt and ('|alt=' .. alt) or ''
))
end
return builder
end
local function markLabelDiv(label, label_size, label_width, position, background, x, marksize)
if tonumber(label_size) == 0 then
return mw.html.create('div'):addClass('l0'):wikitext(label)
end
local builder = mw.html.create('div')
:cssText('font-size:' .. label_size .. '%;width:' .. label_width .. 'em')
local distance = round(marksize / 2 + 1)
if position == 'top' then -- specified top
builder:addClass('pv'):cssText('bottom:' .. distance .. 'px;left:' .. (-label_width / 2) .. 'em')
elseif position == 'bottom' then -- specified bottom
builder:addClass('pv'):cssText('top:' .. distance .. 'px;left:' .. (-label_width / 2) .. 'em')
elseif position == 'left' or (tonumber(x) > 70 and position ~= 'right') then -- specified left or autodetected to left
builder:addClass('pl'):cssText('right:' .. distance .. 'px')
else -- specified right or autodetected to right
builder:addClass('pr'):cssText('left:' .. distance .. 'px')
end
builder = builder:tag('div')
:wikitext(label)
if background then
builder:cssText('background-color:' .. background)
end
return builder:done()
end
local function getX(longitude, left, right)
local width = (right - left) % 360
if width == 0 then
width = 360
end
local distanceFromLeft = (longitude - left) % 360
-- the distance needed past the map to the right equals distanceFromLeft - width. the distance needed past the map to the left equals 360 - distanceFromLeft. to minimize page stretching, go whichever way is shorter
if distanceFromLeft - width / 2 >= 180 then
distanceFromLeft = distanceFromLeft - 360
end
return 100 * distanceFromLeft / width
end
local function getY(latitude, top, bottom)
return 100 * (top - latitude) / (top - bottom)
end
function p.mark(frame, args, map)
if not args then
args = getArgs(frame, {wrappers = 'Template:Location map~'})
end
local mapnames = {}
if not map then
if args[1] then
map = {}
for mapname in mw.text.gsplit(args[1], '#', true) do
map[#map + 1] = p.getMapParams(mw.ustring.gsub(mapname, '^%s*(.-)%s*$', '%1'), frame)
mapnames[#mapnames + 1] = mapname
end
if #map == 1 then map = map[1] end
else
map = p.getMapParams('World', frame)
args[1] = 'World'
end
end
if type(map) == 'table' then
local outputs = {}
local oldargs = args[1]
for k,v in ipairs(map) do
args[1] = mapnames[k]
outputs[k] = tostring(p.mark(frame, args, v))
end
args[1] = oldargs
return table.concat(outputs, '#PlaceList#') .. '#PlaceList#'
end
local x, y, longitude, latitude
longitude = decdeg(args.lon_deg, args.lon_min, args.lon_sec, args.lon_dir, args.long, 'longitude')
latitude = decdeg(args.lat_deg, args.lat_min, args.lat_sec, args.lat_dir, args.lat, 'latitude')
if args.excludefrom then
-- If this mark is to be excluded from certain maps entirely (useful in the context of multiple maps)
for exclusionmap in mw.text.gsplit(args.excludefrom, '#', true) do
-- Check if this map is excluded. If so, return an empty string.
if args[1] == exclusionmap then
return ''
end
end
end
local builder = mw.html.create()
local currentTitle = mw.title.getCurrentTitle()
if args.coordinates then
-- Temporarily removed to facilitate infobox conversion. See [[Wikipedia:Coordinates in infoboxes]]
-- if longitude or latitude then
-- error('Coordinates from [[Module:Coordinates]] and individual coordinates cannot both be provided')
-- end
longitude = coord2text('longitude', args.coordinates)
latitude = coord2text('latitude', args.coordinates)
elseif not longitude and not latitude and args.useWikidata then
-- If they didn't provide either coordinate, try Wikidata. If they provided one but not the other, don't.
local entity = mw.wikibase.getEntity()
if entity and entity.claims and entity.claims.P625 and entity.claims.P625[1].mainsnak.snaktype == 'value' then
local value = entity.claims.P625[1].mainsnak.datavalue.value
longitude, latitude = value.longitude, value.latitude
end
if args.link and (currentTitle.namespace == 0) then
builder:wikitext('[[Category:Location maps with linked markers with coordinates from Wikidata]]')
end
end
if not longitude then
error('No value was provided for longitude')
elseif not latitude then
error('No value was provided for latitude')
end
if currentTitle.namespace > 0 then
if (not args.lon_deg) ~= (not args.lat_deg) then
builder:wikitext('[[Category:Location maps with different longitude and latitude precisions|Degrees]]')
elseif (not args.lon_min) ~= (not args.lat_min) then
builder:wikitext('[[Category:Location maps with different longitude and latitude precisions|Minutes]]')
elseif (not args.lon_sec) ~= (not args.lat_sec) then
builder:wikitext('[[Category:Location maps with different longitude and latitude precisions|Seconds]]')
elseif (not args.lon_dir) ~= (not args.lat_dir) then
builder:wikitext('[[Category:Location maps with different longitude and latitude precisions|Hemisphere]]')
elseif (not args.long) ~= (not args.lat) then
builder:wikitext('[[Category:Location maps with different longitude and latitude precisions|Decimal]]')
end
end
if ((tonumber(args.lat_deg) or 0) < 0) and ((tonumber(args.lat_min) or 0) ~= 0 or (tonumber(args.lat_sec) or 0) ~= 0 or (args.lat_dir and args.lat_dir ~='')) then
builder:wikitext('[[Category:Location maps with negative degrees and minutes or seconds]]')
end
if ((tonumber(args.lon_deg) or 0) < 0) and ((tonumber(args.lon_min) or 0) ~= 0 or (tonumber(args.lon_sec) or 0) ~= 0 or (args.lon_dir and args.lon_dir ~= '')) then
builder:wikitext('[[Category:Location maps with negative degrees and minutes or seconds]]')
end
if (((tonumber(args.lat_min) or 0) < 0) or ((tonumber(args.lat_sec) or 0) < 0)) then
builder:wikitext('[[Category:Location maps with negative degrees and minutes or seconds]]')
end
if (((tonumber(args.lon_min) or 0) < 0) or ((tonumber(args.lon_sec) or 0) < 0)) then
builder:wikitext('[[Category:Location maps with negative degrees and minutes or seconds]]')
end
if args.skew or args.lon_shift or args.markhigh then
mw.log('Removed parameter used in invocation.')
local parent = frame:getParent()
if parent then
mw.log('Parent is ' .. parent:getTitle())
end
mw.logObject(args, 'args')
if currentTitle.namespace == 0 then
local key = (args.skew and 'skew' or '') ..
(args.lon_shift and 'lon_shift' or '') ..
(args.markhigh and 'markhigh' or '')
builder:wikitext('[[Category:Location maps with removed parameters|' .. key ..' ]]')
end
end
if map('x') ~= '' then
x = tonumber(mw.ext.ParserFunctions.expr(map('x', { latitude, longitude })))
else
x = tonumber(getX(longitude, map('left'), map('right')))
end
if map('y') ~= '' then
y = tonumber(mw.ext.ParserFunctions.expr(map('y', { latitude, longitude })))
else
y = tonumber(getY(latitude, map('top'), map('bottom')))
end
if (x < 0 or x > 100 or y < 0 or y > 100) and not args.outside then
mw.log('Mark placed outside map boundaries without outside flag set. x = ' .. x .. ', y = ' .. y)
local parent = frame:getParent()
if parent then
mw.log('Parent is ' .. parent:getTitle())
end
mw.logObject(args, 'args')
if currentTitle.namespace == 0 then
local key = currentTitle.prefixedText
builder:wikitext('[[Category:Location maps with marks outside map and outside parameter not set|' .. key .. ' ]]')
end
end
local mark = args.mark or map('mark')
if mark == '' then
mark = 'Red pog.svg'
end
local marksize = tonumber(args.marksize) or tonumber(map('marksize')) or 8
local imageDiv = markImageDiv(mark, marksize, args.label or mw.title.getCurrentTitle().text, args.link or '', args.alt, args[2])
local labelDiv
if args.label and args.position ~= 'none' then
labelDiv = markLabelDiv(args.label, args.label_size or 91, args.label_width or 6, args.position, args.background, x, marksize)
end
return builder:node(markOuterDiv(x, y, imageDiv, labelDiv))
end
local function switcherSeparate(s)
if s == nil then return {} end
local retval = {}
for i in string.gmatch(s .. '#', '([^#]*)#') do
i = mw.text.trim(i)
retval[#retval + 1] = (i ~= '' and i)
end
return retval
end
function p.main(frame, args, map)
local caption_list = {}
if not args then
args = getArgs(frame, {wrappers = 'Template:Location map', valueFunc = p.valueFunc})
end
if args.useWikidata == nil then
args.useWikidata = true
end
if not map then
if args[1] then
map = {}
for mapname in string.gmatch(args[1], '[^#]+') do
map[#map + 1] = p.getMapParams(mw.ustring.gsub(mapname, '^%s*(.-)%s*$', '%1'), frame)
end
if args['caption'] then
if args['caption'] == "" then
while #caption_list < #map do
caption_list[#caption_list + 1] = args['caption']
end
else
for caption in mw.text.gsplit(args['caption'], '##', true) do
caption_list[#caption_list + 1] = caption
end
end
end
if #map == 1 then map = map[1] end
else
map = p.getMapParams('World', frame)
end
end
if type(map) == 'table' then
local altmaps = switcherSeparate(args.AlternativeMap)
if #altmaps > #map then
error(string.format('%d AlternativeMaps were provided, but only %d maps were provided', #altmaps, #map))
end
local overlays = switcherSeparate(args.overlay_image)
if #overlays > #map then
error(string.format('%d overlay_images were provided, but only %d maps were provided', #overlays, #map))
end
if #caption_list > #map then
error(string.format('%d captions were provided, but only %d maps were provided', #caption_list, #map))
end
local outputs = {}
args.autoSwitcherLabel = true
for k,v in ipairs(map) do
args.AlternativeMap = altmaps[k]
args.overlay_image = overlays[k]
args.caption = caption_list[k]
outputs[k] = p.main(frame, args, v)
end
return '<div class="switcher-container">' .. table.concat(outputs) .. '</div>'
else
return p.top(frame, args, map) .. tostring( p.mark(frame, args, map) ) .. p.bottom(frame, args, map)
end
end
return p
7291f35931f7e18eb3de0e5668f94abf73d34135
Module:Check for unknown parameters/doc
828
313
632
2023-07-09T21:17:30Z
[[w>Grufo
0
wikitext
text/x-wiki
{{Used in system|in [[MediaWiki:Abusefilter-warning-DS]]}}
{{Module rating|p}}
{{Lua|Module:If preview|noprotcat=yes}}
This module may be appended to a template to check for uses of unknown parameters. Unlike many other modules, this module is ''not'' implemented by a template.
== Usage ==
=== Basic usage ===
<syntaxhighlight lang="wikitext">
{{#invoke:Check for unknown parameters|check
|unknown=[[Category:Some tracking category]]
|arg1|arg2|arg3|argN}}
</syntaxhighlight>
or to sort the entries in the tracking category by parameter with a preview error message
<syntaxhighlight lang="wikitext">
{{#invoke:Check for unknown parameters|check
|unknown=[[Category:Some tracking category|_VALUE_]]
|preview=unknown parameter "_VALUE_"
|arg1|arg2|...|argN}}
</syntaxhighlight>
or for an explicit red error message
<syntaxhighlight lang="wikitext">
{{#invoke:Check for unknown parameters|check
|unknown=<span class="error">Sorry, I don't recognize _VALUE_</span>
|arg1|arg2|...|argN}}
</syntaxhighlight>
Here, <code>arg1</code>, <code>arg2</code>, ..., <code>argN</code>, are the known parameters. Unnamed (positional) parameters can be added too: <code><nowiki>|1|2|argname1|argname2|...</nowiki></code>. Any parameter which is used, but not on this list, will cause the module to return whatever is passed with the <code>unknown</code> parameter. The <code>_VALUE_</code> keyword, if used, will be changed to the name of the parameter. This is useful for either sorting the entries in a tracking category, or for provide more explicit information.
By default, the module makes no distinction between a defined-but-blank parameter and a non-blank parameter. That is, both unlisted {{Para|foo|x}} and {{Para|foo}} are reported. To only track non-blank parameters use {{Para|ignoreblank|1}}.
By default, the module ignores blank positional parameters. That is, an unlisted {{Para|2}} is ignored. To ''include'' blank positional parameters in the tracking use {{Para|showblankpositional|1}}.
=== Lua patterns ===
This module supports [[:mw:Extension:Scribunto/Lua reference manual#Patterns|Lua patterns]] (similar to [[regular expression]]s), which are useful when there are many known parameters which use a systematic pattern. For example, <code>[[Module:Infobox3cols|Infobox3cols]]</code> uses
<syntaxhighlight lang="lua">
regexp1 = "header[%d]+",
regexp2 = "label[%d]+",
regexp3 = "data[%d]+[abc]?",
regexp4 = "class[%d]+[abc]?",
regexp5 = "rowclass[%d]+",
regexp6 = "rowstyle[%d]+",
regexp7 = "rowcellstyle[%d]+",
</syntaxhighlight>
to match all parameters of the form <code>headerNUM</code>, <code>labelNUM</code>, <code>dataNUM</code>, <code>dataNUMa</code>, <code>dataNUMb</code>, <code>dataNUMc</code>, ..., <code>rowcellstyleNUM</code>, where NUM is a string of digits.
== Example ==
<syntaxhighlight lang="wikitext">
{{Infobox
| above = {{{name|}}}
| label1 = Height
| data1 = {{{height|}}}
| label2 = Weight
| data2 = {{{weight|}}}
| label3 = Website
| data3 = {{{website|}}}
}}<!--
end infobox, start tracking
-->{{#invoke:Check for unknown parameters|check
| unknown = {{Main other|[[Category:Some tracking category|_VALUE_]]}}
| preview = unknown parameter "_VALUE_"
| name
| height | weight
| website
}}
</syntaxhighlight>
==Call from within Lua code==
See the end of [[Module:Rugby box]] for a simple example or [[Module:Infobox3cols]] or [[Module:Flag]] for more complicated examples.
==See also==
* {{Clc|Unknown parameters}} (category page can have header {{tl|Unknown parameters category}})
* [[Module:Params]] – for complex operations involving parameters
* [[Template:Checks for unknown parameters]] – adds documentation to templates using this module
* [[Module:Check for deprecated parameters]] – similar module that checks for deprecated parameters
* [[Module:Check for clobbered parameters]] – module that checks for conflicting parameters
* [[Module:TemplatePar]] – similar function (originally from dewiki)
* [[Template:Parameters]] and [[Module:Parameters]] – generates a list of parameter names for a given template
* [[Project:TemplateData]] based template parameter validation
* [[Module:Parameter validation]] checks a lot more
* [[User:Bamyers99/TemplateParametersTool]] - A tool for checking usage of template parameters
<includeonly>{{Sandbox other||
<!-- Categories go here and interwikis go in Wikidata. -->
[[Category:Modules that add a tracking category]]
}}</includeonly>
31dc4e2854c7bd27db7480bd6e8c65ae8e364ac2
Module:Parameter names example
828
72
148
2023-07-10T09:41:44Z
[[w>Gonnym
0
if these are wanted, they should be handled differently (by passing a parameter to this module) as these cause pages to appear as unknown parameters for templates that don't use them
Scribunto
text/plain
-- This module implements {{parameter names example}}.
local p = {}
local function makeParam(s)
local lb = '{'
local rb = '}'
return lb:rep(3) .. s .. rb:rep(3)
end
local function italicize(s)
return "''" .. s .. "''"
end
local function plain(s)
return s
end
function p._main(args, frame)
-- Find how we want to format the arguments to the template.
local formatFunc
if args._display == 'italics' or args._display == 'italic' then
formatFunc = italicize
elseif args._display == 'plain' then
formatFunc = plain
else
formatFunc = makeParam
end
-- Build the table of template arguments.
local targs = {}
for k, v in pairs(args) do
if type(k) == 'number' then
targs[v] = formatFunc(v)
elseif not k:find('^_') then
targs[k] = v
end
end
--targs['nocat'] = 'yes';
--targs['categories'] = 'no';
--targs['demo'] = 'yes';
-- Find the template name.
local template
if args._template then
template = args._template
else
local currentTitle = mw.title.getCurrentTitle()
if currentTitle.prefixedText:find('/sandbox$') then
template = currentTitle.prefixedText
else
template = currentTitle.basePageTitle.prefixedText
end
end
-- Call the template with the arguments.
frame = frame or mw.getCurrentFrame()
local success, result = pcall(
frame.expandTemplate,
frame,
{title = template, args = targs}
)
if success then
return result
else
return ''
end
end
function p.main(frame)
local args = require('Module:Arguments').getArgs(frame, {
wrappers = 'Template:Parameter names example'
})
return p._main(args, frame)
end
return p
fdf94fb7a5dc1fabf118d60488a02f1e65b0df24
Template:Module link expanded
10
302
610
2023-07-13T14:23:50Z
[[w>Grufo
0
Add includeonly
wikitext
text/x-wiki
<includeonly><code>{{{{{{{|safesubst:}}}#invoke:Separated entries|main|[[Module:{{{1}}}{{{section|}}}|#invoke:{{{1}}}]]|{{{2|''function''}}}|separator=|}}}}</code></includeonly><noinclude>{{documentation}}<!-- Categories go on the /doc subpage and interwikis go on Wikidata. --></noinclude>
fe65540c0f768ae41c071fe8617ea0d5c38617e7
Module:Collapsible list
828
227
460
2023-07-13T14:29:43Z
[[w>Frietjes
0
we don't need to track this anymore after it was all cleaned up back in [[Template_talk:Collapsible_list/Archive_1#titlestyle_again|2018 to 2019]]
Scribunto
text/plain
local p = {}
local function getListItem( data )
if not type( data ) == 'string' then
return ''
end
return mw.ustring.format( '<li style="line-height: inherit; margin: 0">%s</li>', data )
end
-- Returns an array containing the keys of all positional arguments
-- that contain data (i.e. non-whitespace values).
local function getArgNums( args )
local nums = {}
for k, v in pairs( args ) do
if type( k ) == 'number' and
k >= 1 and
math.floor( k ) == k and
type( v ) == 'string' and
mw.ustring.match( v, '%S' ) then
table.insert( nums, k )
end
end
table.sort( nums )
return nums
end
-- Formats a list of classes, styles or other attributes.
local function formatAttributes( attrType, ... )
local attributes = { ... }
local nums = getArgNums( attributes )
local t = {}
for i, num in ipairs( nums ) do
table.insert( t, attributes[ num ] )
end
if #t == 0 then
return '' -- Return the blank string so concatenation will work.
end
return mw.ustring.format( ' %s="%s"', attrType, table.concat( t, ' ' ) )
end
-- TODO: use Module:List. Since the update for this comment is routine,
-- this is blocked without a consensus discussion by
-- [[MediaWiki_talk:Common.css/Archive_15#plainlist_+_hlist_indentation]]
-- if we decide hlist in plainlist in this template isn't an issue, we can use
-- module:list directly
-- [https://en.wikipedia.org/w/index.php?title=Module:Collapsible_list/sandbox&oldid=1130172480]
-- is an implementation (that will code rot slightly I expect)
local function buildList( args )
-- Get the list items.
local listItems = {}
local argNums = getArgNums( args )
for i, num in ipairs( argNums ) do
table.insert( listItems, getListItem( args[ num ] ) )
end
if #listItems == 0 then
return ''
end
listItems = table.concat( listItems )
-- hack around mw-collapsible show/hide jumpiness by looking for text-alignment
-- by setting a margin if centered
local textAlignmentCentered = 'text%-align%s*:%s*center'
local centeredTitle = (args.title_style and args.title_style:lower():match(textAlignmentCentered)
or args.titlestyle and args.titlestyle:lower():match(textAlignmentCentered))
local centeredTitleSpacing
if centeredTitle then
centeredTitleSpacing = 'margin: 0 4em'
else
centeredTitleSpacing = ''
end
-- Get class, style and title data.
local collapsibleContainerClass = formatAttributes(
'class',
'collapsible-list',
'mw-collapsible',
not args.expand and 'mw-collapsed'
)
local collapsibleContainerStyle = formatAttributes(
'style',
-- mostly work around .infobox-full-data defaulting to centered
'text-align: left;',
args.frame_style,
args.framestyle
)
local collapsibleTitleStyle = formatAttributes(
'style',
'line-height: 1.6em; font-weight: bold;',
args.title_style,
args.titlestyle
)
local jumpyTitleStyle = formatAttributes(
'style',
centeredTitleSpacing
)
local title = args.title or 'List'
local ulclass = formatAttributes( 'class', 'mw-collapsible-content', args.hlist and 'hlist' )
local ulstyle = formatAttributes(
'style',
'margin-top: 0; margin-bottom: 0; line-height: inherit;',
not args.bullets and 'list-style: none; margin-left: 0;',
args.list_style,
args.liststyle
)
local hlist_templatestyles = ''
if args.hlist then
hlist_templatestyles = mw.getCurrentFrame():extensionTag{
name = 'templatestyles', args = { src = 'Hlist/styles.css' }
}
end
-- Build the list.
return mw.ustring.format(
'%s<div%s%s>\n<div%s><div%s>%s</div></div>\n<ul%s%s>%s</ul>\n</div>',
hlist_templatestyles, collapsibleContainerClass, collapsibleContainerStyle,
collapsibleTitleStyle, jumpyTitleStyle, title, ulclass, ulstyle, listItems
)
end
function p.main( frame )
local origArgs
if frame == mw.getCurrentFrame() then
origArgs = frame:getParent().args
for k, v in pairs( frame.args ) do
origArgs = frame.args
break
end
else
origArgs = frame
end
local args = {}
for k, v in pairs( origArgs ) do
if type( k ) == 'number' or v ~= '' then
args[ k ] = v
end
end
return buildList( args )
end
return p
5b7e779e7529bcb12a219726ef6c948ea98874fd
Template:Country data Belgium
10
259
524
2023-07-18T17:32:14Z
[[w>Paine Ellsworth
0
srv pending possible RfC
wikitext
text/x-wiki
{{ {{{1<noinclude>|country showdata</noinclude>}}}
| alias = Belgium
| flag alias = Flag of Belgium (civil).svg <!-- Not the official flag of Belgium, but see talk page for objections to using the state flag as the default -->
| flag alias-government = Government Ensign of Belgium.svg
| flag alias-state = Flag of Belgium.svg<!-- The official flag of Belgium. See talk page for why it is not the default. -->
| flag alias-1830 = Flag of Belgium (1830).svg
| flag alias-1858 = Royal ensign of Belgium (1858).svg
| flag alias-army = Flag of the Belgian Land Component.svg
| link alias-army = Belgian Land Component
| flag alias-naval = Naval Ensign of Belgium.svg
| link alias-naval = Belgian Navy
| flag alias-air force = Air Force Ensign of Belgium.svg
| link alias-air force = Belgian Air Component
| flag alias-navy = Naval Ensign of Belgium.svg
| link alias-navy = Belgian Navy
| size = {{{size|}}}
| name = {{{name|}}}
| altlink = {{{altlink|}}}
| variant = {{{variant|}}}
<noinclude>
| var1 = state
| var2 = government
| var3 = 1830
| var4 = 1858
| redir1 = BEL
</noinclude>
}}
f0f17baf77dfb0ac61bc71743e2811ff99176a5e
Module:Lang
828
181
367
2023-07-28T21:46:18Z
[[w>Trappist the monk
0
Scribunto
text/plain
--[=[
Lua support for the {{lang}}, {{lang-xx}}, and {{transliteration}} templates and replacement of various supporting templates.
]=]
require('strict');
local getArgs = require ('Module:Arguments').getArgs;
local unicode = require ("Module:Unicode data"); -- for is_latin() and is_rtl()
local yesno = require ('Module:Yesno');
local lang_data = mw.loadData ('Module:Lang/data'); -- language name override and transliteration tool-tip tables
local lang_name_table = lang_data.lang_name_table; -- language codes, names, regions, scripts, suppressed scripts
local lang_table = lang_data.lang_name_table.lang;
local lang_dep_table = lang_data.lang_name_table.lang_dep;
local script_table = lang_data.lang_name_table.script;
local region_table = lang_data.lang_name_table.region;
local variant_table = lang_data.lang_name_table.variant;
local suppressed_table = lang_data.lang_name_table.suppressed;
local override_table = lang_data.override;
local synonym_table = mw.loadData ('Module:Lang/ISO 639 synonyms'); -- ISO 639-2/639-2T code translation to 639-1 code
local namespace = mw.title.getCurrentTitle().namespace; -- used for categorization
local content_lang = mw.language.getContentLanguage();
local this_wiki_lang_tag = content_lang.code; -- get this wiki's language tag
local this_wiki_lang_dir = content_lang:getDir(); -- get this wiki's language direction
local initial_style_state; -- set by lang_xx_normal() and lang_xx_italic()
local maint_cats = {}; -- maintenance categories go here
local maint_msgs = {}; -- and their messages go here
--[[--------------------------< I S _ S E T >------------------------------------------------------------------
Returns true if argument is set; false otherwise. Argument is 'set' when it exists (not nil) or when it is not an empty string.
]]
local function is_set( var )
return not (var == nil or var == '');
end
--[[--------------------------< I N V E R T _ I T A L I C S >-------------------------------------------------
This function attempts to invert the italic markup a args.text by adding/removing leading/trailing italic markup
in args.text. Like |italic=unset, |italic=invert disables automatic italic markup. Individual leading/trailing
apostrophes are converted to their html numeric entity equivalent so that the new italic markup doesn't become
bold markup inadvertently.
Leading and trailing wiki markup is extracted from args.text into separate table elements. Addition, removal,
replacement of wiki markup is handled by a string.gsub() replacement table operating only on these separate elements.
In the string.gsub() matching pattern, '.*' matches empty string as well as the three expected wiki markup patterns.
This function expects that markup in args.text is complete and correct; if it is not, oddness may result.
]]
local function invert_italics (source)
local invert_pattern_table = { -- leading/trailing markup add/remove/replace patterns
[""]="\'\'", -- empty string becomes italic markup
["\'\'"]="", -- italic markup becomes empty string
["\'\'\'"]="\'\'\'\'\'", -- bold becomes bold italic
["\'\'\'\'\'"]="\'\'\'", -- bold italic become bold
};
local seg = {};
source = source:gsub ("%f[\']\'%f[^\']", '''); -- protect single quote marks from being interpreted as bold markup
seg[1] = source:match ('^(\'\'+%f[^\']).+') or ''; -- get leading markup, if any; ignore single quote
seg[3] = source:match ('.+(%f[\']\'\'+)$') or ''; -- get trailing markup, if any; ignore single quote
if '' ~= seg[1] and '' ~= seg[3] then -- extract the 'text'
seg[2] = source:match ('^\'\'+%f[^\'](.+)%f[\']\'\'+$') -- from between leading and trailing markup
elseif '' ~= seg[1] then
seg[2] = source:match ('^\'\'+%f[^\'](.+)') -- following leading markup
elseif '' ~= seg[3] then
seg[2] = source:match ('(.+)%f[\']\'\'+$') -- preceding trailing markup
else
seg[2] = source -- when there is no markup
end
seg[1] = invert_pattern_table[seg[1]] or seg[1]; -- replace leading markup according to pattern table
seg[3] = invert_pattern_table[seg[3]] or seg[3]; -- replace leading markup according to pattern table
return table.concat (seg); -- put it all back together and done
end
--[[--------------------------< V A L I D A T E _ I T A L I C >------------------------------------------------
validates |italic= or |italics= assigned values.
When |italic= is set and has an acceptible assigned value, return the matching css font-style property value or,
for the special case 'default', return nil.
When |italic= is not set, or has an unacceptible assigned value, return nil and a nil error message.
When both |italic= and |italics= are set, returns nil and a 'conflicting' error message.
The return value nil causes the calling lang, lang_xx, or transl function to set args.italic according to the template's
defined default ('inherit' for {{lang}}, 'inherit' or 'italic' for {{lang-xx}} depending on
the individual template's requirements, 'italic' for {{transliteration}}) or to the value appropriate to |script=, if set ({{lang}}
and {{lang-xx}} only).
Accepted values and the values that this function returns are are:
nil - when |italic= absent or not set; returns nil
default - for completeness, should rarely if ever be used; returns nil
yes - force args.text to be rendered in italic font; returns 'italic'
no - force args.text to be rendered in normal font; returns 'normal'
unset - disables font control so that font-style applied to text is dictated by markup inside or outside the template; returns 'inherit'
invert - disables font control so that font-style applied to text is dictated by markup outside or inverted inside the template; returns 'invert'
]]
local function validate_italic (args)
local properties = {['yes'] = 'italic', ['no'] = 'normal', ['unset'] = 'inherit', ['invert'] = 'invert', ['default'] = nil};
local count = 0
for _, arg in pairs {'italic', 'italics', 'i'} do
if args[arg] then
count = count + 1
end
end
if count > 1 then -- return nil and an error message if more than one is set
return nil, 'only one of |italic=, |italics=, or |i= can be specified';
end
return properties[args.italic or args.italics or args.i], nil; -- return an appropriate value and a nil error message
end
--[=[--------------------------< V A L I D A T E _ C A T _ A R G S >----------------------------------------------------------
Default behavior of the {{lang}} and {{lang-xx}} templates is to add categorization when the templates are used in mainspace.
This default functionality may be suppressed by setting |nocat=yes or |cat=no. This function selects one of these two parameters
to control categorization.
Because having two parameters with 'opposite' names and 'opposite' values is confusing, this function accepts only affirmative
values for |nocat= and only negative values for |cat=; in both cases the 'other' sense (and non-sense) is not accepted and the
parameter is treated as if it were not set in the template.
Sets args.nocat to true if categorization is to be turned off; to nil if the default behavior should apply.
Accepted values for |nocat= are the text strings:
'yes', 'y', 'true', 't', on, '1' -- [[Module:Yesno]] returns logical true for all of these; false or nil else
for |cat=
'no', 'n', 'false', 'f', 'off', '0' -- [[Module:Yesno]] returns logical false for all of these; true or nil else
]=]
local function validate_cat_args (args)
if not (args.nocat or args.cat) then -- both are nil, so categorize
return;
end
if false == yesno (args.cat) or true == yesno (args.nocat) then
args.nocat = true; -- set to true when args.nocat is affirmative; nil else (as if the parameter were not set in the template)
else -- args.nocat is the parameter actually used.
args.nocat = nil;
end
end
--[[--------------------------< I N _ A R R A Y >--------------------------------------------------------------
Whether needle is in haystack
]]
local function in_array ( needle, haystack )
if needle == nil then
return false;
end
for n,v in ipairs( haystack ) do
if v == needle then
return n;
end
end
return false;
end
--[[--------------------------< F O R M A T _ I E T F _ T A G >------------------------------------------------
prettify ietf tags to use recommended subtag formats:
code: lower case
script: sentence case
region: upper case
variant: lower case
private: lower case prefixed with -x-
]]
local function format_ietf_tag (code, script, region, variant, private)
local out = {};
if is_set (private) then
return table.concat ({code:lower(), 'x', private:lower()}, '-'); -- if private, all other tags ignored
end
table.insert (out, code:lower());
if is_set (script) then
script = script:lower():gsub ('^%a', string.upper);
table.insert (out, script);
end
if is_set (region) then
table.insert (out, region:upper());
end
if is_set (variant) then
table.insert (out, variant:lower());
end
return table.concat (out, '-');
end
--[[--------------------------< G E T _ I E T F _ P A R T S >--------------------------------------------------
extracts and returns IETF language tag parts:
primary language subtag (required) - 2 or 3 character IANA language code
script subtag - four character IANA script code
region subtag - two-letter or three digit IANA region code
variant subtag - four digit or 5-8 alnum variant code; only one variant subtag supported
private subtag - x- followed by 1-8 alnum private code; only supported with the primary language tag
in any one of these forms
lang lang-variant
lang-script lang-script-variant
lang-region lang-region-variant
lang-script-region lang-script-region-variant
lang-x-private
each of lang, script, region, variant, and private, when used, must be valid
Languages with both two- and three-character code synonyms are promoted to the two-character synonym because
the IANA registry file omits the synonymous three-character code; we cannot depend on browsers understanding
the synonymous three-character codes in the lang= attribute.
For {{lang-xx}} templates, the parameters |script=, |region=, and |variant= are supported (not supported in {{lang}}
because those parameters are superfluous to the IETF subtags in |code=)
returns six values; all lower case. Valid parts are returned as themselves; omitted parts are returned as empty strings, invalid
parts are returned as nil; the sixth returned item is an error message (if an error detected) or nil.
see http://www.rfc-editor.org/rfc/bcp/bcp47.txt section 2.1
]]
local function get_ietf_parts (source, args_script, args_region, args_variant)
local code, script, region, variant, private; -- ietf tag parts
if not is_set (source) then
return nil, nil, nil, nil, nil, 'missing language tag';
end
local pattern = { -- table of tables holding acceptibe ietf tag patterns and short names of the ietf part captured by the pattern
{'^(%a%a%a?)%-(%a%a%a%a)%-(%a%a)%-(%d%d%d%d)$', 's', 'r', 'v'}, -- 1 - ll-Ssss-RR-variant (where variant is 4 digits)
{'^(%a%a%a?)%-(%a%a%a%a)%-(%d%d%d)%-(%d%d%d%d)$', 's', 'r', 'v'}, -- 2 - ll-Ssss-DDD-variant (where region is 3 digits; variant is 4 digits)
{'^(%a%a%a?)%-(%a%a%a%a)%-(%a%a)%-(%w%w%w%w%w%w?%w?%w?)$', 's', 'r', 'v'}, -- 3 - ll-Ssss-RR-variant (where variant is 5-8 alnum characters)
{'^(%a%a%a?)%-(%a%a%a%a)%-(%d%d%d)%-(%w%w%w%w%w%w?%w?%w?)$', 's', 'r', 'v'}, -- 4 - ll-Ssss-DDD-variant (where region is 3 digits; variant is 5-8 alnum characters)
{'^(%a%a%a?)%-(%a%a%a%a)%-(%d%d%d%d)$', 's', 'v'}, -- 5 - ll-Ssss-variant (where variant is 4 digits)
{'^(%a%a%a?)%-(%a%a%a%a)%-(%w%w%w%w%w%w?%w?%w?)$', 's', 'v'}, -- 6 - ll-Ssss-variant (where variant is 5-8 alnum characters)
{'^(%a%a%a?)%-(%a%a)%-(%d%d%d%d)$', 'r', 'v'}, -- 7 - ll-RR-variant (where variant is 4 digits)
{'^(%a%a%a?)%-(%d%d%d)%-(%d%d%d%d)$', 'r', 'v'}, -- 8 - ll-DDD-variant (where region is 3 digits; variant is 4 digits)
{'^(%a%a%a?)%-(%a%a)%-(%w%w%w%w%w%w?%w?%w?)$', 'r', 'v'}, -- 9 - ll-RR-variant (where variant is 5-8 alnum characters)
{'^(%a%a%a?)%-(%d%d%d)%-(%w%w%w%w%w%w?%w?%w?)$', 'r', 'v'}, -- 10 - ll-DDD-variant (where region is 3 digits; variant is 5-8 alnum characters)
{'^(%a%a%a?)%-(%d%d%d%d)$', 'v'}, -- 11 - ll-variant (where variant is 4 digits)
{'^(%a%a%a?)%-(%w%w%w%w%w%w?%w?%w?)$', 'v'}, -- 12 - ll-variant (where variant is 5-8 alnum characters)
{'^(%a%a%a?)%-(%a%a%a%a)%-(%a%a)$', 's', 'r'}, -- 13 - ll-Ssss-RR
{'^(%a%a%a?)%-(%a%a%a%a)%-(%d%d%d)$', 's', 'r'}, -- 14 - ll-Ssss-DDD (region is 3 digits)
{'^(%a%a%a?)%-(%a%a%a%a)$', 's'}, -- 15 - ll-Ssss
{'^(%a%a%a?)%-(%a%a)$', 'r'}, -- 16 - ll-RR
{'^(%a%a%a?)%-(%d%d%d)$', 'r'}, -- 17 - ll-DDD (region is 3 digits)
{'^(%a%a%a?)$'}, -- 18 - ll
{'^(%a%a%a?)%-x%-(%w%w?%w?%w?%w?%w?%w?%w?)$', 'p'}, -- 19 - ll-x-pppppppp (private is 1-8 alnum characters)
}
local t = {}; -- table of captures; serves as a translator between captured ietf tag parts and named variables
for i, v in ipairs (pattern) do -- spin through the pattern table looking for a match
local c1, c2, c3, c4; -- captures in the 'pattern' from the pattern table go here
c1, c2, c3, c4 = source:match (pattern[i][1]); -- one or more captures set if source matches pattern[i])
if c1 then -- c1 always set on match
code = c1; -- first capture is always code
t = {
[pattern[i][2] or 'x'] = c2, -- fill the table of captures with the rest of the captures
[pattern[i][3] or 'x'] = c3, -- take index names from pattern table and assign sequential captures
[pattern[i][4] or 'x'] = c4, -- index name may be nil in pattern[i] table so "or 'x'" spoofs a name for this index in this table
};
script = t.s or ''; -- translate table contents to named variables;
region = t.r or ''; -- absent table entries are nil so set named ietf parts to empty string for concatenation
variant= t.v or '';
private = t.p or '';
break; -- and done
end
end
if not code then
return nil, nil, nil, nil, nil, table.concat ({'unrecognized language tag: ', source}); -- don't know what we got but it is malformed
end
code = code:lower(); -- ensure that we use and return lower case version of this
if not (override_table[code] or lang_table[code] or synonym_table[code] or lang_dep_table[code]) then
return nil, nil, nil, nil, nil, table.concat ({'unrecognized language code: ', code}); -- invalid language code, don't know about the others (don't care?)
end
if synonym_table[code] then -- if 639-2/639-2T code has a 639-1 synonym
table.insert (maint_cats, table.concat ({'Lang and lang-xx code promoted to ISO 639-1|', code}));
table.insert (maint_msgs, table.concat ({'code: ', code, ' promoted to code: ', synonym_table[code]}));
code = synonym_table[code]; -- use the synonym
end
if is_set (script) then
if is_set (args_script) then
return code, nil, nil, nil, nil, 'redundant script tag'; -- both code with script and |script= not allowed
end
else
script = args_script or ''; -- use args.script if provided
end
if is_set (script) then
script = script:lower(); -- ensure that we use and return lower case version of this
if not script_table[script] then
return code, nil, nil, nil, nil, table.concat ({'unrecognized script: ', script, ' for code: ', code}); -- language code ok, invalid script, don't know about the others (don't care?)
end
end
if suppressed_table[script] then -- ensure that code-script does not use a suppressed script
if in_array (code, suppressed_table[script]) then
return code, nil, nil, nil, nil, table.concat ({'script: ', script, ' not supported for code: ', code}); -- language code ok, script is suppressed for this code
end
end
if is_set (region) then
if is_set (args_region) then
return code, nil, nil, nil, nil, 'redundant region tag'; -- both code with region and |region= not allowed
end
else
region = args_region or ''; -- use args.region if provided
end
if is_set (region) then
region = region:lower(); -- ensure that we use and return lower case version of this
if not region_table[region] then
return code, script, nil, nil, nil, table.concat ({'unrecognized region: ', region, ' for code: ', code});
end
end
if is_set (variant) then
if is_set (args_variant) then
return code, nil, nil, nil, nil, 'redundant variant tag'; -- both code with variant and |variant= not allowed
end
else
variant = args_variant or ''; -- use args.variant if provided
end
if is_set (variant) then
variant = variant:lower(); -- ensure that we use and return lower case version of this
if not variant_table[variant] then -- make sure variant is valid
return code, script, region, nil, nil, table.concat ({'unrecognized variant: ', variant});
end -- does this duplicate/replace tests in lang() and lang_xx()?
if is_set (script) then -- if script set it must be part of the 'prefix'
if not in_array (table.concat ({code, '-', script}), variant_table[variant]['prefixes']) then
return code, script, region, nil, nil, table.concat ({'unrecognized variant: ', variant, ' for code-script pair: ', code, '-', script});
end
elseif is_set (region) then -- if region set, there are some prefixes that require lang code and region (en-CA-newfound)
if not in_array (code, variant_table[variant]['prefixes']) then -- first see if lang code is all that's required (en-oxendict though en-GB-oxendict is preferred)
if not in_array (table.concat ({code, '-', region}), variant_table[variant]['prefixes']) then -- now try for lang code and region (en-CA-newfound)
return code, script, region, nil, nil, table.concat ({'unrecognized variant: ', variant, ' for code-region pair: ', code, '-', region});
end
end
else -- cheap way to determine if there are prefixes; fonipa and others don't have prefixes; # operator always returns 0
if variant_table[variant]['prefixes'][1] and not in_array (code, variant_table[variant]['prefixes']) then
return code, script, region, nil, nil, table.concat ({'unrecognized variant: ', variant, ' for code: ', code});
end
end
end
if is_set (private) then
private = private:lower(); -- ensure that we use and return lower case version of this
if not override_table[table.concat ({code, '-x-', private})] then -- make sure private tag is valid; note that index
return code, script, region, nil, nil, table.concat ({'unrecognized private tag: ', private});
end
end
return code, script, region, variant, private, nil; -- return the good bits; make sure that msg is nil
end
--[[--------------------------< M A K E _ E R R O R _ M S G >--------------------------------------------------
assembles an error message from template name, message text, help link, and error category.
]]
local function make_error_msg (msg, args, template)
local out = {};
local category;
if 'Transliteration' == template then
category = 'Transliteration';
else
category = 'Lang and lang-xx'
end
table.insert (out, table.concat ({'[', args.text or 'undefined', '] '})); -- for error messages output args.text if available
table.insert (out, table.concat ({'<span style=\"color:#d33\">Error: {{', template, '}}: '}));
table.insert (out, msg);
table.insert (out, table.concat ({' ([[:Category:', category, ' template errors|help]])'}));
table.insert (out, '</span>');
if (0 == namespace or 10 == namespace) and not args.nocat then -- categorize in article space (and template space to take care of broken usages)
table.insert (out, table.concat ({'[[Category:', category, ' template errors]]'}));
end
return table.concat (out);
end
--[=[-------------------------< M A K E _ W I K I L I N K >----------------------------------------------------
Makes a wikilink; when both link and display text is provided, returns a wikilink in the form [[L|D]]; if only
link is provided, returns a wikilink in the form [[L]]; if neither are provided or link is omitted, returns an
empty string.
]=]
local function make_wikilink (link, display)
if is_set (link) then
if is_set (display) then
return table.concat ({'[[', link, '|', display, ']]'});
else
return table.concat ({'[[', link, ']]'});
end
else
return '';
end
end
--[[--------------------------< D I V _ M A R K U P _ A D D >--------------------------------------------------
adds <i> and </i> tags to list-item text or to implied <p>..</p> text. mixed not supported
]]
local function div_markup_add (text, style)
local implied_p = {};
if text:find ('^\n[%*:;#]') then -- look for list markup; list markup must begin at start of text
if 'italic' == style then
return text:gsub ('(\n[%*:;#]+)([^\n]+)', '%1<i>%2</i>'); -- insert italic markup at each list item
else
return text;
end
end
if text:find ('\n+') then -- look for any number of \n characters in text
text = text:gsub ('([^\n])\n([^\n])', '%1 %2'); -- replace single newline characters with a space character which mimics mediawiki
if 'italic' == style then
text = text:gsub('[^\n]+', '<p><i>%1</i></p>'); -- insert p and italic markup tags at each impled p (two or more consecutive '\n\n' sequences)
else
text = text:gsub ('[^\n]+', '<p>%1</p>'); -- insert p markup at each impled p
text = text:gsub ('\n', ''); -- strip newline characters
end
end
return text;
end
--[[--------------------------< T I T L E _ W R A P P E R _ M A K E >------------------------------------------
makes a <span title="<title text>"><content_text></span> or <div title="<title text>"><content_text></div> where
<title text> is in the tool-tip in the wiki's local language and <content_text> is non-local-language text in
html markup. This because the lang= attibute applies to the content of its enclosing tag.
<tag> holds a string 'div' or 'span' used to choose the correct wrapping tag
]]
local function title_wrapper_make (title_text, content_text, tag)
local wrapper_t = {};
table.insert (wrapper_t, table.concat ({'<', tag})); -- open opening wrapper tag
table.insert (wrapper_t, ' title=\"'); -- begin title attribute
table.insert (wrapper_t, title_text); -- add <title_text>
table.insert (wrapper_t, '\">'); -- end title attribute and close opening wrapper tag
table.insert (wrapper_t, content_text); -- add <content_text>
table.insert (wrapper_t, table.concat ({'</', tag, '>'})); -- add closing wrapper tag
return table.concat (wrapper_t); -- make a big string and done
end
--[[--------------------------< M A K E _ T E X T _ H T M L >--------------------------------------------------
Add the html markup to text according to the type of content that it is: <span> or <i> tags for inline content or
<div> tags for block content
The lang= attribute also applies to the content of the tag where it is placed so this is wrong because 'Spanish
language text' is English:
<i lang="es" title="Spanish language text">casa</i>
should be:
<span title="Spanish language text"><i lang="es">casa</i></span>
or for <div>...</div>:
<div title="Spanish language text"><div lang="es"><spanish-language-text></div></div>
]]
local function make_text_html (code, text, tag, rtl, style, size, language)
local html_t = {};
local style_added = '';
local wrapper_tag = tag; -- <tag> gets modified so save a copy for use when/if we create a wrapper span or div
if text:match ('^%*') then
table.insert (html_t, '*'); -- move proto language text prefix outside of italic markup if any; use numeric entity because plain splat confuses MediaWiki
text = text:gsub ('^%*', ''); -- remove the splat from the text
end
if 'span' == tag then -- default html tag for inline content
if 'italic' == style then -- but if italic
tag = 'i'; -- change to <i> tags
end
else -- must be div so go
text = div_markup_add (text, style); -- handle implied <p>, implied <p> with <i>, and list markup (*;:#) with <i>
end
table.insert (html_t, table.concat ({'<', tag})); -- open the <i>, <span>, or <div> html tag
code = code:gsub ('%-x%-.*', ''); -- strip private use subtag from code tag because meaningless outside of wikipedia
table.insert (html_t, table.concat ({' lang="', code, '\"'})); -- add language attribute
if (rtl or unicode.is_rtl(text)) and ('ltr' == this_wiki_lang_dir) then -- text is right-to-left on a left-to-right wiki
table.insert (html_t, ' dir="rtl"'); -- add direction attribute for right-to-left languages
elseif not (rtl or unicode.is_rtl(text)) and ('rtl' == this_wiki_lang_dir) then -- text is left-to-right on a right-to-left wiki
table.insert (html_t, ' dir="ltr"'); -- add direction attribute for left-to-right languages
end
if 'normal' == style then -- when |italic=no
table.insert (html_t, ' style=\"font-style: normal;'); -- override external markup, if any
style_added = '\"'; -- remember that style attribute added and is not yet closed
end
if is_set (size) then -- when |size=<something>
if is_set (style_added) then
table.insert (html_t, table.concat ({' font-size: ', size, ';'})); -- add when style attribute already inserted
else
table.insert (html_t, table.concat ({' style=\"font-size: ', size, ';'})); -- create style attribute
style_added = '\"'; -- remember that style attribute added and is not yet closed
end
end
table.insert (html_t, table.concat ({style_added, '>'})); -- close the opening html tag
table.insert (html_t, text); -- insert the text
table.insert (html_t, table.concat ({'</', tag, '>'})); -- close the 'text' <i>, <span>, or <div> html tag
if is_set (language) then -- create a <title_text> string for the title= attribute in a wrapper span or div
local title_text;
if 'zxx' == code then -- special case for this tag 'no linguistic content'
title_text = table.concat ({language, ' text'}); -- not a language so don't use 'language' in title text
elseif mw.ustring.find (language, 'languages', 1, true) then
title_text = table.concat ({language, ' collective text'}); -- for collective languages
else
title_text = table.concat ({language, '-language text'}); -- for individual languages
end
return title_wrapper_make (title_text, table.concat (html_t), wrapper_tag);
else
return table.concat (html_t);
end
end
--[=[-------------------------< M A K E _ C A T E G O R Y >----------------------------------------------------
For individual language, <language>, returns:
[[Category:Articles containing <language>-language text]]
for English:
[[Category:Articles containing explicitly cited English-language text]]
for ISO 639-2 collective languages (and for 639-1 bh):
[[Category:Articles with text in <language> languages]]
]=]
local function make_category (code, language_name, nocat, name_get)
local cat = {};
local retval;
if ((0 ~= namespace) or nocat) and not name_get then -- only categorize in article space
return ''; -- return empty string for concatenation
end
if mw.ustring.find (language_name, 'languages', 1, true) then
return table.concat ({'[[Category:Articles with text in ', language_name, ']]'});
end
table.insert (cat, '[[Category:Articles containing ');
if this_wiki_lang_tag == code then
table.insert (cat, 'explicitly cited ' .. language_name); -- unique category name for the local language
else
table.insert (cat, language_name);
end
table.insert (cat, '-language text]]');
return table.concat (cat);
end
--[[--------------------------< M A K E _ T R A N S L I T >----------------------------------------------------
return translit <i lang=xx-Latn>...</i> where xx is the language code; else return empty string
The value |script= is not used in {{transliteration}} for this purpose; instead it uses |code. Because language scripts
are listed in the {{transliteration}} switches they are included in the data tables. The script parameter is introduced
at {{Language with name and transliteration}}. If |script= is set, this function uses it in preference to code.
To avoid confusion, in this module and the templates that use it, the transliteration script parameter is renamed
to be |translit-script= (in this function, tscript)
This function is used by both lang_xx() and transl()
lang_xx() always provides code, language_name, and translit; may provide tscript; never provides style
transl() always provides language_name, translit, and one of code or tscript, never both; always provides style
For {{transliteration}}, style only applies when a language code is provided
]]
local function make_translit (code, language_name, translit, std, tscript, style)
local title;
local out_t = {};
local title_t = lang_data.translit_title_table; -- table of transliteration standards and the language codes and scripts that apply to those standards
local title_text = ''; -- tool tip text for title= attribute
std = std and std:lower(); -- lower case for table indexing
if not is_set (std) and not is_set (tscript) then -- when neither standard nor script specified
title_text = language_name; -- write a generic tool tip
if not mw.ustring.find (language_name, 'languages', 1, true) then -- collective language names (plural 'languages' is part of the name)
title_text = title_text .. '-language'; -- skip this text (individual and macro languages only)
end
title_text = title_text .. ' romanization'; -- finish the tool tip; use romanization when neither script nor standard supplied
elseif is_set (std) and is_set (tscript) then -- when both are specified
if title_t[std] then -- and if standard is legitimate
if title_t[std][tscript] then -- and if script for that standard is legitimate
if script_table[tscript] then
title_text = title_text .. table.concat ({title_t[std][tscript:lower()], ' (', script_table[tscript], ' script) transliteration'}); -- add the appropriate text to the tool tip
else
title_text = title_text .. title_t[std]['default']; -- use the default if script not in std table; TODO: maint cat? error message because script not found for this standard?
end
else
title_text = title_text .. title_t[std]['default']; -- use the default if script not in std table; TODO: maint cat? error message because script not found for this standard?
end
else
return ''; -- invalid standard, setup for error message
end
elseif is_set (std) then -- translit-script not set, use language code
if not title_t[std] then return ''; end -- invalid standard, setup for error message
if title_t[std][code] then -- if language code is in the table (transl may not provide a language code)
title_text = title_text .. table.concat ({title_t[std][code:lower()], ' (', language_name, ' language) transliteration'}); -- add the appropriate text to the tool tip
else -- code doesn't match
title_text = title_text .. title_t[std]['default']; -- so use the standard's default
end
else -- here if translit-script set but translit-std not set
if title_t['no_std'][tscript] then
title_text = title_text .. title_t['no_std'][tscript]; -- use translit-script if set
elseif title_t['no_std'][code] then
title_text = title_text .. title_t['no_std'][code]; -- use language code
else
if is_set (tscript) then
title_text = title_text .. table.concat ({language_name, '-script transliteration'}); -- write a script tool tip
elseif is_set (code) then
if not mw.ustring.find (language_name, 'languages', 1, true) then -- collective language names (plural 'languages' is part of the name)
title_text = title_text .. '-language'; -- skip this text (individual and macro languages only)
end
title_text = title_text .. ' transliteration'; -- finish the tool tip
else
title_text = title_text .. ' transliteration'; -- generic tool tip (can we ever get here?)
end
end
end
local close_tag;
if is_set (code) then -- when a language code is provided (always with {{lang-xx}} templates, not always with {{transliteration}})
code = code:match ('^(%a%a%a?)'); -- strip all subtags leaving only the language subtag
if not style then -- nil for the default italic style
table.insert (out_t, "<i lang=\""); -- so use <i> tag
close_tag = '</i>'; -- tag to be used when closing
else
table.insert (out_t, table.concat ({'<span style=\"font-style: ', style, '\" lang=\"'})); -- non-standard style, construct a span tag for it
close_tag = '</span>'; -- tag to be used when closing
end
table.insert (out_t, code);
table.insert (out_t, "-Latn\">"); -- transliterations are always Latin script
else
table.insert (out_t, "<span>"); -- when no language code: no lang= attribute, not italic ({{transliteration}} only)
close_tag = '</span>';
end
table.insert (out_t, translit); -- add the translit text
table.insert (out_t, close_tag); -- and add the appropriate </i> or </span>
if '' == title_text then -- when there is no need for a tool-tip
return table.concat (out_t); -- make a string and done
else
return title_wrapper_make (title_text, table.concat (out_t), 'span'); -- wrap with a tool-tip span and don
end
end
--[[--------------------------< V A L I D A T E _ T E X T >----------------------------------------------------
This function checks the content of args.text and returns empty string if nothing is amiss else it returns an
error message. The tests are for empty or missing text and for improper or disallowed use of apostrophe markup.
Italic rendering is controlled by the |italic= template parameter so italic markup should never appear in args.text
either as ''itself'' or as '''''bold italic''''' unless |italic=unset or |italic=invert.
]]
local function validate_text (template, args)
if not is_set (args.text) then
return make_error_msg ('no text', args, template);
end
if args.text:find ("%f[\']\'\'\'\'%f[^\']") or args.text:find ("\'\'\'\'\'[\']+") then -- because we're looking, look for 4 appostrophes or 6+ appostrophes
return make_error_msg ('text has malformed markup', args, template);
end
local style = args.italic;
if ('unset' ~= style) and ('invert' ~=style) then
if args.text:find ("%f[\']\'\'%f[^\']") or args.text:find ("%f[\']\'\'\'\'\'%f[^\']") then -- italic but not bold, or bold italic
return make_error_msg ('text has italic markup', args, template);
end
end
end
--[[--------------------------< R E N D E R _ M A I N T >------------------------------------------------------
render mainenance messages and categories
]]
local function render_maint(nocat)
local maint = {};
if 0 < #maint_msgs then -- when there are maintenance messages
table.insert (maint, table.concat ({'<span class="lang-comment" style="font-style: normal; display: none; color: #33aa33; margin-left: 0.3em;">'})); -- opening <span> tag
for _, msg in ipairs (maint_msgs) do
table.insert (maint, table.concat ({msg, ' '})); -- add message strings
end
table.insert (maint, '</span>'); -- close the span
end
if (0 < #maint_cats) and (0 == namespace) and not nocat then -- when there are maintenance categories; article namespace only
for _, cat in ipairs (maint_cats) do
table.insert (maint, table.concat ({'[[Category:', cat, ']]'})); -- format and add the categories
end
end
return table.concat (maint);
end
--[[--------------------------< P R O T O _ P R E F I X >------------------------------------------------------
for proto languages, text is prefixed with a splat. We do that here as a flag for make_text_html() so that a splat
will be rendered outside of italic markup (if used). If the first character in text here is already a splat, we
do nothing
proto_param is boolean or nil; true adds splat prefix regardless of language name; false removes and / or inhibits
regardless of language name; nil does nothing; presumes that the value in text is correct but removes extra splac
]]
local function proto_prefix (text, language_name, proto_param)
if false == proto_param then -- when forced by |proto=no
return text:gsub ('^%**', ''); -- return text without splat prefix regardless of language name or existing splat prefix in text
elseif (language_name:find ('^Proto%-') or (true == proto_param)) then -- language is a proto or forced by |proto=yes
return text:gsub ('^%**', '*'); -- prefix proto-language text with a splat; also removes duplicate prefixing splats
end
return text:gsub ('^%*+', '*'); -- return text unmolested except multiple splats reduced to one splat
end
--[[--------------------------< H A S _ P O E M _ T A G >------------------------------------------------------
looks for a poem strip marker in text; returns true when found; false else
auto-italic detection disabled when text has poem stripmarker because it is not possible for this code to know
the content that will replace the stripmarker.
]]
local function has_poem_tag (text)
return text:find ('\127[^\127]*UNIQ%-%-poem%-[%a%d]+%-QINU[^\127]*\127') and true or false;
end
--[[--------------------------< H T M L _ T A G _ S E L E C T >------------------------------------------------
Inspects content of and selectively trims text. Returns text and the name of an appropriate html tag for text.
If text contains:
\n\n text has implied <p>..</p> tags - trim leading and trailing whitespace and return
If text begins with list markup:
\n* unordered
\n; definition
\n: definition
\n# ordered
trim all leading whitespace except \n and trim all trailing whitespace
If text contains <poem>...</poem> stripmarker, return text unmodified and choose <div>..</div> tags because
the stripmarker is replaced with text wrapped in <div>..</div> tags.
If the text contains any actual <div>...</div> tags, then it's again returned unmodified and <div>...</div>
tags are used to wrap it, to prevent div/span inversion.
]]
local function html_tag_select (text)
local tag;
if has_poem_tag (text) then -- contains poem stripmarker (we can't know the content of that)
tag = 'div'; -- poem replacement is in div tags so lang must use div tags
elseif text:find ('<div') then -- reductive; if the text contains a div tag, we must use div tags
tag = 'div';
elseif mw.text.trim (text):find ('\n\n+') then -- contains implied p tags
text = mw.text.trim (text); -- trim leading and trailing whitespace characters
tag = 'div'; -- must be div because span may not contain p tags (added later by MediaWiki); poem replacement is in div tags
elseif text:find ('\n[%*:;%#]') then -- if text has list markup
text = text:gsub ('^[\t\r\f ]*', ''):gsub ('%s*$', ''); -- trim all whitespace except leading newline character '\n'
tag = 'div'; -- must be div because span may not contain ul, dd, dl, ol tags (added later by MediaWiki)
else
text = mw.text.trim (text); -- plain text
tag = 'span'; -- so span is fine
end
return text, tag;
end
--[[--------------------------< V A L I D A T E _ P R O T O >--------------------------------------------------
validates value assigned to |proto=; permitted values are yes and no; yes returns as true, no returns as false,
empty string (or parameter omitted) returns as nil; any other value returns as nil with a second return value of
true indicating that some other value has been assigned to |proto=
]]
local function validate_proto (proto_param)
if 'yes' == proto_param then
return true;
elseif 'no' == proto_param then
return false;
elseif is_set (proto_param) then
return nil, true; -- |proto= something other than 'yes' or 'no'
else
return nil; -- missing or empty
end
end
--[[--------------------------< L A N G U A G E _ N A M E _ G E T >--------------------------------------------
common function to return language name from the data set according to IETF tag
returns language name if found in data tables; nil else
]]
local function language_name_get (ietf, code, cat)
ietf = ietf:lower(); -- ietf:lower() because format_ietf_tag() returns mixed case
local name; -- remains nil if not found
if override_table[ietf] then -- look for whole IETF tag in override table
name = override_table[ietf];
elseif override_table[code] then -- not there so try basic language tag
name = override_table[code];
elseif lang_table[code] then -- shift to iana active tag/name table
name = lang_table[code];
elseif lang_dep_table[code] then -- try the iana deprecated tag/name table
name = lang_dep_table[code];
end
if lang_dep_table[code] and cat then -- because deprecated code may have been overridden to en.wiki preferred name
table.insert (maint_cats, table.concat ({'Lang and lang-xx using deprecated ISO 639 codes|', code}));
table.insert (maint_msgs, table.concat ({'code: ', code, ' is deprecated'}));
end
return name; -- name from data tables or nil
end
--[[--------------------------< _ L A N G >--------------------------------------------------------------------
entry point for {{lang}}
there should be no reason to set parameters in the {{lang}} {{#invoke:}}
<includeonly>{{#invoke:lang|lang}}</includeonly>
parameters are received from the template's frame (parent frame)
]]
local function _lang (args)
local out = {};
local language_name; -- used to make category names
local category_name; -- same as language_name except that it retains any parenthetical disambiguators (if any) from the data set
local subtags = {}; -- IETF subtags script, region, variant, and private
local code; -- the language code
local msg; -- for error messages
local tag = 'span'; -- initial value for make_text_html()
local template = args.template or 'Lang';
maint_cats = {}; -- initialize because when this module required into another module, these only declared once so only initialzed once
maint_msgs = {};
validate_cat_args (args); -- determine if categorization should be suppressed
if args[1] and args.code then
return make_error_msg ('conflicting: {{{1}}} and |code=', args, template);
else
args.code = args[1] or args.code; -- prefer args.code
end
if args[2] and args.text then
return make_error_msg ('conflicting: {{{2}}} and |text=', args, template);
else
args.text = args[2] or args.text; -- prefer args.text
end
msg = validate_text (template, args); -- ensure that |text= is set
if is_set (msg) then -- msg is an already-formatted error message
return msg;
end
args.text, tag = html_tag_select (args.text); -- inspects text; returns appropriate html tag with text trimmed accordingly
args.rtl = args.rtl == 'yes'; -- convert to boolean: 'yes' -> true, other values -> false
args.proto, msg = validate_proto (args.proto); -- return boolean, or nil, or nil and error message flag
if msg then
return make_error_msg (table.concat ({'invalid |proto=: ', args.proto}), args, template);
end
code, subtags.script, subtags.region, subtags.variant, subtags.private, msg = get_ietf_parts (args.code); -- |script=, |region=, |variant= not supported because they should be part of args.code ({{{1}}} in {{lang}})
if msg then
return make_error_msg ( msg, args, template);
end
args.italic, msg = validate_italic (args);
if msg then
return make_error_msg (msg, args, template);
end
if nil == args.italic then -- nil when |italic= absent or not set or |italic=default; args.italic controls
if ('latn' == subtags.script) or -- script is latn
(this_wiki_lang_tag ~= code and not is_set (subtags.script) and not has_poem_tag (args.text) and unicode.is_Latin (args.text)) then -- text not this wiki's language, no script specified and not in poem markup but is wholly latn script (auto-italics)
args.italic = 'italic'; -- DEFAULT for {{lang}} templates is upright; but if latn script set for font-style:italic
else
args.italic = 'inherit'; -- italic not set; script not latn; inherit current style
end
end
if is_set (subtags.script) then -- if script set, override rtl setting
if in_array (subtags.script, lang_data.rtl_scripts) then
args.rtl = true; -- script is an rtl script
else
args.rtl = false; -- script is not an rtl script
end
end
args.code = format_ietf_tag (code, subtags.script, subtags.region, subtags.variant, subtags.private); -- format to recommended subtag styles
language_name = language_name_get (args.code, code, true); -- get language name; try ietf tag first, then code w/o variant then code w/ variant
if 'invert' == args.italic and 'span' == tag then -- invert only supported for in-line content
args.text = invert_italics (args.text)
end
args.text = proto_prefix (args.text, language_name, args.proto); -- prefix proto-language text with a splat
table.insert (out, make_text_html (args.code, args.text, tag, args.rtl, args.italic, args.size, language_name));
table.insert (out, make_category (code, language_name, args.nocat));
table.insert (out, render_maint(args.nocat)); -- maintenance messages and categories
return table.concat (out); -- put it all together and done
end
--[[--------------------------< L A N G >----------------------------------------------------------------------
entry point for {{lang}}
there should be no reason to set parameters in the {{lang}} {{#invoke:}}
<includeonly>{{#invoke:lang|lang}}</includeonly>
parameters are received from the template's frame (parent frame)
]]
local function lang (frame)
local args = getArgs (frame, { -- this code so that we can detect and handle wiki list markup in text
valueFunc = function (key, value)
if 2 == key or 'text' == key then -- the 'text' parameter; do not trim wite space
return value; -- return untrimmed 'text'
elseif value then -- all other values: if the value is not nil
value = mw.text.trim (value); -- trim whitespace
if '' ~= value then -- empty string when value was only whitespace
return value;
end
end
return nil; -- value was empty or contained only whitespace
end -- end of valueFunc
});
return _lang (args);
end
--[[--------------------------< T R A N S L A T I O N _ M A K E >----------------------------------------------
stand-alone function to create literal translation of main text
Also used by {{lang-x2}}
]]
local function translation_make (args_t)
local translation_t = {', '}; -- initialize output
if 'none' ~= args_t.label then -- if we want a label
table.insert (translation_t, '<small>'); -- open the <small> html tag
if 'no' == args_t.link then
table.insert (translation_t, '<abbr title="literal translation">lit.</abbr>'); -- unlinked form
else
table.insert (translation_t, make_wikilink ('Literal translation', 'lit.')); -- linked form
end
table.insert (translation_t, " </small>"); -- close the <small> html tag
end
table.insert (translation_t, table.concat ({''', args_t.translation, '''})); -- use html entities to avoid wiki markup confusion
return table.concat (translation_t); -- make a big string and done
end
--[[--------------------------< L A N G _ X X >----------------------------------------------------------------
For the {{lang-xx}} templates, the only parameter required to be set in the template is the language code. All
other parameters can, usually should, be written in the template call. For {{lang-xx}} templates for languages
that can have multiple writing systems, it may be appropriate to set |script= as well.
For each {{lang-xx}} template choose the appropriate entry-point function so that this function knows the default
styling that should be applied to text.
For normal, upright style:
<includeonly>{{#invoke:lang|lang_xx_inherit|code=xx}}</includeonly>
For italic style:
<includeonly>{{#invoke:lang|lang_xx_italic|code=xx}}</includeonly>
All other parameters should be received from the template's frame (parent frame)
Supported parameters are:
|code = (required) the IANA language code
|script = IANA script code; especially for use with languages that use multiple writing systems
|region = IANA region code
|variant = IANA variant code
|text = (required) the displayed text in language specified by code
|link = boolean false ('no') does not link code-spcified language name to associated language article
|rtl = boolean true ('yes') identifies the language specified by code as a right-to-left language
|nocat = boolean true ('yes') inhibits normal categorization; error categories are not affected
|cat = boolian false ('no') opposite form of |nocat=
|italic = boolean true ('yes') renders displayed text in italic font; boolean false ('no') renders displayed text in normal font; not set renders according to initial_style_state
|lit = text that is a literal translation of text
|label = 'none' to suppress all labeling (language name, 'translit.', 'lit.')
any other text replaces language-name label - automatic wikilinking disabled
for those {{lang-xx}} templates that support transliteration (those templates where |text= is not entirely latn script):
|translit = text that is a transliteration of text
|translit-std = the standard that applies to the transliteration
|translit-script = ISO 15924 script name; falls back to code
For {{lang-xx}}, the positional parameters are:
{{{1}}} text
{{{2}}} transliterated text
{{{3}}} literal translation text
no other positional parameters are allowed
]]
local function _lang_xx (args)
local out = {};
local language_name; -- used to make display text, article links
local category_name; -- same as language_name except that it retains any parenthetical disambiguators (if any) from the data set
local subtags = {}; -- IETF subtags script, region, and variant
local code; -- the language code
local translit_script_name; -- name associated with IANA (ISO 15924) script code
local translit;
local translit_title;
local msg; -- for error messages
local tag = 'span'; -- initial value for make_text_html()
local template = args.template or 'Lang-xx';
maint_cats = {}; -- initialize because when this module required into another module, these only declared once so only initialzed once
maint_msgs = {};
if args[1] and args.text then
return make_error_msg ('conflicting: {{{1}}} and |text=', args, template);
else
args.text = args[1] or args.text; -- prefer args.text
end
msg = validate_text (template, args); -- ensure that |text= is set, does not contain italic markup and is protected from improper bolding
if is_set (msg) then
return msg;
end
args.text, tag = html_tag_select (args.text); -- inspects text; returns appropriate html tag with text trimmed accordingly
if args[2] and args.translit then
return make_error_msg ('conflicting: {{{2}}} and |translit=', args, template);
else
args.translit = args[2] or args.translit -- prefer args.translit
end
if args[3] and (args.translation or args.lit) then
return make_error_msg ('conflicting: {{{3}}} and |lit= or |translation=', args, template);
elseif args.translation and args.lit then
return make_error_msg ('conflicting: |lit= and |translation=', args, template);
else
args.translation = args[3] or args.translation or args.lit; -- prefer args.translation
end
if args.links and args.link then
return make_error_msg ('conflicting: |links= and |link=', args, template);
else
args.link = args.link or args.links; -- prefer args.link
end
validate_cat_args (args); -- determine if categorization should be suppressed
args.rtl = args.rtl == 'yes'; -- convert to boolean: 'yes' -> true, other values -> false
code, subtags.script, subtags.region, subtags.variant, subtags.private, msg = get_ietf_parts (args.code, args.script, args.region, args.variant); -- private omitted because private
if msg then -- if an error detected then there is an error message
return make_error_msg (msg, args, template);
end
args.italic, msg = validate_italic (args);
if msg then
return make_error_msg (msg, args, template);
end
if nil == args.italic then -- args.italic controls
if is_set (subtags.script) then
if 'latn' == subtags.script then
args.italic = 'italic'; -- |script=Latn; set for font-style:italic
else
args.italic = initial_style_state; -- italic not set; script is not latn; set for font-style:<initial_style_state>
end
else
args.italic = initial_style_state; -- here when |italic= and |script= not set; set for font-style:<initial_style_state>
end
end
if is_set (subtags.script) then -- if script set override rtl setting
if in_array (subtags.script, lang_data.rtl_scripts) then
args.rtl = true; -- script is an rtl script
else
args.rtl = false; -- script is not an rtl script
end
end
args.proto, msg = validate_proto (args.proto); -- return boolean, or nil, or nil and error message flag
if msg then
return make_error_msg (table.concat ({'invalid |proto=: ', args.proto}), args, template);
end
args.code = format_ietf_tag (code, subtags.script, subtags.region, subtags.variant, subtags.private); -- format to recommended subtag styles
language_name = language_name_get (args.code, code, true); -- get language name; try ietf tag first, then code w/o variant then code w/ variant
category_name = language_name; -- category names retain IANA parenthetical diambiguators (if any)
language_name = language_name:gsub ('%s+%b()', ''); -- remove IANA parenthetical disambiguators or qualifiers from names that have them
if args.label then
if 'none' ~= args.label then
table.insert (out, table.concat ({args.label, ': '})); -- custom label
end
else
if 'no' == args.link then
table.insert (out, language_name); -- language name without wikilink
else
if mw.ustring.find (language_name, 'languages', 1, true) then
table.insert (out, make_wikilink (language_name)); -- collective language name uses simple wikilink
elseif lang_data.article_name[code] then
table.insert (out, make_wikilink (lang_data.article_name[code], language_name)); -- language name with wikilink from override data
else
table.insert (out, make_wikilink (language_name .. ' language', language_name)); -- language name with wikilink
end
end
table.insert (out, ': '); -- separator
end
if 'invert' == args.italic then
args.text = invert_italics (args.text)
end
args.text = proto_prefix (args.text, language_name, args.proto); -- prefix proto-language text with a splat
table.insert (out, make_text_html (args.code, args.text, tag, args.rtl, args.italic, args.size, ('none' == args.label) and language_name or nil))
if is_set (args.translit) and not unicode.is_Latin (args.text) then -- transliteration (not supported in {{lang}}); not supported when args.text is wholly latn text (this is an imperfect test)
table.insert (out, ', '); -- comma to separate text from translit
if 'none' ~= args.label then
table.insert (out, '<small>');
if script_table[args['translit-script']] then -- when |translit-script= is set, try to use the script's name
translit_script_name = script_table[args['translit-script']];
else
translit_script_name = language_name; -- fall back on language name
end
translit_title = mw.title.makeTitle (0, table.concat ({'Romanization of ', translit_script_name})); -- make a title object
if translit_title.exists and ('no' ~= args.link) then
table.insert (out, make_wikilink ('Romanization of ' .. translit_script_name or language_name, 'romanized') .. ':'); -- make a wikilink if there is an article to link to
else
table.insert (out, 'romanized:'); -- else plain text
end
table.insert (out, ' </small>'); -- close the small tag
end
translit = make_translit (args.code, language_name, args.translit, args['translit-std'], args['translit-script'])
if is_set (translit) then
table.insert (out, translit);
else
return make_error_msg (table.concat ({'invalid translit-std: \'', args['translit-std'] or '[missing]'}), args, template);
end
end
if is_set (args.translation) then -- translation (not supported in {{lang}})
table.insert (out, translation_make (args));
end
table.insert (out, make_category (code, category_name, args.nocat));
table.insert (out, render_maint(args.nocat)); -- maintenance messages and categories
return table.concat (out); -- put it all together and done
end
--[[--------------------------< L A N G _ X X _ A R G S _ G E T >----------------------------------------------
common function to get args table from {{lang-??}} templates
returns table of args
]]
local function lang_xx_args_get (frame)
local args = getArgs(frame,
{
parentFirst= true, -- parameters in the template override parameters set in the {{#invoke:}}
valueFunc = function (key, value)
if 1 == key then -- the 'text' parameter; do not trim wite space
return value; -- return untrimmed 'text'
elseif value then -- all other values: if the value is not nil
value = mw.text.trim (value); -- trim whitespace
if '' ~= value then -- empty string when value was only whitespace
return value;
end
end
return nil; -- value was empty or contained only whitespace
end -- end of valueFunc
});
return args;
end
--[[--------------------------< L A N G _ X X _ I T A L I C >--------------------------------------------------
Entry point for those {{lang-xx}} templates that call lang_xx_italic(). Sets the initial style state to italic.
]]
local function lang_xx_italic (frame)
local args = lang_xx_args_get (frame);
initial_style_state = 'italic';
return _lang_xx (args);
end
--[[--------------------------< _ L A N G _ X X _ I T A L I C >------------------------------------------------
Entry point ffrom another module. Sets the initial style state to italic.
]]
local function _lang_xx_italic (args)
initial_style_state = 'italic';
return _lang_xx (args);
end
--[[--------------------------< L A N G _ X X _ I N H E R I T >------------------------------------------------
Entry point for those {{lang-xx}} templates that call lang_xx_inherit(). Sets the initial style state to inherit.
]]
local function lang_xx_inherit (frame)
local args = lang_xx_args_get (frame);
initial_style_state = 'inherit';
return _lang_xx (args);
end
--[[--------------------------< _ L A N G _ X X _ I N H E R I T >----------------------------------------------
Entry point from another module. Sets the initial style state to inherit.
]]
local function _lang_xx_inherit (args)
initial_style_state = 'inherit';
return _lang_xx (args);
end
--[[--------------------------< _ I S _ I E T F _ T A G >------------------------------------------------------
Returns true when a language name associated with IETF language tag exists; nil else. IETF language tag must be valid.
All code combinations supported by {{lang}} and the {{lang-xx}} templates are supported by this function.
Module entry point from another module
]]
local function _is_ietf_tag (tag) -- entry point when this module is require()d into another
local c, s, r, v, p, err; -- code, script, region, variant, private, error message
c, s, r, v, p, err = get_ietf_parts (tag); -- disassemble tag into constituent part and validate
return ((c and not err) and true) or nil; -- return true when code portion has a value without error message; nil else
end
--[[--------------------------< I S _ I E T F _ T A G >--------------------------------------------------------
Module entry point from an {{#invoke:}}
]]
local function is_ietf_tag (frame)
return _is_ietf_tag (getArgs (frame)[1]); -- args[1] is the ietf language tag to be tested; also get parent frame
end
--[[--------------------------< I S _ I E T F _ T A G _ F R A M E >--------------------------------------------
Module entry point from an {{#invoke:}}; same as is_ietf_tag() except does not get parameters from the parent
(template) frame. This function not useful when called by {{lang|fn=is_ietf_tag_frame|<tag>}} because <tag>
is in the parent frame.
]]
local function is_ietf_tag_frame (frame)
return _is_ietf_tag (getArgs (frame, {frameOnly = true,})[1]); -- args[1] is the ietf language tag to be tested; do not get parent frame
end
--[[--------------------------< _ N A M E _ F R O M _ T A G >--------------------------------------------------
Returns language name associated with IETF language tag if valid; error message else.
All code combinations supported by {{lang}} and the {{lang-xx}} templates are supported by this function.
Set invoke's |link= parameter to yes to get wikilinked version of the language name.
Module entry point from another module
]]
local function _name_from_tag (args)
local subtags = {}; -- IETF subtags script, region, variant, and private
local raw_code = args[1]; -- save a copy of the input IETF subtag
local link = 'yes' == args['link']; -- make a boolean
local label = args.label;
local code; -- the language code
local msg; -- gets an error message if IETF language tag is malformed or invalid
local language_name = '';
code, subtags.script, subtags.region, subtags.variant, subtags.private, msg = get_ietf_parts (raw_code);
if msg then
local template = (args['template'] and table.concat ({'{{', args['template'], '}}: '})) or ''; -- make template name (if provided by the template)
return table.concat ({'<span style=\"color:#d33\">Error: ', template, msg, '</span>'});
end
raw_code = format_ietf_tag (code, subtags.script, subtags.region, subtags.variant, subtags.private); -- format to recommended subtag styles; private omitted because private
language_name = language_name_get (raw_code, code); -- get language name; try ietf tag first, then code w/o variant then code w/ variant
language_name = language_name:gsub ('%s+%b()', ''); -- remove IANA parenthetical disambiguators or qualifiers from names that have them
if link then -- when |link=yes, wikilink the language name
if mw.ustring.find (language_name, 'languages', 1, true) then
language_name = make_wikilink (language_name, label); -- collective language name uses simple wikilink
elseif lang_data.article_name[code] then
language_name = make_wikilink (lang_data.article_name[code], label or language_name); -- language name with wikilink from override data
else
language_name = make_wikilink (language_name .. ' language', label or language_name); -- language name with wikilink
end
end
return language_name;
end
--[[--------------------------< N A M E _ F R O M _ T A G >----------------------------------------------------
Module entry point from an {{#invoke:}}
]]
local function name_from_tag (frame) -- entry point from an {{#invoke:Lang|name_from_tag|<ietf tag>|link=<yes>|template=<template name>}}
return _name_from_tag (getArgs(frame)) -- pass-on the args table, nothing else; getArgs() so we also get parent frame
end
--[[--------------------------< _ T A G _ F R O M _ N A M E >--------------------------------------------------
Returns the ietf language tag associated with the language name. Spelling of language name must be correct
according to the spelling in the source tables. When a standard language name has a parenthetical disambiguator,
that disambiguator must be omitted (they are not present in the data name-to-tag tables).
Module entry point from another module
]]
local function _tag_from_name (args) -- entry point from another module
local msg;
if args[1] and '' ~= args[1] then
local data = mw.loadData ('Module:Lang/tag from name'); -- get the reversed data tables TODO: change when going live
local lang = args[1]:lower(); -- allow any-case for the language name (speeling must till be correct)
local tag = data.rev_override_table[lang] or data.rev_lang_table[lang] or data.rev_lang_dep_table[lang]; -- get the code; look first in the override then in the standard
if tag then
return tag, true; -- language name found so return tag and done; second return used by is_lang_name()
else
msg = 'language: ' .. args[1] .. ' not found' -- language name not found, error message
end
else
msg = 'missing language name' -- language name not provided, error message
end
local template = '';
if args.template and '' ~= args.template then
template = table.concat ({'{{', args['template'], '}}: '}); -- make template name (if provided by the template)
end
return table.concat ({'<span style=\"color:#d33\">Error: ', template, msg, '</span>'});
end
--[[--------------------------< T A G _ F R O M _ N A M E >----------------------------------------------------
Module entry point from an {{#invoke:}}
]]
local function tag_from_name (frame) -- entry point from an {{#invoke:Lang|tag_from_name|<language name>|link=<yes>|template=<template name>}}
local result, _ = _tag_from_name (getArgs(frame)) -- pass-on the args table, nothing else; getArgs() so we also get parent frame; supress second return used by is_lang_name()
return result;
end
--[[--------------------------< I S _ L A N G _ N A M E >------------------------------------------------------
Module entry point from an {{#invoke:}}
]]
local function is_lang_name (frame)
local _, result = _tag_from_name (getArgs(frame)) -- pass-on the args table, nothing else; getArgs() so we also get parent frame; supress second return used by tag_from_name()
return result and true or nil;
end
--[[--------------------------< _ T R A N S L >----------------------------------------------------------------
Module entry point from another module
]]
local function _transl (args)
local title_table = lang_data.translit_title_table; -- table of transliteration standards and the language codes and scripts that apply to those standards
local language_name; -- language name that matches language code; used for tool tip
local translit; -- transliterated text to display
local script; -- IANA script
local msg; -- for when called functions return an error message
maint_cats = {}; -- initialize because when this module required into another module, these only declared once so only initialzed once
maint_msgs = {};
if is_set (args[3]) then -- [3] set when {{transliteration|code|standard|text}}
args.text = args[3]; -- get the transliterated text
args.translit_std = args[2] and args[2]:lower(); -- get the standard; lower case for table indexing
if not title_table[args.translit_std] then
return make_error_msg (table.concat ({'unrecognized transliteration standard: ', args.translit_std}), args, 'Transliteration');
end
else
if is_set (args[2]) then -- [2] set when {{transliteration|code|text}}
args.text = args[2]; -- get the transliterated text
else
if args[1] and (args[1]:match ('^%a%a%a?%a?$') or -- args[2] missing; is args[1] a language or script tag or is it the transliterated text?
args[1]:match ('^%a%a%a?%-x%-')) then -- or is args[1] a private-use tag
return make_error_msg ('no text', args, 'Transliteration'); -- args[1] is a code so we're missing text
else
args.text = args[1]; -- args[1] is not a code so we're missing that; assign args.text for error message
return make_error_msg ('missing language / script code', args, 'Transliteration');
end
end
end
if is_set (args[1]) then -- IANA language code used for html lang= attribute; or ISO 15924 script code
if args[1]:match ('^%a%a%a?%a?$') or args[1]:match ('^%a%a%a?%-x%-') then -- args[1] has correct form?
args.code = args[1]:lower(); -- use the language/script code; only (2, 3, or 4 alpha characters) or private-use; lower case because table indexes are lower case
else
return make_error_msg (table.concat ({'unrecognized language / script code: ', args[1]}), args, 'Transliteration'); -- invalid language / script code
end
else
return make_error_msg ('missing language / script code', args, 'Transliteration'); -- missing language / script code so quit
end
args.italic, msg = validate_italic (args);
if msg then
return make_error_msg (msg, args, 'Transliteration');
end
if 'italic' == args.italic then -- 'italic' when |italic=yes; because that is same as absent or not set and |italic=default
args.italic = nil; -- set to nil;
end
if override_table[args.code] then -- is code a language code defined in the override table?
language_name = override_table[args.code];
args.code = args.code:match ('^%a%a%a?'); -- if private use, strip all but language subtag
elseif lang_table[args.code] then -- is code a language code defined in the standard language code tables?
language_name = lang_table[args.code];
elseif lang_dep_table[args.code] then -- is code a language code defined in the deprecated language code tables?
language_name = lang_dep_table[args.code];
elseif script_table[args.code] then -- if here, code is not a language code; is it a script code?
language_name = script_table[args.code];
script = args.code; -- code was an ISO 15924 script so use that instead
args.code = ''; -- unset because not a language code
else
return make_error_msg (table.concat ({'unrecognized language / script code: ', args.code}), args, 'Transliteration'); -- invalid language / script code
end
-- here only when all parameters passed to make_translit() are valid
return make_translit (args.code, language_name, args.text, args.translit_std, script, args.italic);
end
--[[--------------------------< T R A N S L >------------------------------------------------------------------
Module entry point from an {{#invoke:}}
]]
local function transl (frame)
return _transl (getArgs(frame));
end
--[[--------------------------< C A T E G O R Y _ F R O M _ T A G >--------------------------------------------
Returns category name associated with IETF language tag if valid; error message else
All code combinations supported by {{lang}} and the {{lang-xx}} templates are supported by this function.
Module entry point from another module
]]
local function _category_from_tag (args_t)
local subtags = {}; -- IETF subtags script, region, variant, and private
local raw_code = args_t[1]; -- save a copy of the input IETF subtag
local link = 'yes' == args_t.link; -- make a boolean
local label = args_t.label;
local code; -- the language code
local msg; -- gets an error message if IETF language tag is malformed or invalid
local category_name = '';
code, subtags.script, subtags.region, subtags.variant, subtags.private, msg = get_ietf_parts (raw_code);
if msg then
local template = (args_t.template and table.concat ({'{{', args_t.template, '}}: '})) or ''; -- make template name (if provided by the template)
return table.concat ({'<span style=\"color:#d33\">Error: ', template, msg, '</span>'});
end
raw_code = format_ietf_tag (code, subtags.script, subtags.region, subtags.variant, subtags.private); -- format to recommended subtag styles; private omitted because private
category_name = language_name_get (raw_code, code); -- get language name; try ietf tag first, then code w/o variant then code w/ variant
category_name = make_category (code, category_name, nil, true):gsub ('[%[%]]', '');
if link then
return table.concat ({'[[:', category_name, ']]'});
else
return category_name;
end
end
--[[--------------------------< C A T E G O R Y _ F R O M _ T A G >--------------------------------------------
Module entry point from an {{#invoke:}}
]]
local function category_from_tag (frame) -- entry point from an {{#invoke:Lang|category_from_tag|<ietf tag>|template=<template name>}}
return _category_from_tag (getArgs (frame)); -- pass-on the args table, nothing else; getArgs() so we also get parent frame
end
--[[--------------------------< E X P O R T E D F U N C T I O N S >------------------------------------------
]]
return {
category_from_tag = category_from_tag,
lang = lang, -- entry point for {{lang}}
lang_xx_inherit = lang_xx_inherit, -- entry points for {{lang-??}}
lang_xx_italic = lang_xx_italic,
is_ietf_tag = is_ietf_tag,
is_ietf_tag_frame = is_ietf_tag_frame,
is_lang_name = is_lang_name,
tag_from_name = tag_from_name, -- returns ietf tag associated with language name
name_from_tag = name_from_tag, -- used for template documentation; possible use in ISO 639 name from code templates
transl = transl, -- entry point for {{transliteration}}
_category_from_tag = _category_from_tag, -- entry points when this module is require()d into other modules
_lang = _lang,
_lang_xx_inherit = _lang_xx_inherit,
_lang_xx_italic = _lang_xx_italic,
_is_ietf_tag = _is_ietf_tag,
get_ietf_parts = get_ietf_parts,
_tag_from_name = _tag_from_name,
_name_from_tag = _name_from_tag,
_transl = _transl,
_translation_make = translation_make,
};
b4bf37fa610695625e5f1ff5d33471dfaaf8af34
Module:Documentation
828
59
122
2023-07-31T17:22:10Z
[[w>Izno
0
add a comment to make it obvious
Scribunto
text/plain
-- This module implements {{documentation}}.
-- Get required modules.
local getArgs = require('Module:Arguments').getArgs
-- Get the config table.
local cfg = mw.loadData('Module:Documentation/config')
local p = {}
-- Often-used functions.
local ugsub = mw.ustring.gsub
local format = mw.ustring.format
----------------------------------------------------------------------------
-- Helper functions
--
-- These are defined as local functions, but are made available in the p
-- table for testing purposes.
----------------------------------------------------------------------------
local function message(cfgKey, valArray, expectType)
--[[
-- Gets a message from the cfg table and formats it if appropriate.
-- The function raises an error if the value from the cfg table is not
-- of the type expectType. The default type for expectType is 'string'.
-- If the table valArray is present, strings such as $1, $2 etc. in the
-- message are substituted with values from the table keys [1], [2] etc.
-- For example, if the message "foo-message" had the value 'Foo $2 bar $1.',
-- message('foo-message', {'baz', 'qux'}) would return "Foo qux bar baz."
--]]
local msg = cfg[cfgKey]
expectType = expectType or 'string'
if type(msg) ~= expectType then
error('message: type error in message cfg.' .. cfgKey .. ' (' .. expectType .. ' expected, got ' .. type(msg) .. ')', 2)
end
if not valArray then
return msg
end
local function getMessageVal(match)
match = tonumber(match)
return valArray[match] or error('message: no value found for key $' .. match .. ' in message cfg.' .. cfgKey, 4)
end
return ugsub(msg, '$([1-9][0-9]*)', getMessageVal)
end
p.message = message
local function makeWikilink(page, display)
if display then
return format('[[%s|%s]]', page, display)
else
return format('[[%s]]', page)
end
end
p.makeWikilink = makeWikilink
local function makeCategoryLink(cat, sort)
local catns = mw.site.namespaces[14].name
return makeWikilink(catns .. ':' .. cat, sort)
end
p.makeCategoryLink = makeCategoryLink
local function makeUrlLink(url, display)
return format('[%s %s]', url, display)
end
p.makeUrlLink = makeUrlLink
local function makeToolbar(...)
local ret = {}
local lim = select('#', ...)
if lim < 1 then
return nil
end
for i = 1, lim do
ret[#ret + 1] = select(i, ...)
end
-- 'documentation-toolbar'
return format(
'<span class="%s">(%s)</span>',
message('toolbar-class'),
table.concat(ret, ' | ')
)
end
p.makeToolbar = makeToolbar
----------------------------------------------------------------------------
-- Argument processing
----------------------------------------------------------------------------
local function makeInvokeFunc(funcName)
return function (frame)
local args = getArgs(frame, {
valueFunc = function (key, value)
if type(value) == 'string' then
value = value:match('^%s*(.-)%s*$') -- Remove whitespace.
if key == 'heading' or value ~= '' then
return value
else
return nil
end
else
return value
end
end
})
return p[funcName](args)
end
end
----------------------------------------------------------------------------
-- Entry points
----------------------------------------------------------------------------
function p.nonexistent(frame)
if mw.title.getCurrentTitle().subpageText == 'testcases' then
return frame:expandTemplate{title = 'module test cases notice'}
else
return p.main(frame)
end
end
p.main = makeInvokeFunc('_main')
function p._main(args)
--[[
-- This function defines logic flow for the module.
-- @args - table of arguments passed by the user
--]]
local env = p.getEnvironment(args)
local root = mw.html.create()
root
:wikitext(p._getModuleWikitext(args, env))
:wikitext(p.protectionTemplate(env))
:wikitext(p.sandboxNotice(args, env))
:tag('div')
-- 'documentation-container'
:addClass(message('container'))
:attr('role', 'complementary')
:attr('aria-labelledby', args.heading ~= '' and 'documentation-heading' or nil)
:attr('aria-label', args.heading == '' and 'Documentation' or nil)
:newline()
:tag('div')
-- 'documentation'
:addClass(message('main-div-classes'))
:newline()
:wikitext(p._startBox(args, env))
:wikitext(p._content(args, env))
:tag('div')
-- 'documentation-clear'
:addClass(message('clear'))
:done()
:newline()
:done()
:wikitext(p._endBox(args, env))
:done()
:wikitext(p.addTrackingCategories(env))
-- 'Module:Documentation/styles.css'
return mw.getCurrentFrame():extensionTag (
'templatestyles', '', {src=cfg['templatestyles']
}) .. tostring(root)
end
----------------------------------------------------------------------------
-- Environment settings
----------------------------------------------------------------------------
function p.getEnvironment(args)
--[[
-- Returns a table with information about the environment, including title
-- objects and other namespace- or path-related data.
-- @args - table of arguments passed by the user
--
-- Title objects include:
-- env.title - the page we are making documentation for (usually the current title)
-- env.templateTitle - the template (or module, file, etc.)
-- env.docTitle - the /doc subpage.
-- env.sandboxTitle - the /sandbox subpage.
-- env.testcasesTitle - the /testcases subpage.
--
-- Data includes:
-- env.protectionLevels - the protection levels table of the title object.
-- env.subjectSpace - the number of the title's subject namespace.
-- env.docSpace - the number of the namespace the title puts its documentation in.
-- env.docpageBase - the text of the base page of the /doc, /sandbox and /testcases pages, with namespace.
-- env.compareUrl - URL of the Special:ComparePages page comparing the sandbox with the template.
--
-- All table lookups are passed through pcall so that errors are caught. If an error occurs, the value
-- returned will be nil.
--]]
local env, envFuncs = {}, {}
-- Set up the metatable. If triggered we call the corresponding function in the envFuncs table. The value
-- returned by that function is memoized in the env table so that we don't call any of the functions
-- more than once. (Nils won't be memoized.)
setmetatable(env, {
__index = function (t, key)
local envFunc = envFuncs[key]
if envFunc then
local success, val = pcall(envFunc)
if success then
env[key] = val -- Memoise the value.
return val
end
end
return nil
end
})
function envFuncs.title()
-- The title object for the current page, or a test page passed with args.page.
local title
local titleArg = args.page
if titleArg then
title = mw.title.new(titleArg)
else
title = mw.title.getCurrentTitle()
end
return title
end
function envFuncs.templateTitle()
--[[
-- The template (or module, etc.) title object.
-- Messages:
-- 'sandbox-subpage' --> 'sandbox'
-- 'testcases-subpage' --> 'testcases'
--]]
local subjectSpace = env.subjectSpace
local title = env.title
local subpage = title.subpageText
if subpage == message('sandbox-subpage') or subpage == message('testcases-subpage') then
return mw.title.makeTitle(subjectSpace, title.baseText)
else
return mw.title.makeTitle(subjectSpace, title.text)
end
end
function envFuncs.docTitle()
--[[
-- Title object of the /doc subpage.
-- Messages:
-- 'doc-subpage' --> 'doc'
--]]
local title = env.title
local docname = args[1] -- User-specified doc page.
local docpage
if docname then
docpage = docname
else
docpage = env.docpageBase .. '/' .. message('doc-subpage')
end
return mw.title.new(docpage)
end
function envFuncs.sandboxTitle()
--[[
-- Title object for the /sandbox subpage.
-- Messages:
-- 'sandbox-subpage' --> 'sandbox'
--]]
return mw.title.new(env.docpageBase .. '/' .. message('sandbox-subpage'))
end
function envFuncs.testcasesTitle()
--[[
-- Title object for the /testcases subpage.
-- Messages:
-- 'testcases-subpage' --> 'testcases'
--]]
return mw.title.new(env.docpageBase .. '/' .. message('testcases-subpage'))
end
function envFuncs.protectionLevels()
-- The protection levels table of the title object.
return env.title.protectionLevels
end
function envFuncs.subjectSpace()
-- The subject namespace number.
return mw.site.namespaces[env.title.namespace].subject.id
end
function envFuncs.docSpace()
-- The documentation namespace number. For most namespaces this is the
-- same as the subject namespace. However, pages in the Article, File,
-- MediaWiki or Category namespaces must have their /doc, /sandbox and
-- /testcases pages in talk space.
local subjectSpace = env.subjectSpace
if subjectSpace == 0 or subjectSpace == 6 or subjectSpace == 8 or subjectSpace == 14 then
return subjectSpace + 1
else
return subjectSpace
end
end
function envFuncs.docpageBase()
-- The base page of the /doc, /sandbox, and /testcases subpages.
-- For some namespaces this is the talk page, rather than the template page.
local templateTitle = env.templateTitle
local docSpace = env.docSpace
local docSpaceText = mw.site.namespaces[docSpace].name
-- Assemble the link. docSpace is never the main namespace, so we can hardcode the colon.
return docSpaceText .. ':' .. templateTitle.text
end
function envFuncs.compareUrl()
-- Diff link between the sandbox and the main template using [[Special:ComparePages]].
local templateTitle = env.templateTitle
local sandboxTitle = env.sandboxTitle
if templateTitle.exists and sandboxTitle.exists then
local compareUrl = mw.uri.canonicalUrl(
'Special:ComparePages',
{ page1 = templateTitle.prefixedText, page2 = sandboxTitle.prefixedText}
)
return tostring(compareUrl)
else
return nil
end
end
return env
end
----------------------------------------------------------------------------
-- Auxiliary templates
----------------------------------------------------------------------------
p.getModuleWikitext = makeInvokeFunc('_getModuleWikitext')
function p._getModuleWikitext(args, env)
local currentTitle = mw.title.getCurrentTitle()
if currentTitle.contentModel ~= 'Scribunto' then return end
pcall(require, currentTitle.prefixedText) -- if it fails, we don't care
local moduleWikitext = package.loaded["Module:Module wikitext"]
if moduleWikitext then
return moduleWikitext.main()
end
end
function p.sandboxNotice(args, env)
--[=[
-- Generates a sandbox notice for display above sandbox pages.
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
--
-- Messages:
-- 'sandbox-notice-image' --> '[[File:Sandbox.svg|50px|alt=|link=]]'
-- 'sandbox-notice-blurb' --> 'This is the $1 for $2.'
-- 'sandbox-notice-diff-blurb' --> 'This is the $1 for $2 ($3).'
-- 'sandbox-notice-pagetype-template' --> '[[Wikipedia:Template test cases|template sandbox]] page'
-- 'sandbox-notice-pagetype-module' --> '[[Wikipedia:Template test cases|module sandbox]] page'
-- 'sandbox-notice-pagetype-other' --> 'sandbox page'
-- 'sandbox-notice-compare-link-display' --> 'diff'
-- 'sandbox-notice-testcases-blurb' --> 'See also the companion subpage for $1.'
-- 'sandbox-notice-testcases-link-display' --> 'test cases'
-- 'sandbox-category' --> 'Template sandboxes'
--]=]
local title = env.title
local sandboxTitle = env.sandboxTitle
local templateTitle = env.templateTitle
local subjectSpace = env.subjectSpace
if not (subjectSpace and title and sandboxTitle and templateTitle
and mw.title.equals(title, sandboxTitle)) then
return nil
end
-- Build the table of arguments to pass to {{ombox}}. We need just two fields, "image" and "text".
local omargs = {}
omargs.image = message('sandbox-notice-image')
-- Get the text. We start with the opening blurb, which is something like
-- "This is the template sandbox for [[Template:Foo]] (diff)."
local text = ''
local pagetype
if subjectSpace == 10 then
pagetype = message('sandbox-notice-pagetype-template')
elseif subjectSpace == 828 then
pagetype = message('sandbox-notice-pagetype-module')
else
pagetype = message('sandbox-notice-pagetype-other')
end
local templateLink = makeWikilink(templateTitle.prefixedText)
local compareUrl = env.compareUrl
if compareUrl then
local compareDisplay = message('sandbox-notice-compare-link-display')
local compareLink = makeUrlLink(compareUrl, compareDisplay)
text = text .. message('sandbox-notice-diff-blurb', {pagetype, templateLink, compareLink})
else
text = text .. message('sandbox-notice-blurb', {pagetype, templateLink})
end
-- Get the test cases page blurb if the page exists. This is something like
-- "See also the companion subpage for [[Template:Foo/testcases|test cases]]."
local testcasesTitle = env.testcasesTitle
if testcasesTitle and testcasesTitle.exists then
if testcasesTitle.contentModel == "Scribunto" then
local testcasesLinkDisplay = message('sandbox-notice-testcases-link-display')
local testcasesRunLinkDisplay = message('sandbox-notice-testcases-run-link-display')
local testcasesLink = makeWikilink(testcasesTitle.prefixedText, testcasesLinkDisplay)
local testcasesRunLink = makeWikilink(testcasesTitle.talkPageTitle.prefixedText, testcasesRunLinkDisplay)
text = text .. '<br />' .. message('sandbox-notice-testcases-run-blurb', {testcasesLink, testcasesRunLink})
else
local testcasesLinkDisplay = message('sandbox-notice-testcases-link-display')
local testcasesLink = makeWikilink(testcasesTitle.prefixedText, testcasesLinkDisplay)
text = text .. '<br />' .. message('sandbox-notice-testcases-blurb', {testcasesLink})
end
end
-- Add the sandbox to the sandbox category.
omargs.text = text .. makeCategoryLink(message('sandbox-category'))
-- 'documentation-clear'
return '<div class="' .. message('clear') .. '"></div>'
.. require('Module:Message box').main('ombox', omargs)
end
function p.protectionTemplate(env)
-- Generates the padlock icon in the top right.
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
-- Messages:
-- 'protection-template' --> 'pp-template'
-- 'protection-template-args' --> {docusage = 'yes'}
local protectionLevels = env.protectionLevels
if not protectionLevels then
return nil
end
local editProt = protectionLevels.edit and protectionLevels.edit[1]
local moveProt = protectionLevels.move and protectionLevels.move[1]
if editProt then
-- The page is edit-protected.
return require('Module:Protection banner')._main{
message('protection-reason-edit'), small = true
}
elseif moveProt and moveProt ~= 'autoconfirmed' then
-- The page is move-protected but not edit-protected. Exclude move
-- protection with the level "autoconfirmed", as this is equivalent to
-- no move protection at all.
return require('Module:Protection banner')._main{
action = 'move', small = true
}
else
return nil
end
end
----------------------------------------------------------------------------
-- Start box
----------------------------------------------------------------------------
p.startBox = makeInvokeFunc('_startBox')
function p._startBox(args, env)
--[[
-- This function generates the start box.
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
--
-- The actual work is done by p.makeStartBoxLinksData and p.renderStartBoxLinks which make
-- the [view] [edit] [history] [purge] links, and by p.makeStartBoxData and p.renderStartBox
-- which generate the box HTML.
--]]
env = env or p.getEnvironment(args)
local links
local content = args.content
if not content or args[1] then
-- No need to include the links if the documentation is on the template page itself.
local linksData = p.makeStartBoxLinksData(args, env)
if linksData then
links = p.renderStartBoxLinks(linksData)
end
end
-- Generate the start box html.
local data = p.makeStartBoxData(args, env, links)
if data then
return p.renderStartBox(data)
else
-- User specified no heading.
return nil
end
end
function p.makeStartBoxLinksData(args, env)
--[[
-- Does initial processing of data to make the [view] [edit] [history] [purge] links.
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
--
-- Messages:
-- 'view-link-display' --> 'view'
-- 'edit-link-display' --> 'edit'
-- 'history-link-display' --> 'history'
-- 'purge-link-display' --> 'purge'
-- 'module-preload' --> 'Template:Documentation/preload-module-doc'
-- 'docpage-preload' --> 'Template:Documentation/preload'
-- 'create-link-display' --> 'create'
--]]
local subjectSpace = env.subjectSpace
local title = env.title
local docTitle = env.docTitle
if not title or not docTitle then
return nil
end
if docTitle.isRedirect then
docTitle = docTitle.redirectTarget
end
-- Create link if /doc doesn't exist.
local preload = args.preload
if not preload then
if subjectSpace == 828 then -- Module namespace
preload = message('module-preload')
else
preload = message('docpage-preload')
end
end
return {
title = title,
docTitle = docTitle,
-- View, display, edit, and purge links if /doc exists.
viewLinkDisplay = message('view-link-display'),
editLinkDisplay = message('edit-link-display'),
historyLinkDisplay = message('history-link-display'),
purgeLinkDisplay = message('purge-link-display'),
preload = preload,
createLinkDisplay = message('create-link-display')
}
end
function p.renderStartBoxLinks(data)
--[[
-- Generates the [view][edit][history][purge] or [create][purge] links from the data table.
-- @data - a table of data generated by p.makeStartBoxLinksData
--]]
local docTitle = data.docTitle
-- yes, we do intend to purge the template page on which the documentation appears
local purgeLink = makeWikilink("Special:Purge/" .. data.title.prefixedText, data.purgeLinkDisplay)
if docTitle.exists then
local viewLink = makeWikilink(docTitle.prefixedText, data.viewLinkDisplay)
local editLink = makeWikilink("Special:EditPage/" .. docTitle.prefixedText, data.editLinkDisplay)
local historyLink = makeWikilink("Special:PageHistory/" .. docTitle.prefixedText, data.historyLinkDisplay)
return "[" .. viewLink .. "] [" .. editLink .. "] [" .. historyLink .. "] [" .. purgeLink .. "]"
else
local createLink = makeUrlLink(docTitle:canonicalUrl{action = 'edit', preload = data.preload}, data.createLinkDisplay)
return "[" .. createLink .. "] [" .. purgeLink .. "]"
end
return ret
end
function p.makeStartBoxData(args, env, links)
--[=[
-- Does initial processing of data to pass to the start-box render function, p.renderStartBox.
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
-- @links - a string containing the [view][edit][history][purge] links - could be nil if there's an error.
--
-- Messages:
-- 'documentation-icon-wikitext' --> '[[File:Test Template Info-Icon - Version (2).svg|50px|link=|alt=]]'
-- 'template-namespace-heading' --> 'Template documentation'
-- 'module-namespace-heading' --> 'Module documentation'
-- 'file-namespace-heading' --> 'Summary'
-- 'other-namespaces-heading' --> 'Documentation'
-- 'testcases-create-link-display' --> 'create'
--]=]
local subjectSpace = env.subjectSpace
if not subjectSpace then
-- Default to an "other namespaces" namespace, so that we get at least some output
-- if an error occurs.
subjectSpace = 2
end
local data = {}
-- Heading
local heading = args.heading -- Blank values are not removed.
if heading == '' then
-- Don't display the start box if the heading arg is defined but blank.
return nil
end
if heading then
data.heading = heading
elseif subjectSpace == 10 then -- Template namespace
data.heading = message('documentation-icon-wikitext') .. ' ' .. message('template-namespace-heading')
elseif subjectSpace == 828 then -- Module namespace
data.heading = message('documentation-icon-wikitext') .. ' ' .. message('module-namespace-heading')
elseif subjectSpace == 6 then -- File namespace
data.heading = message('file-namespace-heading')
else
data.heading = message('other-namespaces-heading')
end
-- Heading CSS
local headingStyle = args['heading-style']
if headingStyle then
data.headingStyleText = headingStyle
else
-- 'documentation-heading'
data.headingClass = message('main-div-heading-class')
end
-- Data for the [view][edit][history][purge] or [create] links.
if links then
-- 'mw-editsection-like plainlinks'
data.linksClass = message('start-box-link-classes')
data.links = links
end
return data
end
function p.renderStartBox(data)
-- Renders the start box html.
-- @data - a table of data generated by p.makeStartBoxData.
local sbox = mw.html.create('div')
sbox
-- 'documentation-startbox'
:addClass(message('start-box-class'))
:newline()
:tag('span')
:addClass(data.headingClass)
:attr('id', 'documentation-heading')
:cssText(data.headingStyleText)
:wikitext(data.heading)
local links = data.links
if links then
sbox:tag('span')
:addClass(data.linksClass)
:attr('id', data.linksId)
:wikitext(links)
end
return tostring(sbox)
end
----------------------------------------------------------------------------
-- Documentation content
----------------------------------------------------------------------------
p.content = makeInvokeFunc('_content')
function p._content(args, env)
-- Displays the documentation contents
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
env = env or p.getEnvironment(args)
local docTitle = env.docTitle
local content = args.content
if not content and docTitle and docTitle.exists then
content = args._content or mw.getCurrentFrame():expandTemplate{title = docTitle.prefixedText}
end
-- The line breaks below are necessary so that "=== Headings ===" at the start and end
-- of docs are interpreted correctly.
return '\n' .. (content or '') .. '\n'
end
p.contentTitle = makeInvokeFunc('_contentTitle')
function p._contentTitle(args, env)
env = env or p.getEnvironment(args)
local docTitle = env.docTitle
if not args.content and docTitle and docTitle.exists then
return docTitle.prefixedText
else
return ''
end
end
----------------------------------------------------------------------------
-- End box
----------------------------------------------------------------------------
p.endBox = makeInvokeFunc('_endBox')
function p._endBox(args, env)
--[=[
-- This function generates the end box (also known as the link box).
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
--
--]=]
-- Get environment data.
env = env or p.getEnvironment(args)
local subjectSpace = env.subjectSpace
local docTitle = env.docTitle
if not subjectSpace or not docTitle then
return nil
end
-- Check whether we should output the end box at all. Add the end
-- box by default if the documentation exists or if we are in the
-- user, module or template namespaces.
local linkBox = args['link box']
if linkBox == 'off'
or not (
docTitle.exists
or subjectSpace == 2
or subjectSpace == 828
or subjectSpace == 10
)
then
return nil
end
-- Assemble the link box.
local text = ''
if linkBox then
text = text .. linkBox
else
text = text .. (p.makeDocPageBlurb(args, env) or '') -- "This documentation is transcluded from [[Foo]]."
if subjectSpace == 2 or subjectSpace == 10 or subjectSpace == 828 then
-- We are in the user, template or module namespaces.
-- Add sandbox and testcases links.
-- "Editors can experiment in this template's sandbox and testcases pages."
text = text .. (p.makeExperimentBlurb(args, env) or '') .. '<br />'
if not args.content and not args[1] then
-- "Please add categories to the /doc subpage."
-- Don't show this message with inline docs or with an explicitly specified doc page,
-- as then it is unclear where to add the categories.
text = text .. (p.makeCategoriesBlurb(args, env) or '')
end
text = text .. ' ' .. (p.makeSubpagesBlurb(args, env) or '') --"Subpages of this template"
end
end
local box = mw.html.create('div')
-- 'documentation-metadata'
box:attr('role', 'note')
:addClass(message('end-box-class'))
-- 'plainlinks'
:addClass(message('end-box-plainlinks'))
:wikitext(text)
:done()
return '\n' .. tostring(box)
end
function p.makeDocPageBlurb(args, env)
--[=[
-- Makes the blurb "This documentation is transcluded from [[Template:Foo]] (edit, history)".
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
--
-- Messages:
-- 'edit-link-display' --> 'edit'
-- 'history-link-display' --> 'history'
-- 'transcluded-from-blurb' -->
-- 'The above [[Wikipedia:Template documentation|documentation]]
-- is [[Help:Transclusion|transcluded]] from $1.'
-- 'module-preload' --> 'Template:Documentation/preload-module-doc'
-- 'create-link-display' --> 'create'
-- 'create-module-doc-blurb' -->
-- 'You might want to $1 a documentation page for this [[Wikipedia:Lua|Scribunto module]].'
--]=]
local docTitle = env.docTitle
if not docTitle then
return nil
end
local ret
if docTitle.exists then
-- /doc exists; link to it.
local docLink = makeWikilink(docTitle.prefixedText)
local editDisplay = message('edit-link-display')
local editLink = makeWikilink("Special:EditPage/" .. docTitle.prefixedText, editDisplay)
local historyDisplay = message('history-link-display')
local historyLink = makeWikilink("Special:PageHistory/" .. docTitle.prefixedText, historyDisplay)
ret = message('transcluded-from-blurb', {docLink})
.. ' '
.. makeToolbar(editLink, historyLink)
.. '<br />'
elseif env.subjectSpace == 828 then
-- /doc does not exist; ask to create it.
local createUrl = docTitle:canonicalUrl{action = 'edit', preload = message('module-preload')}
local createDisplay = message('create-link-display')
local createLink = makeUrlLink(createUrl, createDisplay)
ret = message('create-module-doc-blurb', {createLink})
.. '<br />'
end
return ret
end
function p.makeExperimentBlurb(args, env)
--[[
-- Renders the text "Editors can experiment in this template's sandbox (edit | diff) and testcases (edit) pages."
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
--
-- Messages:
-- 'sandbox-link-display' --> 'sandbox'
-- 'sandbox-edit-link-display' --> 'edit'
-- 'compare-link-display' --> 'diff'
-- 'module-sandbox-preload' --> 'Template:Documentation/preload-module-sandbox'
-- 'template-sandbox-preload' --> 'Template:Documentation/preload-sandbox'
-- 'sandbox-create-link-display' --> 'create'
-- 'mirror-edit-summary' --> 'Create sandbox version of $1'
-- 'mirror-link-display' --> 'mirror'
-- 'mirror-link-preload' --> 'Template:Documentation/mirror'
-- 'sandbox-link-display' --> 'sandbox'
-- 'testcases-link-display' --> 'testcases'
-- 'testcases-edit-link-display'--> 'edit'
-- 'template-sandbox-preload' --> 'Template:Documentation/preload-sandbox'
-- 'testcases-create-link-display' --> 'create'
-- 'testcases-link-display' --> 'testcases'
-- 'testcases-edit-link-display' --> 'edit'
-- 'module-testcases-preload' --> 'Template:Documentation/preload-module-testcases'
-- 'template-testcases-preload' --> 'Template:Documentation/preload-testcases'
-- 'experiment-blurb-module' --> 'Editors can experiment in this module's $1 and $2 pages.'
-- 'experiment-blurb-template' --> 'Editors can experiment in this template's $1 and $2 pages.'
--]]
local subjectSpace = env.subjectSpace
local templateTitle = env.templateTitle
local sandboxTitle = env.sandboxTitle
local testcasesTitle = env.testcasesTitle
local templatePage = templateTitle.prefixedText
if not subjectSpace or not templateTitle or not sandboxTitle or not testcasesTitle then
return nil
end
-- Make links.
local sandboxLinks, testcasesLinks
if sandboxTitle.exists then
local sandboxPage = sandboxTitle.prefixedText
local sandboxDisplay = message('sandbox-link-display')
local sandboxLink = makeWikilink(sandboxPage, sandboxDisplay)
local sandboxEditDisplay = message('sandbox-edit-link-display')
local sandboxEditLink = makeWikilink("Special:EditPage/" .. sandboxPage, sandboxEditDisplay)
local compareUrl = env.compareUrl
local compareLink
if compareUrl then
local compareDisplay = message('compare-link-display')
compareLink = makeUrlLink(compareUrl, compareDisplay)
end
sandboxLinks = sandboxLink .. ' ' .. makeToolbar(sandboxEditLink, compareLink)
else
local sandboxPreload
if subjectSpace == 828 then
sandboxPreload = message('module-sandbox-preload')
else
sandboxPreload = message('template-sandbox-preload')
end
local sandboxCreateUrl = sandboxTitle:canonicalUrl{action = 'edit', preload = sandboxPreload}
local sandboxCreateDisplay = message('sandbox-create-link-display')
local sandboxCreateLink = makeUrlLink(sandboxCreateUrl, sandboxCreateDisplay)
local mirrorSummary = message('mirror-edit-summary', {makeWikilink(templatePage)})
local mirrorPreload = message('mirror-link-preload')
local mirrorUrl = sandboxTitle:canonicalUrl{action = 'edit', preload = mirrorPreload, summary = mirrorSummary}
if subjectSpace == 828 then
mirrorUrl = sandboxTitle:canonicalUrl{action = 'edit', preload = templateTitle.prefixedText, summary = mirrorSummary}
end
local mirrorDisplay = message('mirror-link-display')
local mirrorLink = makeUrlLink(mirrorUrl, mirrorDisplay)
sandboxLinks = message('sandbox-link-display') .. ' ' .. makeToolbar(sandboxCreateLink, mirrorLink)
end
if testcasesTitle.exists then
local testcasesPage = testcasesTitle.prefixedText
local testcasesDisplay = message('testcases-link-display')
local testcasesLink = makeWikilink(testcasesPage, testcasesDisplay)
local testcasesEditUrl = testcasesTitle:canonicalUrl{action = 'edit'}
local testcasesEditDisplay = message('testcases-edit-link-display')
local testcasesEditLink = makeWikilink("Special:EditPage/" .. testcasesPage, testcasesEditDisplay)
-- for Modules, add testcases run link if exists
if testcasesTitle.contentModel == "Scribunto" and testcasesTitle.talkPageTitle and testcasesTitle.talkPageTitle.exists then
local testcasesRunLinkDisplay = message('testcases-run-link-display')
local testcasesRunLink = makeWikilink(testcasesTitle.talkPageTitle.prefixedText, testcasesRunLinkDisplay)
testcasesLinks = testcasesLink .. ' ' .. makeToolbar(testcasesEditLink, testcasesRunLink)
else
testcasesLinks = testcasesLink .. ' ' .. makeToolbar(testcasesEditLink)
end
else
local testcasesPreload
if subjectSpace == 828 then
testcasesPreload = message('module-testcases-preload')
else
testcasesPreload = message('template-testcases-preload')
end
local testcasesCreateUrl = testcasesTitle:canonicalUrl{action = 'edit', preload = testcasesPreload}
local testcasesCreateDisplay = message('testcases-create-link-display')
local testcasesCreateLink = makeUrlLink(testcasesCreateUrl, testcasesCreateDisplay)
testcasesLinks = message('testcases-link-display') .. ' ' .. makeToolbar(testcasesCreateLink)
end
local messageName
if subjectSpace == 828 then
messageName = 'experiment-blurb-module'
else
messageName = 'experiment-blurb-template'
end
return message(messageName, {sandboxLinks, testcasesLinks})
end
function p.makeCategoriesBlurb(args, env)
--[[
-- Generates the text "Please add categories to the /doc subpage."
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
-- Messages:
-- 'doc-link-display' --> '/doc'
-- 'add-categories-blurb' --> 'Please add categories to the $1 subpage.'
--]]
local docTitle = env.docTitle
if not docTitle then
return nil
end
local docPathLink = makeWikilink(docTitle.prefixedText, message('doc-link-display'))
return message('add-categories-blurb', {docPathLink})
end
function p.makeSubpagesBlurb(args, env)
--[[
-- Generates the "Subpages of this template" link.
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
-- Messages:
-- 'template-pagetype' --> 'template'
-- 'module-pagetype' --> 'module'
-- 'default-pagetype' --> 'page'
-- 'subpages-link-display' --> 'Subpages of this $1'
--]]
local subjectSpace = env.subjectSpace
local templateTitle = env.templateTitle
if not subjectSpace or not templateTitle then
return nil
end
local pagetype
if subjectSpace == 10 then
pagetype = message('template-pagetype')
elseif subjectSpace == 828 then
pagetype = message('module-pagetype')
else
pagetype = message('default-pagetype')
end
local subpagesLink = makeWikilink(
'Special:PrefixIndex/' .. templateTitle.prefixedText .. '/',
message('subpages-link-display', {pagetype})
)
return message('subpages-blurb', {subpagesLink})
end
----------------------------------------------------------------------------
-- Tracking categories
----------------------------------------------------------------------------
function p.addTrackingCategories(env)
--[[
-- Check if {{documentation}} is transcluded on a /doc or /testcases page.
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
-- Messages:
-- 'display-strange-usage-category' --> true
-- 'doc-subpage' --> 'doc'
-- 'testcases-subpage' --> 'testcases'
-- 'strange-usage-category' --> 'Wikipedia pages with strange ((documentation)) usage'
--
-- /testcases pages in the module namespace are not categorised, as they may have
-- {{documentation}} transcluded automatically.
--]]
local title = env.title
local subjectSpace = env.subjectSpace
if not title or not subjectSpace then
return nil
end
local subpage = title.subpageText
local ret = ''
if message('display-strange-usage-category', nil, 'boolean')
and (
subpage == message('doc-subpage')
or subjectSpace ~= 828 and subpage == message('testcases-subpage')
)
then
ret = ret .. makeCategoryLink(message('strange-usage-category'))
end
return ret
end
return p
268dc89480af10873bfbca5439ae8e61b404f770
Template:Hatnote templates
10
349
731
2023-08-04T18:41:52Z
[[]]>FooBarBaz
0
Moved.
wikitext
text/x-wiki
{{Navbox
| name = Hatnote templates
| state = {{{state|<includeonly>autocollapse</includeonly>}}}
| bodyclass = hlist
| belowclass = hlist
| title = [[WP:Hatnote#Hatnote templates|Hatnote templates]]
| above =
*[[Wikipedia:Hatnote]]
*[[Wikipedia:Disambiguation]]
*[[Wikipedia:Redirect]]
| group1 = Generic
| list1 =
*{{tl|Hatnote}}
*{{tl|Self-reference}}
| group2 = For and about
| list2 =
*{{tl|For}}
*{{tl|For-text}} (for custom text)
*{{tl|For-multi}} (for multiple uses)
*{{tl|About}}
*Variations: {{tl|Other uses}}
*{{tl|Other uses of}}
*{{tl|Redirect-distinguish-for}}
*{{tl|About-distinguish}}
*{{tl|About-distinguish-text}}
| group3 = Other topics
| list3 =
*{{tl|Other people}}
*{{tl|About other people}} (adds "about" description)
*{{tl|Similar names}}
*{{tl|Other storms}}
*{{tl|Other places}}
*{{tl|Other ships}}
| group4 = Redirect
| list4 =
*{{tl|Redirect}}
*{{tl|Redirect2}} (for two redirects)
*{{tl|Redirect-multi}} (for multiple redirects)
*{{tl|Redirect-several}} (for several redirects, without listing each)
*{{tl|Redirect-synonym}}
*{{tl|Redirect-distinguish}}
*{{tl|Redirect-distinguish-text}}
*{{tl|Redirect-distinguish-for}}
*{{tl|Technical reasons}}
| group5 = Distinguish
| list5 =
*{{tl|Distinguish}} (supports custom text)
*{{tl|About-distinguish}}
*{{tl|About-distinguish-text}} (for custom text)
*{{tl|Redirect-distinguish}}
*{{tl|Redirect-distinguish-text}} (for custom text)
*{{tl|Redirect-distinguish-for}}
| group6 = For use in sections
| list6 =
*{{tl|Main}}
*{{tl|Main if exists}}
*{{tl|Main list}}
*{{tl|Further}}
*{{tl|Further-text}} (for custom text)
*{{tl|Further interlanguage link}}
*{{tl|See also}}
*{{tl|See also if exists}}
*{{tl|See also-text}} (for custom text)
*{{tl|For outline}}
*{{tl|For timeline}}
| group7 = Special
| list7 =
*{{tl|Broader}}
*{{tl|For introduction}}
*{{tl|See Wiktionary}}
*{{tl|Transcluding article}}
*{{tl|Transcluded section}}
| group8 = Subject specific
| list8 =
* {{tl|About year}}
* {{tl|Highway detail hatnote}}
* {{tl|For LMST}}
* {{tl|WikiIPA}}
| below =
*{{Icon|cat}} [[:Category:Hatnote templates]]
**[[:Category:Hatnote modules|modules]]
**[[:Category:Hatnote templates for names|for [family] names]]
**[[:Category:Hatnote templates for lists|for lists]]
*[[Template:Category hatnote templates|hatnote templates for category pages]]
}}<noinclude>
{{Documentation}}
</noinclude>
5ea17ab2381b3c2002e4846f08d462d2574b6015
Template:Template parameter usage
10
68
140
2023-08-10T01:28:48Z
[[w>Jonesey95
0
clarify that the linked report applies only to article space
wikitext
text/x-wiki
{{#switch:{{{label|}}}
|=[https://bambots.brucemyers.com/TemplateParam.php?wiki=enwiki&template={{Urlencode:{{#if:{{{1|}}}|{{ROOTPAGENAME:{{{1|}}}}}|{{ROOTPAGENAME}}}}}} {{#ifeq:{{yesno-no|{{{lc}}}}}|no|C|c}}lick here] to see a monthly parameter usage report for {{#if:{{{1|}}}|[[Template:{{ROOTPAGENAME:{{{1|}}}}}]]|this template}} in articles{{#ifeq:{{yesno-no|{{{based}}}}}|yes| based on {{#if:{{{1|}}}|its|this}} TemplateData}}.
|None|none=[https://bambots.brucemyers.com/TemplateParam.php?wiki=enwiki&template={{Urlencode:{{#if:{{{1|}}}|{{ROOTPAGENAME:{{{1|}}}}}|{{ROOTPAGENAME}}}}}} {{#ifeq:{{yesno-no|{{{lc}}}}}|no|P|p}}arameter usage report]{{#ifeq:{{yesno-no|{{{based}}}}}|yes| based on {{#if:{{{1|}}}|its|this}} TemplateData}}
|for|For=[https://bambots.brucemyers.com/TemplateParam.php?wiki=enwiki&template={{Urlencode:{{#if:{{{1|}}}|{{ROOTPAGENAME:{{{1|}}}}}|{{ROOTPAGENAME}}}}}} {{#ifeq:{{yesno-no|{{{lc}}}}}|no|P|p}}arameter usage report] for {{#if:{{{1|}}}|[[Template:{{ROOTPAGENAME:{{{1|}}}}}]]|[[Template:{{ROOTPAGENAME}}]]}}{{#ifeq:{{yesno-no|{{{based}}}}}|yes| based on {{#if:{{{1|}}}|its|this}} TemplateData}}.
|#default=[https://bambots.brucemyers.com/TemplateParam.php?wiki=enwiki&template={{Urlencode:{{#if:{{{1|}}}|{{ROOTPAGENAME:{{{1|}}}}}|{{ROOTPAGENAME}}}}}} {{{label|}}}]{{#ifeq:{{yesno-no|{{{based}}}}}|yes| based on {{#if:{{{1|}}}|its|this}} TemplateData}}
}}<noinclude>
{{documentation}}
</noinclude>
10a89e6a4bc63a1427518ea21bf94b8f623a7391
Template:Infobox military conflict/doc
10
1068
2197
2023-08-10T13:48:02Z
[[]]>Favonian
0
Reverted edit by [[Special:Contribs/Sword Of Hind|Sword Of Hind]] ([[User talk:Sword Of Hind|talk]]) to last version by Cinderella157
wikitext
text/x-wiki
{{Documentation subpage}}
{{High-use|16,100}}
{{Lua|Module:Infobox military conflict}}
__TOC__
==Usage==
{{Infobox military conflict
| conflict = Battle of Lützen
| partof = the [[Thirty Years' War]]
| image = Battle of Lutzen.jpg
| alt = Battle of Lutzen by Carl Whalbom depicting King Gustavus Aolphus falling from a horse mortally wounded in a melee
| image_size = 300px
| caption = The '' '''Battle of Lützen''' '' by [[Carl Wahlbom]] shows the death of King [[Gustavus Adolphus]] on 16 November 1632.
| date = 6 November ([[Old Style and New Style dates|O.S.]]) or 16 November ([[Old Style and New Style dates|N.S.]]), 1632
| place = Near [[Lützen]], southwest of [[Leipzig]]<br />(present-day [[Germany]])
| coordinates = {{coord|51|15|N|12|08|E|region:DE_type:city}}
| result = Protestant victory <br />(see {{blue|Aftermath}} section)
| combatant1 = {{flagicon|Sweden|1562}} [[Swedish Empire|Sweden]]<br />[[Protestant Union]]
| combatant2 = {{flag|Holy Roman Empire}}<br/>{{flagicon image|Catholic League (Germany).svg}} [[Catholic League (German)|Catholic League]]
| commander1 = {{flagicon|Sweden|1562}} [[Gustavus Adolphus]]{{KIA}}<br/>{{flagicon|Sweden|1562}} [[Dodo zu Innhausen und Knyphausen|Dodo von Knyphausen]]<br/>{{Flagicon|Electorate of Saxony}} [[Bernhard of Saxe-Weimar]]<br/>{{flagicon|Sweden|1562}} [[Robert Munro, 18th Baron of Foulis]]
| commander2 = {{flagicon|Holy Roman Empire}} [[Albrecht von Wallenstein]]<br/>{{flagicon|Holy Roman Empire}} [[Heinrich Holk]]<br/>{{flagicon|Holy Roman Empire}} [[Gottfried zu Pappenheim|Count Gottfried zu Pappenheim]]{{DOW}}
| strength1 = 12,800 infantry<br />6,200 cavalry<br />60 guns
| strength2 = 10,000 infantry<br />7,000 cavalry, plus 3,000 infantry and 2,000 cavalry on arrival<br />24 guns
| casualties1 = 3,400 dead and 1,600 wounded or missing
| casualties2 = Probably about the same as Swedish casualties{{fakeref|1}}
}}
A military conflict infobox (sometimes referred to as a warbox) may be used to summarize information about a particular military conflict (a battle, campaign, war, or group of related wars) in a standard manner.
Information summarized in an infobox should follow the general guidance for writing a [[Wikipedia:Manual of Style/Lead section|lead section]]. It should not "make claims" or present material not covered by the article. As with a lead section, there is some discretion in citing information in an infobox. The same guidance should be applied to an infobox as given for [[Wikipedia:Manual of Style/Lead section#Citations|citations in a lead section]]. Information in an infobox must conform with [[Wikipedia:Verifiability|verifiability]], [[Wikipedia:Neutral point of view|point-of-view]] and other policies.
Information in the infobox should not be "controversial". Refer the reader to an appropriate section in the article or leave the parameter blank rather than make an unsubstantiated or doubtful claim.
The infobox should be added using the {{tl|infobox military conflict}} template, as shown below:
<div style="width:250px;background:#dddddd;border: 1px solid black;padding:0.5em 1em 0.5em 1em"><syntaxhighlight lang="wikitext">
{{Infobox military conflict
| conflict =
| width =
| partof =
| image =
| image_size =
| alt =
| caption =
| date =
| place =
| coordinates = <!--Use the {{coord}} template -->
| map_type =
| map_relief =
| map_size =
| map_marksize =
| map_caption =
| map_label =
| territory =
| result =
| status =
| combatants_header =
| combatant1 =
| combatant2 =
| combatant3 =
| commander1 =
| commander2 =
| commander3 =
| units1 =
| units2 =
| units3 =
| strength1 =
| strength2 =
| strength3 =
| casualties1 =
| casualties2 =
| casualties3 =
| notes =
| campaignbox =
}}
</syntaxhighlight></div>
'''Note''': When using parameters, avoid the ambiguous abbreviation "N/A", and instead use "unknown" or "none". All subjective or qualitative judgements and numerical quantities or statistics must be cited to a reliable source (see [[WP:MILMOS#CITE]]).
===Parameters===
* '''conflict''' – the name of the conflict being described (e.g. "Battle of Lützen" or "World War I").
* '''width''' – ''optional'' – the width of the infobox, e.g. "400px"; defaults to: "315px".
* '''partof''' – ''optional'' – the larger conflict containing the event described in the article. For battles or campaigns, this should be the war during which the event takes place; for particularly large wars, this may include a theatre (e.g. "the Eastern Front of World War II"). For wars, the parameter may be used to link to a larger group of wars (e.g. the [[Italian War of 1521–26]] to the [[Italian Wars]]). It may be necessary to insert "the" before the name of the war for proper grammar.
* '''image''' – ''optional'' – an image for the warbox. Given in the form <code>Example.jpg</code>
* '''image_size''' – ''optional'' – a size for the image
* '''alt''' – ''optional'' – [[Wikipedia:Manual of Style/Accessibility/Alternative text for images|Alternative text for image]] that is accessible to [[screen reader]]s to help the [[visually impaired]]
* '''caption''' – ''optional'' – the text to be placed below the image.
* '''date''' – ''optional'' – the date of the conflict described. Convention is to give the actual date for battles and the years for wars, but this does not always apply.
* '''place''' – the location of the conflict. For conflicts covering a wide area, a general description (e.g. "France", or "Europe", or "Worldwide") may be used.
* '''coordinates''' – ''optional'' – the location of the structure, given as a coordinate pair by using {{tl|coord}} with ''display=inline,title''. Used to display the geographic location of the conflict and the location on a map added with the <code>map_type</code> parameter.
* '''map_type''' – ''optional'' – the base map to be used for the location map, e.g. "Scotland"; see {{tl|location map}} for more details.
* '''map_relief''' – ''optional'' – "yes" if the location map is a relief map; see {{tl|location map}} for more details.
* '''map_size''' – ''optional'' – width of the location map in pixels (px), e.g. "150"; defaults to: "220".
* '''map_mark''' – ''optional'' – the name of a file to use as the location map marker, e.g. Green_pog.svg; defaults to: "Red_pog.svg".
* '''map_marksize''' – ''optional'' – width of the location map marker in pixels (px), e.g. "10"; defaults to: "8".
* '''map_caption''' – ''optional'' – caption displayed below the location map; defaults to "Location within {{{map_type}}}", e.g. "Location within Scotland".
* '''map_label''' – ''optional'' – the label placed next to the marker on the location map.
* '''territory''' – ''optional'' – any changes in territorial control as a result of the conflict; this should not be used for overly lengthy descriptions of the peace settlement.
* '''action''' – ''optional'' – In case of Coup d'État, short description of ''modus operandi'', e.g. "...marched over the city...", "...dissolving the Congress of the Republic...", "...take the government hostage ...", "...put the country under military control ...", etc.
* '''result''' – ''optional'' – this parameter may use one of two standard terms: "X victory" or "Inconclusive". The term used is for the "immediate" outcome of the "subject" conflict and should reflect what the sources say. In cases where the standard terms do not accurately describe the outcome, a link or note should be made to the section of the article where the result is discussed in detail (such as "See the {{blue|Aftermath}} section"). Such a note can also be used in conjunction with the standard terms but should not be used to conceal an ambiguity in the "immediate" result. Do not introduce non-standard terms like "decisive", "marginal" or "tactical", or contradictory statements like "decisive tactical victory but strategic defeat". Omit this parameter altogether rather than engage in [[WP:NOR|speculation]] about which side won or by how much.
* '''status''' – ''optional'' – for ongoing conflicts, the current status of the conflict. This should not be used if a final result (above) is provided.
* '''combatants_header''' – ''optional'' – sets the header text for the combatants section. Default is "Belligerents". In case of Coup d'État, use "Government-Insurgents "
* '''combatant1'''/'''combatant2'''/'''combatant3''' – ''optional'' – the parties participating in the conflict. This is most commonly the countries whose forces took part in the conflict; however, larger groups (such as alliances or international organizations) or smaller ones (such as particular units, formations, or groups) may be indicated if doing so improves reader understanding. When there is a large number of participants, it may be better to list only the three or four major groups on each side of the conflict, and to describe the rest in the body of the article. The '''combatant3''' field may be used if a conflict has three distinct "sides", and should be left blank on other articles. Combatants should be listed in order of importance to the conflict, be it in terms of military contribution, political clout, or a recognized chain of command. If differing metrics can support alternative lists, then ordering is left to the editors of the particular article. The practice of writing in a "Supported by" subheading is deprecated (see [[Template talk:Infobox military conflict#RfC on "supported by" being used with the belligerent parameter|discussion]]).
** '''combatant1a'''/'''combatant2a'''/'''combatant3a''' – ''optional'' – in cases where the parties significantly changed over the course of the conflict, these subsidiary fields may be used to provide additional rows for the '''combatant''N''''' fields (above).
** '''combatant1b'''/'''combatant2b'''/'''combatant3b''' – ''optional'' – additional row, as above.
** '''combatant1c'''/'''combatant2c'''/'''combatant3c''' – ''optional'' – additional row, as above.
** '''combatant1d'''/'''combatant2d'''/'''combatant3d''' – ''optional'' – additional row, as above.
** '''combatant1e'''/'''combatant2e'''/'''combatant3e''' – ''optional'' – additional row, as above.
* '''commander1'''/'''commander2'''/'''commander3''' – ''optional'' – the commanders of the military forces involved. For battles, this should include military commanders (and other officers as necessary). For wars, only prominent or notable leaders should be listed, with an upper limit of about seven per combatant column recommended. Ranks and position titles should be omitted. The {{tl|KIA}} and {{tl|POW}} templates may be included immediately after the names of commanders who were killed in action or surrendered and were taken prisoner, respectively. The '''commander3''' field can only be used if the '''combatant3''' field is set.
** '''commander1a'''/'''commander2a'''/'''commander3a''' – ''optional'' – in cases where the commanders significantly changed over the course of the conflict, these subsidiary fields may be used to provide additional rows for the '''commander''N''''' fields (above).
** '''commander1b'''/'''commander2b'''/'''commander3b''' – ''optional'' – additional row, as above.
** '''commander1c'''/'''commander2c'''/'''commander3c''' – ''optional'' – additional row, as above.
** '''commander1d'''/'''commander2d'''/'''commander3d''' – ''optional'' – additional row, as above.
** '''commander1e'''/'''commander2e'''/'''commander3e''' – ''optional'' – additional row, as above.
* '''units1'''/'''units2'''/'''units3''' – ''optional'' – the units or formations involved. If a large number of distinct formations is present, it may be better to reference an order of battle in the body of the article than to include the entire list in this field. The '''units3''' field can only be used if the '''combatant3''' field is set.
* '''strength1'''/'''strength2''' – ''optional'' – the numerical strength of the units involved.
:* '''polstrength1'''/'''polstrength2''' – ''optional'' – In case of Coup d'Etat, political organizations that supported the government (1) respective the insurgents (2).
:* '''milstrength1'''/'''milstrength2''' – ''optional'' – In case of Coup d'Etat, military units that supported the government (1) respective the insurgents (2).
* '''strength3''' – ''optional'' – if '''combatant3''' is set, this is a third strength field identical to the two above; if it is '''''not''''' set, this is an alternate combined field for use where only the total participation in a conflict is known.
* '''casualties1'''/'''casualties2''' – ''optional'' – casualties suffered (including: dead, wounded, missing, captured and civilian deaths) and equipment losses. Note that this section of the infobox is headed "Casualties and losses". Terms such as "dead" (or "killed"), "wounded", or "captured" should be used in place of abbreviations such as "KIA" or "POW". Where equipment losses are reported, this should be confined to major or significant types of equipment broadly categorized such as: tanks, guns (artillery pieces), aircraft, destroyers etc.
* '''casualties3''' – ''optional'' – if '''combatant3''' is set, this is a third casualty field identical to the two above; if it is '''''not''''' set, this is an alternate combined field for use where only the total casualties of a conflict are known, or where civilian casualties cannot be directly attributed to either side.
* '''notes''' – ''optional'' – optional field for further notes; this should only be used in exceptional circumstances.
* '''campaignbox''' – ''optional'' – optional field for appending a [[WP:CAMPAIGN|campaignbox template]] to the bottom of the infobox, which allows both boxes to float as a single element (useful if there are subsequent left floating images, which would otherwise not be able to float above the campaign box); the template must be specified in the format <nowiki>{{Campaignbox XYZ}}</nowiki>.<noinclude>
[[Category:WikiProject Military history template instructions|Military conflict infobox]]
</noinclude>{{Campaign/doc|noheader=yes}}
{{Operational plan/doc|noheader=yes}}
==Microformat==
{{UF-hcal-geo}}
== TemplateData ==
{{TemplateData header}}
{{collapse top|title=TemplateData}}
<templatedata>
{
"description": "Summarize information about a particular military conflict (a battle, campaign, war, or group of related wars).",
"format": "{{_\n| _________________ = _\n}}\n",
"params": {
"conflict": {
"label": "Conflict",
"description": "The name of the conflict being described.",
"type": "string/line",
"required": true
},
"width": {
"label": "Width",
"description": "Width of the infobox.",
"type": "string",
"default": "315px",
"required": false
},
"partof": {
"label": "Part of",
"description": "The larger conflict containing the event described in the article.",
"type": "wiki-page-name",
"required": false
},
"image": {
"label": "Image",
"description": "An image for the warbox given in the form Example.jpg.",
"type": "wiki-file-name",
"required": false
},
"image_size": {
"label": "Image size",
"description": "The size of the image",
"type": "string",
"required": false
},
"alt": {
"label": "Alt",
"description": "Alternative textual description of the image",
"type": "string",
"required": false
},
"caption": {
"label": "Caption",
"description": "The text to be placed below the image.",
"type": "string",
"required": false
},
"date": {
"label": "Date",
"description": "The date of the conflict described. Convention is to give the actual date for battles and the years for wars, but this does not always apply.",
"type": "string",
"required": false
},
"place": {
"label": "Place",
"description": "The location of the conflict.",
"type": "string",
"required": true
},
"coordinates": {
"label": "Coordinates",
"description": "The location of the structure, given as a coordinate pair by using {{coord}} with display=inline,title.",
"type": "string",
"required": false
},
"map_type": {
"label": "Map Type",
"description": "The base map to be used for the location map, e.g. \"Scotland\"; see {{location map}} for more details.",
"type": "string",
"required": false
},
"map_relief": {
"label": "Map Relief",
"description": "\"yes\" if the location map is a relief map.",
"type": "string",
"required": false
},
"map_size": {
"label": "Map Size",
"description": "Width of the location map in pixels (px).",
"type": "number",
"default": "220",
"required": false
},
"map_mark": {
"label": "Map Marker",
"description": "File to use as the location map marker.",
"type": "string",
"default": "red_pog.svg",
"required": false
},
"map_marksize": {
"label": "Map Marker Size",
"description": "Width of the location map marker in pixels (px).",
"type": "number",
"default": "8",
"required": false
},
"map_caption": {
"label": "Map Caption",
"description": "Caption displayed below the location map.",
"type": "string",
"default": "Location within {{{map_type}}}",
"required": false
},
"map_label": {
"label": "Map Label",
"description": "The label placed next to the marker on the location map.",
"type": "string/line",
"required": false
},
"territory": {
"label": "Territory",
"description": "Any changes in territorial control as a result of the conflict; this should not be used for overly lengthy descriptions of the peace settlement.",
"type": "string",
"required": false
},
"result": {
"label": "Result",
"description": "This parameter may use one of two standard terms: \"X victory\" or \"Inconclusive\". The term used is for the \"immediate\" outcome of the \"subject\" conflict and should reflect what the sources say. In cases where the standard terms do not accurately describe the outcome, a link or note should be made to the section of the article where the result is discussed in detail (such as \"See the Aftermath section\"). Such a note can also be used in conjunction with the standard terms but should not be used to conceal an ambiguity in the \"immediate\" result. Do not introduce non-standard terms like \"decisive\", \"marginal\" or \"tactical\", or contradictory statements like \"decisive tactical victory but strategic defeat\". Omit this parameter altogether rather than engage in speculation about which side won or by how much.",
"type": "string",
"required": false
},
"status": {
"label": "Status",
"description": "For ongoing conflicts, the current status of the conflict.",
"type": "string/line",
"required": false
},
"combatants_header": {
"label": "\"Combatants\" Header Text",
"description": "Sets the header text for the combatants section.",
"type": "string/line",
"default": "Belligerents",
"required": false
},
"combatant1": {
"label": "Combatant 1",
"description": "A party participating in the conflict.",
"type": "string",
"required": false
},
"combatant2": {
"label": "Combatant 2",
"description": "A party participating in the conflict.",
"type": "string",
"required": false
},
"combatant3": {
"label": "Combatant 3",
"description": "A party participating in the conflict. (only if the conflict has three distinct \"sides\")",
"type": "string",
"required": false
},
"combatant1a": {
"label": "Combatant 1a",
"description": "In cases where the parties significantly changed over the course of the conflict, this field may be used to provide additional rows for the Combatant 1 field.",
"type": "string",
"required": false
},
"combatant2a": {
"label": "Combatant 2a",
"description": "In cases where the parties significantly changed over the course of the conflict, this field may be used to provide additional rows for the Combatant 2 field.",
"type": "string",
"required": false
},
"combatant3a": {
"label": "Combatant 3a",
"description": "In cases where the parties significantly changed over the course of the conflict, this field may be used to provide additional rows for the Combatant 3 field.",
"type": "string",
"required": false
},
"combatant1b": {
"label": "Combatant 1b",
"description": "In cases where the parties significantly changed over the course of the conflict, this field may be used to provide additional rows for the Combatant 1 field.",
"type": "string",
"required": false
},
"combatant2b": {
"label": "Combatant 2b",
"description": "In cases where the parties significantly changed over the course of the conflict, this field may be used to provide additional rows for the Combatant 2 field.",
"type": "string",
"required": false
},
"combatant3b": {
"label": "Combatant 3b",
"description": "In cases where the parties significantly changed over the course of the conflict, this field may be used to provide additional rows for the Combatant 3 field.",
"type": "string",
"required": false
},
"combatant1c": {
"label": "Combatant 1c",
"description": "In cases where the parties significantly changed over the course of the conflict, this field may be used to provide additional rows for the Combatant 1 field.",
"type": "string",
"required": false
},
"combatant2c": {
"label": "Combatant 2c",
"description": "In cases where the parties significantly changed over the course of the conflict, this field may be used to provide additional rows for the Combatant 2 field.",
"type": "string",
"required": false
},
"combatant3c": {
"label": "Combatant 3c",
"description": "In cases where the parties significantly changed over the course of the conflict, this field may be used to provide additional rows for the Combatant 3 field.",
"type": "string",
"required": false
},
"combatant1d": {
"label": "Combatant 1d",
"description": "In cases where the parties significantly changed over the course of the conflict, this field may be used to provide additional rows for the Combatant 1 field.",
"type": "string",
"required": false
},
"combatant2d": {
"label": "Combatant 2d",
"description": "In cases where the parties significantly changed over the course of the conflict, this field may be used to provide additional rows for the Combatant 2 field.",
"type": "string",
"required": false
},
"combatant3d": {
"label": "Combatant 3d",
"description": "In cases where the parties significantly changed over the course of the conflict, this field may be used to provide additional rows for the Combatant 3 field.",
"type": "string",
"required": false
},
"commander1": {
"label": "Commander of Combatant 1",
"description": "The commanders of the military forces of Combatant (1) involved.",
"type": "string",
"required": false
},
"commander2": {
"label": "Commander of Combatant 2",
"description": "The commanders of the military forces of Combatant 2 involved.",
"type": "string",
"required": false
},
"commander3": {
"label": "Commander of Combatant 3",
"description": "The commanders of the military forces of Combatant 3 involved.",
"type": "string",
"required": false
},
"units1": {
"label": "Units of Combatant 1",
"description": "The units or formations of Combatant 1 involved. If a large number of distinct formations is present, it may be better to reference an order of battle in the body of the article than to include the entire list in this field.",
"type": "string",
"required": false
},
"units2": {
"label": "Units of Combatant 2",
"description": "The units or formations of Combatant 2 involved. If a large number of distinct formations is present, it may be better to reference an order of battle in the body of the article than to include the entire list in this field.",
"type": "string",
"required": false
},
"units3": {
"label": "Units of Combatant 3",
"description": "The units or formations of Combatant 3 involved. If a large number of distinct formations is present, it may be better to reference an order of battle in the body of the article than to include the entire list in this field.",
"type": "string",
"required": false
},
"strength1": {
"label": "Strength of Combatant 1",
"description": "The numerical strength of Combatant 1.",
"type": "string",
"required": false
},
"strength2": {
"label": "Strength of Combatant 2",
"description": "The numerical strength of Combatant 2.",
"type": "string",
"required": false
},
"strength3": {
"label": "Strength of Combatant 3",
"description": "If Combatant 3 is set, this field is for the numerical strength of Combatant 3. If Combatant 3 is not set, this is an alternate combined field for use where only the total participation in a conflict is known.",
"type": "string",
"required": false
},
"casualties1": {
"label": "Casualties of Combatant 1",
"description": "Casualties suffered by Combatant 1 (including: dead, wounded, missing, captured and civilian deaths) and equipment losses. Terms such as \"dead\" (or \"killed\"), \"wounded\", or \"captured\" should be used in place of abbreviations such as \"KIA\" or \"POW\". Where equipment losses are reported, this should be confined to major or significant types of equipment broadly categorized such as: tanks, guns (artillery pieces), aircraft, destroyers etc.",
"type": "string",
"required": false
},
"casualties2": {
"label": "Casualties of Combatant 2",
"description": "Casualties suffered by Combatant 2 (including: dead, wounded, missing, captured and civilian deaths) and equipment losses. Terms such as \"dead\" (or \"killed\"), \"wounded\", or \"captured\" should be used in place of abbreviations such as \"KIA\" or \"POW\". Where equipment losses are reported, this should be confined to major or significant types of equipment broadly categorized such as: tanks, guns (artillery pieces), aircraft, destroyers etc.",
"type": "string",
"required": false
},
"casualties3": {
"label": "Casualties of Combatant 3",
"description": "If Combatant 3 is set, this field is for the casualties suffered by Combatant 3, (including: dead, wounded, missing, captured and civilian deaths) and equipment losses. Terms such as \"dead\" (or \"killed\"), \"wounded\", or \"captured\" should be used in place of abbreviations such as \"KIA\" or \"POW\". Where equipment losses are reported, this should be confined to major or significant types of equipment broadly categorized such as: tanks, guns (artillery pieces), aircraft, destroyers etc. If combatant3 is not set, this is an alternate combined field for use where only the total casualties of a conflict are known, or where civilian casualties cannot be directly attributed to either side.",
"type": "string",
"required": false
},
"notes": {
"label": "Notes",
"description": "Optional field for further notes; this should only be used in exceptional circumstances.",
"type": "string",
"required": false
},
"campaignbox": {
"label": "Campaignbox",
"description": "Optional field for appending a campaignbox template to the bottom of the infobox, which allows both boxes to float as a single element (useful if there are subsequent left floating images, which would otherwise not be able to float above the campaign box); the template must be specified in the format {{Campaignbox XYZ}}.",
"type": "string",
"required": false
}
}
}</templatedata>
{{Collapse bottom}}
==See also==
*{{tl|Infobox military operation}}
*{{tl|Infobox civil conflict}}
*{{tl|Infobox civilian attack}}
<includeonly>{{Sandbox other||
<!-- Categories below this line, please; interwikis at Wikidata -->
[[Category:War and conflict infobox templates| ]]
[[Category:Templates based on the Infobox Lua module]]
}}</includeonly>
b7bc1bfd8830e6f3810fed38740c84ef509585dd
Template:See also/doc
10
351
735
2023-08-11T13:40:48Z
[[]]>Osarius
0
Reverted edits by [[Special:Contributions/2405:3800:88F:6109:1E4A:B223:3B6D:3E56|2405:3800:88F:6109:1E4A:B223:3B6D:3E56]] ([[User talk:2405:3800:88F:6109:1E4A:B223:3B6D:3E56|talk]]) ([[WP:AntiVandal|AV]])
wikitext
text/x-wiki
{{documentation subpage}}
{{used in system|in [[MediaWiki:wantedpages-summary]]}}
{{lua|Module:Labelled list hatnote}}
This template is used to create '''[[WP:Hatnotes|hatnotes]] to point to a small number of other related titles''' at the '''top of article ''[[Help:Section|sections]]''''' (excluding the [[WP:LEAD|lead]]). It looks like this:
{{See also|Article}}
Do not use this template on top of a page, where hatnotes are for disambiguation and not for related topics (according to [[WP:RELATED]]). Do not use this template inside [[Wikipedia:Manual of Style/Layout#"See also" section|the ''"See also" section'']] at the end of an article, or for links to other articles or subsections of the same article within regular article text. Where subsections are linked to, [[Template:Section link]] may be suitable instead. For use on category pages, the corresponding template is [[Template:Category see also]].
Refer to the examples below to see how the template handles link targets containing section links and commas.
==Usage==
{{see|WP:SUMMARYHATNOTE}}
; Basic usage:
{{See also|''page1''|''page2''|''page3''|...}}
; All parameters:
{{See also|''page1''|''page2''|''page3''| ...
|label 1 = ''label 1''|label 2 = ''label2''|label 3 = ''label3''| ...
|l1 = ''label1''|l2 = ''label2''|l3 = ''label3''| ...
|selfref = ''yes''|category = ''no''}}
==Parameters==
This template accepts the following parameters:
* <code>1</code>, <code>2</code>, <code>3</code>, ... – the pages to link to. At least one page name is required. Categories and files are automatically escaped with the [[Help:Colon trick|colon trick]], and links to sections are automatically formatted as ''page § section'', rather than the MediaWiki default of ''page#section''.
* <code>label 1</code>, <code>label 2</code>, <code>label 3</code>, ...; or <code>l1</code>, <code>l2</code>, <code>l3</code>, ...; optional labels for each of the pages to link to.
* <code>selfref</code> – if set to "yes", "y", "true" or "1", adds the CSS class "selfref". This is used to denote self-references to Wikipedia. See [[Template:Selfref]] for more information.
* <code>category</code> – if set to "no", "n", "false", or "0", suppresses the error tracking category ([[:Category:Hatnote templates with errors]]). This only has an effect if the first positional parameter (the page to link to) is omitted.
== Examples ==
* <code><nowiki>{{See also|Article}}</nowiki></code> → {{See also|Article}}
* <code><nowiki>{{See also|Article#Section}}</nowiki></code> → {{See also|Article#Section}}
* <code><nowiki>{{See also|Article#Section|label 1=Custom section label}}</nowiki></code> → {{See also|Article#Section|label 1=Custom section label}}
* <code><nowiki>{{See also|Article1|Article2|Article3}}</nowiki></code> → {{See also|Article1|Article2|Article3}}
* <code><nowiki>{{See also|Article1|Article,2|Article3}}</nowiki></code> → {{See also|Article1|Article,2|Article3}}
* <code><nowiki>{{See also|Article1|l1=Custom label 1|Article2|l2=Custom label 2}}</nowiki></code> → {{See also|Article1|l1=Custom label 1|Article2|l2=Custom label 2}}
* <code><nowiki>{{See also|Veni, vidi, vici|Julius Caesar}}</nowiki></code> → {{See also|Veni, vidi, vici|Julius Caesar}}
* <code><nowiki>{{See also|Veni, vidi, vici|Julius Caesar#Civil war}}</nowiki></code> → {{See also|Veni, vidi, vici|Julius Caesar#Civil war}}
* <code><nowiki>{{See also|Julius Caesar#Civil war|Veni, vidi, vici}}</nowiki></code> → {{See also|Julius Caesar#Civil war|Veni, vidi, vici}}
* <code><nowiki>{{See also|Julius Caesar#Civil war|Crossing the Rubicon}}</nowiki></code> → {{See also|Julius Caesar#Civil war|Crossing the Rubicon}}
==Errors==
If no page names are supplied, the template outputs the following message with the (help) wikilink pointing to the "Errors" section of this page:
*{{See also|category=no}}
If you see this error message, it is for one of three reasons:
# No parameters were specified (the template code was <code><nowiki>{{See also}}</nowiki></code> with no pipe character nor page to link to). Please use <code><nowiki>{{See also|</nowiki>''page''<nowiki>}}</nowiki></code> instead.
# Some parameters were specified, but no page names were included. For example, the template text <code><nowiki>{{See also|selfref=yes}}</nowiki></code> will produce this error. Please use (for example) <code><nowiki>{{See also|</nowiki>''page''<nowiki>|selfref=yes}}</nowiki></code> instead.
# A page name was specified, but it contains an equals sign ("="). The equals sign has a special meaning in template code, and because of this it cannot be used in template parameters that do not specify a parameter name. For example, the template code <code><nowiki>{{See also|1+1=2|2+2=4}}</nowiki></code> will produce this error. To work around this, you can specify the parameter name explicitly by using <code>1=</code>, <code>2</code>, etc., before the page name, like this: <code><nowiki>{{See also|1=1+1=2|2=2+2=4}}</nowiki></code>.
If you see this error message and are unsure of what to do, please post a message on [[WP:HD|the help desk (WP:HD)]], and someone should be able to help you.
To see a list of wikilinks to articles that contain this error message, see the [[Wikipedia:Maintenance|maintenance category]]: [[:Category:Hatnote templates with errors]].
==TemplateData==
{{Collapse top|[[Wikipedia:TemplateData|TemplateData]] documentation used by [[Wikipedia:VisualEditor|VisualEditor]] and other tools}}
{{TemplateData header|noheader=1}}
<templatedata>
{
"description": "This template creates a hatnote to point to a small number of related pages. It is placed at the top of a section, directly underneath the section heading.",
"params": {
"1": {
"label": "Page 1",
"description": "The name of the first page that you want to link to.",
"type": "wiki-page-name",
"required": true,
"example": "Article name"
},
"2": {
"label": "Page 2",
"description": "The name of the second page that you want to link to.",
"type": "wiki-page-name",
"required": false
},
"3": {
"label": "Page 3",
"description": "The name of the third page that you want to link to. More pages can be added using the parameters \"4\", \"5\", \"6\", etc.",
"type": "wiki-page-name",
"required": false
},
"label 1": {
"label": "Label 1",
"type": "string",
"description": "What the first linked article is to be displayed as. ",
"aliases": [
"l1"
]
},
"label 2": {
"label": "Label 2",
"type": "string",
"description": "What the second linked article is to be displayed as.",
"aliases": [
"l2"
]
},
"label 3": {
"aliases": [
"l3"
],
"type": "string",
"label": "Label 3",
"description": "What the third linked article is to be displayed as. Other labels can be added by using increasing numbers (starting with \"label 4\" or \"l4\" for page 4) as parameter names."
},
"selfref": {
"type": "boolean",
"label": "Self reference",
"description": "Set to \"yes\" if the template is a self-reference to Wikipedia that would not make sense on mirrors or forks of the Wikipedia site.",
"example": "yes",
"default": "no"
},
"category": {
"label": "Category",
"description": "Set to \"no\", \"n\", \"false\", or \"0\" to suppresses the error tracking category (Category:Hatnote templates with errors). This only has an effect if no page names are specified.",
"type": "boolean",
"default": "yes",
"example": "no"
}
},
"format": "inline"
}
</templatedata>
{{Collapse bottom}}
==See also==
*{{tl|For}}
*{{tl|See also if exists}}
*{{t|Further}}
*{{tl|Template see also}}
*{{tl|Category see also}}
*{{tl|Main}}
*{{tl|See}} (redirect to {{tl|Further}})
*{{tl|Hatnote}}
{{Hatnote templates}}
<includeonly>{{Sandbox other||
<!-- Categories go here and interwikis go in Wikidata. -->
[[Category:Hatnote templates]]
[[Category:Related-topic templates]]
[[Category:Wikipedia page-section templates]]
[[Category:Wikipedia see also]]
}}</includeonly>
8e7cb32ca0af3f18a7bc8a6a67105914d660c533
Module:Language/data/iana languages
828
184
373
2023-08-21T15:41:21Z
[[w>Trappist the monk
0
update to 2023-08-02 data;
Scribunto
text/plain
-- File-Date: 2023-08-02
local active = {
["aa"] = {"Afar"},
["ab"] = {"Abkhazian"},
["ae"] = {"Avestan"},
["af"] = {"Afrikaans"},
["ak"] = {"Akan"},
["am"] = {"Amharic"},
["an"] = {"Aragonese"},
["ar"] = {"Arabic"},
["as"] = {"Assamese"},
["av"] = {"Avaric"},
["ay"] = {"Aymara"},
["az"] = {"Azerbaijani"},
["ba"] = {"Bashkir"},
["be"] = {"Belarusian"},
["bg"] = {"Bulgarian"},
["bh"] = {"Bihari languages"},
["bi"] = {"Bislama"},
["bm"] = {"Bambara"},
["bn"] = {"Bengali", "Bangla"},
["bo"] = {"Tibetan"},
["br"] = {"Breton"},
["bs"] = {"Bosnian"},
["ca"] = {"Catalan", "Valencian"},
["ce"] = {"Chechen"},
["ch"] = {"Chamorro"},
["co"] = {"Corsican"},
["cr"] = {"Cree"},
["cs"] = {"Czech"},
["cu"] = {"Church Slavic", "Church Slavonic", "Old Bulgarian", "Old Church Slavonic", "Old Slavonic"},
["cv"] = {"Chuvash"},
["cy"] = {"Welsh"},
["da"] = {"Danish"},
["de"] = {"German"},
["dv"] = {"Dhivehi", "Divehi", "Maldivian"},
["dz"] = {"Dzongkha"},
["ee"] = {"Ewe"},
["el"] = {"Modern Greek (1453-)"},
["en"] = {"English"},
["eo"] = {"Esperanto"},
["es"] = {"Spanish", "Castilian"},
["et"] = {"Estonian"},
["eu"] = {"Basque"},
["fa"] = {"Persian"},
["ff"] = {"Fulah"},
["fi"] = {"Finnish"},
["fj"] = {"Fijian"},
["fo"] = {"Faroese"},
["fr"] = {"French"},
["fy"] = {"Western Frisian"},
["ga"] = {"Irish"},
["gd"] = {"Scottish Gaelic", "Gaelic"},
["gl"] = {"Galician"},
["gn"] = {"Guarani"},
["gu"] = {"Gujarati"},
["gv"] = {"Manx"},
["ha"] = {"Hausa"},
["he"] = {"Hebrew"},
["hi"] = {"Hindi"},
["ho"] = {"Hiri Motu"},
["hr"] = {"Croatian"},
["ht"] = {"Haitian", "Haitian Creole"},
["hu"] = {"Hungarian"},
["hy"] = {"Armenian"},
["hz"] = {"Herero"},
["ia"] = {"Interlingua (International Auxiliary Language Association)"},
["id"] = {"Indonesian"},
["ie"] = {"Interlingue", "Occidental"},
["ig"] = {"Igbo"},
["ii"] = {"Sichuan Yi", "Nuosu"},
["ik"] = {"Inupiaq"},
["io"] = {"Ido"},
["is"] = {"Icelandic"},
["it"] = {"Italian"},
["iu"] = {"Inuktitut"},
["ja"] = {"Japanese"},
["jv"] = {"Javanese"},
["ka"] = {"Georgian"},
["kg"] = {"Kongo"},
["ki"] = {"Kikuyu", "Gikuyu"},
["kj"] = {"Kuanyama", "Kwanyama"},
["kk"] = {"Kazakh"},
["kl"] = {"Kalaallisut", "Greenlandic"},
["km"] = {"Khmer", "Central Khmer"},
["kn"] = {"Kannada"},
["ko"] = {"Korean"},
["kr"] = {"Kanuri"},
["ks"] = {"Kashmiri"},
["ku"] = {"Kurdish"},
["kv"] = {"Komi"},
["kw"] = {"Cornish"},
["ky"] = {"Kirghiz", "Kyrgyz"},
["la"] = {"Latin"},
["lb"] = {"Luxembourgish", "Letzeburgesch"},
["lg"] = {"Ganda", "Luganda"},
["li"] = {"Limburgan", "Limburger", "Limburgish"},
["ln"] = {"Lingala"},
["lo"] = {"Lao"},
["lt"] = {"Lithuanian"},
["lu"] = {"Luba-Katanga"},
["lv"] = {"Latvian"},
["mg"] = {"Malagasy"},
["mh"] = {"Marshallese"},
["mi"] = {"Maori"},
["mk"] = {"Macedonian"},
["ml"] = {"Malayalam"},
["mn"] = {"Mongolian"},
["mr"] = {"Marathi"},
["ms"] = {"Malay (macrolanguage)"},
["mt"] = {"Maltese"},
["my"] = {"Burmese"},
["na"] = {"Nauru"},
["nb"] = {"Norwegian Bokmål"},
["nd"] = {"North Ndebele"},
["ne"] = {"Nepali (macrolanguage)"},
["ng"] = {"Ndonga"},
["nl"] = {"Dutch", "Flemish"},
["nn"] = {"Norwegian Nynorsk"},
["no"] = {"Norwegian"},
["nr"] = {"South Ndebele"},
["nv"] = {"Navajo", "Navaho"},
["ny"] = {"Nyanja", "Chewa", "Chichewa"},
["oc"] = {"Occitan (post 1500)"},
["oj"] = {"Ojibwa"},
["om"] = {"Oromo"},
["or"] = {"Oriya (macrolanguage)", "Odia (macrolanguage)"},
["os"] = {"Ossetian", "Ossetic"},
["pa"] = {"Panjabi", "Punjabi"},
["pi"] = {"Pali"},
["pl"] = {"Polish"},
["ps"] = {"Pushto", "Pashto"},
["pt"] = {"Portuguese"},
["qu"] = {"Quechua"},
["rm"] = {"Romansh"},
["rn"] = {"Rundi"},
["ro"] = {"Romanian", "Moldavian", "Moldovan"},
["ru"] = {"Russian"},
["rw"] = {"Kinyarwanda"},
["sa"] = {"Sanskrit"},
["sc"] = {"Sardinian"},
["sd"] = {"Sindhi"},
["se"] = {"Northern Sami"},
["sg"] = {"Sango"},
["sh"] = {"Serbo-Croatian"},
["si"] = {"Sinhala", "Sinhalese"},
["sk"] = {"Slovak"},
["sl"] = {"Slovenian"},
["sm"] = {"Samoan"},
["sn"] = {"Shona"},
["so"] = {"Somali"},
["sq"] = {"Albanian"},
["sr"] = {"Serbian"},
["ss"] = {"Swati"},
["st"] = {"Southern Sotho"},
["su"] = {"Sundanese"},
["sv"] = {"Swedish"},
["sw"] = {"Swahili (macrolanguage)"},
["ta"] = {"Tamil"},
["te"] = {"Telugu"},
["tg"] = {"Tajik"},
["th"] = {"Thai"},
["ti"] = {"Tigrinya"},
["tk"] = {"Turkmen"},
["tl"] = {"Tagalog"},
["tn"] = {"Tswana"},
["to"] = {"Tonga (Tonga Islands)"},
["tr"] = {"Turkish"},
["ts"] = {"Tsonga"},
["tt"] = {"Tatar"},
["tw"] = {"Twi"},
["ty"] = {"Tahitian"},
["ug"] = {"Uighur", "Uyghur"},
["uk"] = {"Ukrainian"},
["ur"] = {"Urdu"},
["uz"] = {"Uzbek"},
["ve"] = {"Venda"},
["vi"] = {"Vietnamese"},
["vo"] = {"Volapük"},
["wa"] = {"Walloon"},
["wo"] = {"Wolof"},
["xh"] = {"Xhosa"},
["yi"] = {"Yiddish"},
["yo"] = {"Yoruba"},
["za"] = {"Zhuang", "Chuang"},
["zh"] = {"Chinese"},
["zu"] = {"Zulu"},
["aaa"] = {"Ghotuo"},
["aab"] = {"Alumu-Tesu"},
["aac"] = {"Ari"},
["aad"] = {"Amal"},
["aae"] = {"Arbëreshë Albanian"},
["aaf"] = {"Aranadan"},
["aag"] = {"Ambrak"},
["aah"] = {"Abu' Arapesh"},
["aai"] = {"Arifama-Miniafia"},
["aak"] = {"Ankave"},
["aal"] = {"Afade"},
["aan"] = {"Anambé"},
["aao"] = {"Algerian Saharan Arabic"},
["aap"] = {"Pará Arára"},
["aaq"] = {"Eastern Abnaki"},
["aas"] = {"Aasáx"},
["aat"] = {"Arvanitika Albanian"},
["aau"] = {"Abau"},
["aav"] = {"Austro-Asiatic languages"},
["aaw"] = {"Solong"},
["aax"] = {"Mandobo Atas"},
["aaz"] = {"Amarasi"},
["aba"] = {"Abé"},
["abb"] = {"Bankon"},
["abc"] = {"Ambala Ayta"},
["abd"] = {"Manide"},
["abe"] = {"Western Abnaki"},
["abf"] = {"Abai Sungai"},
["abg"] = {"Abaga"},
["abh"] = {"Tajiki Arabic"},
["abi"] = {"Abidji"},
["abj"] = {"Aka-Bea"},
["abl"] = {"Lampung Nyo"},
["abm"] = {"Abanyom"},
["abn"] = {"Abua"},
["abo"] = {"Abon"},
["abp"] = {"Abellen Ayta"},
["abq"] = {"Abaza"},
["abr"] = {"Abron"},
["abs"] = {"Ambonese Malay"},
["abt"] = {"Ambulas"},
["abu"] = {"Abure"},
["abv"] = {"Baharna Arabic"},
["abw"] = {"Pal"},
["abx"] = {"Inabaknon"},
["aby"] = {"Aneme Wake"},
["abz"] = {"Abui"},
["aca"] = {"Achagua"},
["acb"] = {"Áncá"},
["acd"] = {"Gikyode"},
["ace"] = {"Achinese"},
["acf"] = {"Saint Lucian Creole French"},
["ach"] = {"Acoli"},
["aci"] = {"Aka-Cari"},
["ack"] = {"Aka-Kora"},
["acl"] = {"Akar-Bale"},
["acm"] = {"Mesopotamian Arabic"},
["acn"] = {"Achang"},
["acp"] = {"Eastern Acipa"},
["acq"] = {"Ta'izzi-Adeni Arabic"},
["acr"] = {"Achi"},
["acs"] = {"Acroá"},
["act"] = {"Achterhoeks"},
["acu"] = {"Achuar-Shiwiar"},
["acv"] = {"Achumawi"},
["acw"] = {"Hijazi Arabic"},
["acx"] = {"Omani Arabic"},
["acy"] = {"Cypriot Arabic"},
["acz"] = {"Acheron"},
["ada"] = {"Adangme"},
["adb"] = {"Atauran"},
["add"] = {"Lidzonka", "Dzodinka"},
["ade"] = {"Adele"},
["adf"] = {"Dhofari Arabic"},
["adg"] = {"Andegerebinha"},
["adh"] = {"Adhola"},
["adi"] = {"Adi"},
["adj"] = {"Adioukrou"},
["adl"] = {"Galo"},
["adn"] = {"Adang"},
["ado"] = {"Abu"},
["adq"] = {"Adangbe"},
["adr"] = {"Adonara"},
["ads"] = {"Adamorobe Sign Language"},
["adt"] = {"Adnyamathanha"},
["adu"] = {"Aduge"},
["adw"] = {"Amundava"},
["adx"] = {"Amdo Tibetan"},
["ady"] = {"Adyghe", "Adygei"},
["adz"] = {"Adzera"},
["aea"] = {"Areba"},
["aeb"] = {"Tunisian Arabic"},
["aec"] = {"Saidi Arabic"},
["aed"] = {"Argentine Sign Language"},
["aee"] = {"Northeast Pashai", "Northeast Pashayi"},
["aek"] = {"Haeke"},
["ael"] = {"Ambele"},
["aem"] = {"Arem"},
["aen"] = {"Armenian Sign Language"},
["aeq"] = {"Aer"},
["aer"] = {"Eastern Arrernte"},
["aes"] = {"Alsea"},
["aeu"] = {"Akeu"},
["aew"] = {"Ambakich"},
["aey"] = {"Amele"},
["aez"] = {"Aeka"},
["afa"] = {"Afro-Asiatic languages"},
["afb"] = {"Gulf Arabic"},
["afd"] = {"Andai"},
["afe"] = {"Putukwam"},
["afg"] = {"Afghan Sign Language"},
["afh"] = {"Afrihili"},
["afi"] = {"Akrukay", "Chini"},
["afk"] = {"Nanubae"},
["afn"] = {"Defaka"},
["afo"] = {"Eloyi"},
["afp"] = {"Tapei"},
["afs"] = {"Afro-Seminole Creole"},
["aft"] = {"Afitti"},
["afu"] = {"Awutu"},
["afz"] = {"Obokuitai"},
["aga"] = {"Aguano"},
["agb"] = {"Legbo"},
["agc"] = {"Agatu"},
["agd"] = {"Agarabi"},
["age"] = {"Angal"},
["agf"] = {"Arguni"},
["agg"] = {"Angor"},
["agh"] = {"Ngelima"},
["agi"] = {"Agariya"},
["agj"] = {"Argobba"},
["agk"] = {"Isarog Agta"},
["agl"] = {"Fembe"},
["agm"] = {"Angaataha"},
["agn"] = {"Agutaynen"},
["ago"] = {"Tainae"},
["agq"] = {"Aghem"},
["agr"] = {"Aguaruna"},
["ags"] = {"Esimbi"},
["agt"] = {"Central Cagayan Agta"},
["agu"] = {"Aguacateco"},
["agv"] = {"Remontado Dumagat"},
["agw"] = {"Kahua"},
["agx"] = {"Aghul"},
["agy"] = {"Southern Alta"},
["agz"] = {"Mt. Iriga Agta"},
["aha"] = {"Ahanta"},
["ahb"] = {"Axamb"},
["ahg"] = {"Qimant"},
["ahh"] = {"Aghu"},
["ahi"] = {"Tiagbamrin Aizi"},
["ahk"] = {"Akha"},
["ahl"] = {"Igo"},
["ahm"] = {"Mobumrin Aizi"},
["ahn"] = {"Àhàn"},
["aho"] = {"Ahom"},
["ahp"] = {"Aproumu Aizi"},
["ahr"] = {"Ahirani"},
["ahs"] = {"Ashe"},
["aht"] = {"Ahtena"},
["aia"] = {"Arosi"},
["aib"] = {"Ainu (China)"},
["aic"] = {"Ainbai"},
["aid"] = {"Alngith"},
["aie"] = {"Amara"},
["aif"] = {"Agi"},
["aig"] = {"Antigua and Barbuda Creole English"},
["aih"] = {"Ai-Cham"},
["aii"] = {"Assyrian Neo-Aramaic"},
["aij"] = {"Lishanid Noshan"},
["aik"] = {"Ake"},
["ail"] = {"Aimele"},
["aim"] = {"Aimol"},
["ain"] = {"Ainu (Japan)"},
["aio"] = {"Aiton"},
["aip"] = {"Burumakok"},
["aiq"] = {"Aimaq"},
["air"] = {"Airoran"},
["ait"] = {"Arikem"},
["aiw"] = {"Aari"},
["aix"] = {"Aighon"},
["aiy"] = {"Ali"},
["aja"] = {"Aja (South Sudan)"},
["ajg"] = {"Aja (Benin)"},
["aji"] = {"Ajië"},
["ajn"] = {"Andajin"},
["ajs"] = {"Algerian Jewish Sign Language"},
["aju"] = {"Judeo-Moroccan Arabic"},
["ajw"] = {"Ajawa"},
["ajz"] = {"Amri Karbi"},
["akb"] = {"Batak Angkola"},
["akc"] = {"Mpur"},
["akd"] = {"Ukpet-Ehom"},
["ake"] = {"Akawaio"},
["akf"] = {"Akpa"},
["akg"] = {"Anakalangu"},
["akh"] = {"Angal Heneng"},
["aki"] = {"Aiome"},
["akj"] = {"Aka-Jeru"},
["akk"] = {"Akkadian"},
["akl"] = {"Aklanon"},
["akm"] = {"Aka-Bo"},
["ako"] = {"Akurio"},
["akp"] = {"Siwu"},
["akq"] = {"Ak"},
["akr"] = {"Araki"},
["aks"] = {"Akaselem"},
["akt"] = {"Akolet"},
["aku"] = {"Akum"},
["akv"] = {"Akhvakh"},
["akw"] = {"Akwa"},
["akx"] = {"Aka-Kede"},
["aky"] = {"Aka-Kol"},
["akz"] = {"Alabama"},
["ala"] = {"Alago"},
["alc"] = {"Qawasqar"},
["ald"] = {"Alladian"},
["ale"] = {"Aleut"},
["alf"] = {"Alege"},
["alg"] = {"Algonquian languages"},
["alh"] = {"Alawa"},
["ali"] = {"Amaimon"},
["alj"] = {"Alangan"},
["alk"] = {"Alak"},
["all"] = {"Allar"},
["alm"] = {"Amblong"},
["aln"] = {"Gheg Albanian"},
["alo"] = {"Larike-Wakasihu"},
["alp"] = {"Alune"},
["alq"] = {"Algonquin"},
["alr"] = {"Alutor"},
["als"] = {"Tosk Albanian"},
["alt"] = {"Southern Altai"},
["alu"] = {"'Are'are"},
["alv"] = {"Atlantic-Congo languages"},
["alw"] = {"Alaba-K’abeena", "Wanbasana"},
["alx"] = {"Amol"},
["aly"] = {"Alyawarr"},
["alz"] = {"Alur"},
["ama"] = {"Amanayé"},
["amb"] = {"Ambo"},
["amc"] = {"Amahuaca"},
["ame"] = {"Yanesha'"},
["amf"] = {"Hamer-Banna"},
["amg"] = {"Amurdak"},
["ami"] = {"Amis"},
["amj"] = {"Amdang"},
["amk"] = {"Ambai"},
["aml"] = {"War-Jaintia"},
["amm"] = {"Ama (Papua New Guinea)"},
["amn"] = {"Amanab"},
["amo"] = {"Amo"},
["amp"] = {"Alamblak"},
["amq"] = {"Amahai"},
["amr"] = {"Amarakaeri"},
["ams"] = {"Southern Amami-Oshima"},
["amt"] = {"Amto"},
["amu"] = {"Guerrero Amuzgo"},
["amv"] = {"Ambelau"},
["amw"] = {"Western Neo-Aramaic"},
["amx"] = {"Anmatyerre"},
["amy"] = {"Ami"},
["amz"] = {"Atampaya"},
["ana"] = {"Andaqui"},
["anb"] = {"Andoa"},
["anc"] = {"Ngas"},
["and"] = {"Ansus"},
["ane"] = {"Xârâcùù"},
["anf"] = {"Animere"},
["ang"] = {"Old English (ca. 450-1100)"},
["anh"] = {"Nend"},
["ani"] = {"Andi"},
["anj"] = {"Anor"},
["ank"] = {"Goemai"},
["anl"] = {"Anu-Hkongso Chin"},
["anm"] = {"Anal"},
["ann"] = {"Obolo"},
["ano"] = {"Andoque"},
["anp"] = {"Angika"},
["anq"] = {"Jarawa (India)"},
["anr"] = {"Andh"},
["ans"] = {"Anserma"},
["ant"] = {"Antakarinya", "Antikarinya"},
["anu"] = {"Anuak"},
["anv"] = {"Denya"},
["anw"] = {"Anaang"},
["anx"] = {"Andra-Hus"},
["any"] = {"Anyin"},
["anz"] = {"Anem"},
["aoa"] = {"Angolar"},
["aob"] = {"Abom"},
["aoc"] = {"Pemon"},
["aod"] = {"Andarum"},
["aoe"] = {"Angal Enen"},
["aof"] = {"Bragat"},
["aog"] = {"Angoram"},
["aoi"] = {"Anindilyakwa"},
["aoj"] = {"Mufian"},
["aok"] = {"Arhö"},
["aol"] = {"Alor"},
["aom"] = {"Ömie"},
["aon"] = {"Bumbita Arapesh"},
["aor"] = {"Aore"},
["aos"] = {"Taikat"},
["aot"] = {"Atong (India)", "A'tong"},
["aou"] = {"A'ou"},
["aox"] = {"Atorada"},
["aoz"] = {"Uab Meto"},
["apa"] = {"Apache languages"},
["apb"] = {"Sa'a"},
["apc"] = {"Levantine Arabic"},
["apd"] = {"Sudanese Arabic"},
["ape"] = {"Bukiyip"},
["apf"] = {"Pahanan Agta"},
["apg"] = {"Ampanang"},
["aph"] = {"Athpariya"},
["api"] = {"Apiaká"},
["apj"] = {"Jicarilla Apache"},
["apk"] = {"Kiowa Apache"},
["apl"] = {"Lipan Apache"},
["apm"] = {"Mescalero-Chiricahua Apache"},
["apn"] = {"Apinayé"},
["apo"] = {"Ambul"},
["app"] = {"Apma"},
["apq"] = {"A-Pucikwar"},
["apr"] = {"Arop-Lokep"},
["aps"] = {"Arop-Sissano"},
["apt"] = {"Apatani"},
["apu"] = {"Apurinã"},
["apv"] = {"Alapmunte"},
["apw"] = {"Western Apache"},
["apx"] = {"Aputai"},
["apy"] = {"Apalaí"},
["apz"] = {"Safeyoka"},
["aqa"] = {"Alacalufan languages"},
["aqc"] = {"Archi"},
["aqd"] = {"Ampari Dogon"},
["aqg"] = {"Arigidi"},
["aqk"] = {"Aninka"},
["aql"] = {"Algic languages"},
["aqm"] = {"Atohwaim"},
["aqn"] = {"Northern Alta"},
["aqp"] = {"Atakapa"},
["aqr"] = {"Arhâ"},
["aqt"] = {"Angaité"},
["aqz"] = {"Akuntsu"},
["arb"] = {"Standard Arabic"},
["arc"] = {"Official Aramaic (700-300 BCE)", "Imperial Aramaic (700-300 BCE)"},
["ard"] = {"Arabana"},
["are"] = {"Western Arrarnta"},
["arh"] = {"Arhuaco"},
["ari"] = {"Arikara"},
["arj"] = {"Arapaso"},
["ark"] = {"Arikapú"},
["arl"] = {"Arabela"},
["arn"] = {"Mapudungun", "Mapuche"},
["aro"] = {"Araona"},
["arp"] = {"Arapaho"},
["arq"] = {"Algerian Arabic"},
["arr"] = {"Karo (Brazil)"},
["ars"] = {"Najdi Arabic"},
["art"] = {"Artificial languages"},
["aru"] = {"Aruá (Amazonas State)", "Arawá"},
["arv"] = {"Arbore"},
["arw"] = {"Arawak"},
["arx"] = {"Aruá (Rodonia State)"},
["ary"] = {"Moroccan Arabic"},
["arz"] = {"Egyptian Arabic"},
["asa"] = {"Asu (Tanzania)"},
["asb"] = {"Assiniboine"},
["asc"] = {"Casuarina Coast Asmat"},
["ase"] = {"American Sign Language"},
["asf"] = {"Auslan", "Australian Sign Language"},
["asg"] = {"Cishingini"},
["ash"] = {"Abishira"},
["asi"] = {"Buruwai"},
["asj"] = {"Sari"},
["ask"] = {"Ashkun"},
["asl"] = {"Asilulu"},
["asn"] = {"Xingú Asuriní"},
["aso"] = {"Dano"},
["asp"] = {"Algerian Sign Language"},
["asq"] = {"Austrian Sign Language"},
["asr"] = {"Asuri"},
["ass"] = {"Ipulo"},
["ast"] = {"Asturian", "Asturleonese", "Bable", "Leonese"},
["asu"] = {"Tocantins Asurini"},
["asv"] = {"Asoa"},
["asw"] = {"Australian Aborigines Sign Language"},
["asx"] = {"Muratayak"},
["asy"] = {"Yaosakor Asmat"},
["asz"] = {"As"},
["ata"] = {"Pele-Ata"},
["atb"] = {"Zaiwa"},
["atc"] = {"Atsahuaca"},
["atd"] = {"Ata Manobo"},
["ate"] = {"Atemble"},
["atg"] = {"Ivbie North-Okpela-Arhe"},
["ath"] = {"Athapascan languages"},
["ati"] = {"Attié"},
["atj"] = {"Atikamekw"},
["atk"] = {"Ati"},
["atl"] = {"Mt. Iraya Agta"},
["atm"] = {"Ata"},
["atn"] = {"Ashtiani"},
["ato"] = {"Atong (Cameroon)"},
["atp"] = {"Pudtol Atta"},
["atq"] = {"Aralle-Tabulahan"},
["atr"] = {"Waimiri-Atroari"},
["ats"] = {"Gros Ventre"},
["att"] = {"Pamplona Atta"},
["atu"] = {"Reel"},
["atv"] = {"Northern Altai"},
["atw"] = {"Atsugewi"},
["atx"] = {"Arutani"},
["aty"] = {"Aneityum"},
["atz"] = {"Arta"},
["aua"] = {"Asumboa"},
["aub"] = {"Alugu"},
["auc"] = {"Waorani"},
["aud"] = {"Anuta"},
["auf"] = {"Arauan languages"},
["aug"] = {"Aguna"},
["auh"] = {"Aushi"},
["aui"] = {"Anuki"},
["auj"] = {"Awjilah"},
["auk"] = {"Heyo"},
["aul"] = {"Aulua"},
["aum"] = {"Asu (Nigeria)"},
["aun"] = {"Molmo One"},
["auo"] = {"Auyokawa"},
["aup"] = {"Makayam"},
["auq"] = {"Anus", "Korur"},
["aur"] = {"Aruek"},
["aus"] = {"Australian languages"},
["aut"] = {"Austral"},
["auu"] = {"Auye"},
["auw"] = {"Awyi"},
["aux"] = {"Aurá"},
["auy"] = {"Awiyaana"},
["auz"] = {"Uzbeki Arabic"},
["avb"] = {"Avau"},
["avd"] = {"Alviri-Vidari"},
["avi"] = {"Avikam"},
["avk"] = {"Kotava"},
["avl"] = {"Eastern Egyptian Bedawi Arabic"},
["avm"] = {"Angkamuthi"},
["avn"] = {"Avatime"},
["avo"] = {"Agavotaguerra"},
["avs"] = {"Aushiri"},
["avt"] = {"Au"},
["avu"] = {"Avokaya"},
["avv"] = {"Avá-Canoeiro"},
["awa"] = {"Awadhi"},
["awb"] = {"Awa (Papua New Guinea)"},
["awc"] = {"Cicipu"},
["awd"] = {"Arawakan languages"},
["awe"] = {"Awetí"},
["awg"] = {"Anguthimri"},
["awh"] = {"Awbono"},
["awi"] = {"Aekyom"},
["awk"] = {"Awabakal"},
["awm"] = {"Arawum"},
["awn"] = {"Awngi"},
["awo"] = {"Awak"},
["awr"] = {"Awera"},
["aws"] = {"South Awyu"},
["awt"] = {"Araweté"},
["awu"] = {"Central Awyu"},
["awv"] = {"Jair Awyu"},
["aww"] = {"Awun"},
["awx"] = {"Awara"},
["awy"] = {"Edera Awyu"},
["axb"] = {"Abipon"},
["axe"] = {"Ayerrerenge"},
["axg"] = {"Mato Grosso Arára"},
["axk"] = {"Yaka (Central African Republic)"},
["axl"] = {"Lower Southern Aranda"},
["axm"] = {"Middle Armenian"},
["axx"] = {"Xârâgurè"},
["aya"] = {"Awar"},
["ayb"] = {"Ayizo Gbe"},
["ayc"] = {"Southern Aymara"},
["ayd"] = {"Ayabadhu"},
["aye"] = {"Ayere"},
["ayg"] = {"Ginyanga"},
["ayh"] = {"Hadrami Arabic"},
["ayi"] = {"Leyigha"},
["ayk"] = {"Akuku"},
["ayl"] = {"Libyan Arabic"},
["ayn"] = {"Sanaani Arabic"},
["ayo"] = {"Ayoreo"},
["ayp"] = {"North Mesopotamian Arabic"},
["ayq"] = {"Ayi (Papua New Guinea)"},
["ayr"] = {"Central Aymara"},
["ays"] = {"Sorsogon Ayta"},
["ayt"] = {"Magbukun Ayta"},
["ayu"] = {"Ayu"},
["ayz"] = {"Mai Brat"},
["aza"] = {"Azha"},
["azb"] = {"South Azerbaijani"},
["azc"] = {"Uto-Aztecan languages"},
["azd"] = {"Eastern Durango Nahuatl"},
["azg"] = {"San Pedro Amuzgos Amuzgo"},
["azj"] = {"North Azerbaijani"},
["azm"] = {"Ipalapa Amuzgo"},
["azn"] = {"Western Durango Nahuatl"},
["azo"] = {"Awing"},
["azt"] = {"Faire Atta"},
["azz"] = {"Highland Puebla Nahuatl"},
["baa"] = {"Babatana"},
["bab"] = {"Bainouk-Gunyuño"},
["bac"] = {"Badui"},
["bad"] = {"Banda languages"},
["bae"] = {"Baré"},
["baf"] = {"Nubaca"},
["bag"] = {"Tuki"},
["bah"] = {"Bahamas Creole English"},
["bai"] = {"Bamileke languages"},
["baj"] = {"Barakai"},
["bal"] = {"Baluchi"},
["ban"] = {"Balinese"},
["bao"] = {"Waimaha"},
["bap"] = {"Bantawa"},
["bar"] = {"Bavarian"},
["bas"] = {"Basa (Cameroon)"},
["bat"] = {"Baltic languages"},
["bau"] = {"Bada (Nigeria)"},
["bav"] = {"Vengo"},
["baw"] = {"Bambili-Bambui"},
["bax"] = {"Bamun"},
["bay"] = {"Batuley"},
["bba"] = {"Baatonum"},
["bbb"] = {"Barai"},
["bbc"] = {"Batak Toba"},
["bbd"] = {"Bau"},
["bbe"] = {"Bangba"},
["bbf"] = {"Baibai"},
["bbg"] = {"Barama"},
["bbh"] = {"Bugan"},
["bbi"] = {"Barombi"},
["bbj"] = {"Ghomálá'"},
["bbk"] = {"Babanki"},
["bbl"] = {"Bats"},
["bbm"] = {"Babango"},
["bbn"] = {"Uneapa"},
["bbo"] = {"Northern Bobo Madaré", "Konabéré"},
["bbp"] = {"West Central Banda"},
["bbq"] = {"Bamali"},
["bbr"] = {"Girawa"},
["bbs"] = {"Bakpinka"},
["bbt"] = {"Mburku"},
["bbu"] = {"Kulung (Nigeria)"},
["bbv"] = {"Karnai"},
["bbw"] = {"Baba"},
["bbx"] = {"Bubia"},
["bby"] = {"Befang"},
["bca"] = {"Central Bai"},
["bcb"] = {"Bainouk-Samik"},
["bcc"] = {"Southern Balochi"},
["bcd"] = {"North Babar"},
["bce"] = {"Bamenyam"},
["bcf"] = {"Bamu"},
["bcg"] = {"Baga Pokur"},
["bch"] = {"Bariai"},
["bci"] = {"Baoulé"},
["bcj"] = {"Bardi"},
["bck"] = {"Bunuba"},
["bcl"] = {"Central Bikol"},
["bcm"] = {"Bannoni"},
["bcn"] = {"Bali (Nigeria)"},
["bco"] = {"Kaluli"},
["bcp"] = {"Bali (Democratic Republic of Congo)"},
["bcq"] = {"Bench"},
["bcr"] = {"Babine"},
["bcs"] = {"Kohumono"},
["bct"] = {"Bendi"},
["bcu"] = {"Awad Bing"},
["bcv"] = {"Shoo-Minda-Nye"},
["bcw"] = {"Bana"},
["bcy"] = {"Bacama"},
["bcz"] = {"Bainouk-Gunyaamolo"},
["bda"] = {"Bayot"},
["bdb"] = {"Basap"},
["bdc"] = {"Emberá-Baudó"},
["bdd"] = {"Bunama"},
["bde"] = {"Bade"},
["bdf"] = {"Biage"},
["bdg"] = {"Bonggi"},
["bdh"] = {"Baka (South Sudan)"},
["bdi"] = {"Burun"},
["bdj"] = {"Bai (South Sudan)", "Bai"},
["bdk"] = {"Budukh"},
["bdl"] = {"Indonesian Bajau"},
["bdm"] = {"Buduma"},
["bdn"] = {"Baldemu"},
["bdo"] = {"Morom"},
["bdp"] = {"Bende"},
["bdq"] = {"Bahnar"},
["bdr"] = {"West Coast Bajau"},
["bds"] = {"Burunge"},
["bdt"] = {"Bokoto"},
["bdu"] = {"Oroko"},
["bdv"] = {"Bodo Parja"},
["bdw"] = {"Baham"},
["bdx"] = {"Budong-Budong"},
["bdy"] = {"Bandjalang"},
["bdz"] = {"Badeshi"},
["bea"] = {"Beaver"},
["beb"] = {"Bebele"},
["bec"] = {"Iceve-Maci"},
["bed"] = {"Bedoanas"},
["bee"] = {"Byangsi"},
["bef"] = {"Benabena"},
["beg"] = {"Belait"},
["beh"] = {"Biali"},
["bei"] = {"Bekati'"},
["bej"] = {"Beja", "Bedawiyet"},
["bek"] = {"Bebeli"},
["bem"] = {"Bemba (Zambia)"},
["beo"] = {"Beami"},
["bep"] = {"Besoa"},
["beq"] = {"Beembe"},
["ber"] = {"Berber languages"},
["bes"] = {"Besme"},
["bet"] = {"Guiberoua Béte"},
["beu"] = {"Blagar"},
["bev"] = {"Daloa Bété"},
["bew"] = {"Betawi"},
["bex"] = {"Jur Modo"},
["bey"] = {"Beli (Papua New Guinea)"},
["bez"] = {"Bena (Tanzania)"},
["bfa"] = {"Bari"},
["bfb"] = {"Pauri Bareli"},
["bfc"] = {"Panyi Bai", "Northern Bai"},
["bfd"] = {"Bafut"},
["bfe"] = {"Betaf", "Tena"},
["bff"] = {"Bofi"},
["bfg"] = {"Busang Kayan"},
["bfh"] = {"Blafe"},
["bfi"] = {"British Sign Language"},
["bfj"] = {"Bafanji"},
["bfk"] = {"Ban Khor Sign Language"},
["bfl"] = {"Banda-Ndélé"},
["bfm"] = {"Mmen"},
["bfn"] = {"Bunak"},
["bfo"] = {"Malba Birifor"},
["bfp"] = {"Beba"},
["bfq"] = {"Badaga"},
["bfr"] = {"Bazigar"},
["bfs"] = {"Southern Bai"},
["bft"] = {"Balti"},
["bfu"] = {"Gahri"},
["bfw"] = {"Bondo"},
["bfx"] = {"Bantayanon"},
["bfy"] = {"Bagheli"},
["bfz"] = {"Mahasu Pahari"},
["bga"] = {"Gwamhi-Wuri"},
["bgb"] = {"Bobongko"},
["bgc"] = {"Haryanvi"},
["bgd"] = {"Rathwi Bareli"},
["bge"] = {"Bauria"},
["bgf"] = {"Bangandu"},
["bgg"] = {"Bugun"},
["bgi"] = {"Giangan"},
["bgj"] = {"Bangolan"},
["bgk"] = {"Bit", "Buxinhua"},
["bgl"] = {"Bo (Laos)"},
["bgn"] = {"Western Balochi"},
["bgo"] = {"Baga Koga"},
["bgp"] = {"Eastern Balochi"},
["bgq"] = {"Bagri"},
["bgr"] = {"Bawm Chin"},
["bgs"] = {"Tagabawa"},
["bgt"] = {"Bughotu"},
["bgu"] = {"Mbongno"},
["bgv"] = {"Warkay-Bipim"},
["bgw"] = {"Bhatri"},
["bgx"] = {"Balkan Gagauz Turkish"},
["bgy"] = {"Benggoi"},
["bgz"] = {"Banggai"},
["bha"] = {"Bharia"},
["bhb"] = {"Bhili"},
["bhc"] = {"Biga"},
["bhd"] = {"Bhadrawahi"},
["bhe"] = {"Bhaya"},
["bhf"] = {"Odiai"},
["bhg"] = {"Binandere"},
["bhh"] = {"Bukharic"},
["bhi"] = {"Bhilali"},
["bhj"] = {"Bahing"},
["bhl"] = {"Bimin"},
["bhm"] = {"Bathari"},
["bhn"] = {"Bohtan Neo-Aramaic"},
["bho"] = {"Bhojpuri"},
["bhp"] = {"Bima"},
["bhq"] = {"Tukang Besi South"},
["bhr"] = {"Bara Malagasy"},
["bhs"] = {"Buwal"},
["bht"] = {"Bhattiyali"},
["bhu"] = {"Bhunjia"},
["bhv"] = {"Bahau"},
["bhw"] = {"Biak"},
["bhx"] = {"Bhalay"},
["bhy"] = {"Bhele"},
["bhz"] = {"Bada (Indonesia)"},
["bia"] = {"Badimaya"},
["bib"] = {"Bissa", "Bisa"},
["bid"] = {"Bidiyo"},
["bie"] = {"Bepour"},
["bif"] = {"Biafada"},
["big"] = {"Biangai"},
["bik"] = {"Bikol"},
["bil"] = {"Bile"},
["bim"] = {"Bimoba"},
["bin"] = {"Bini", "Edo"},
["bio"] = {"Nai"},
["bip"] = {"Bila"},
["biq"] = {"Bipi"},
["bir"] = {"Bisorio"},
["bit"] = {"Berinomo"},
["biu"] = {"Biete"},
["biv"] = {"Southern Birifor"},
["biw"] = {"Kol (Cameroon)"},
["bix"] = {"Bijori"},
["biy"] = {"Birhor"},
["biz"] = {"Baloi"},
["bja"] = {"Budza"},
["bjb"] = {"Banggarla"},
["bjc"] = {"Bariji"},
["bje"] = {"Biao-Jiao Mien"},
["bjf"] = {"Barzani Jewish Neo-Aramaic"},
["bjg"] = {"Bidyogo"},
["bjh"] = {"Bahinemo"},
["bji"] = {"Burji"},
["bjj"] = {"Kanauji"},
["bjk"] = {"Barok"},
["bjl"] = {"Bulu (Papua New Guinea)"},
["bjm"] = {"Bajelani"},
["bjn"] = {"Banjar"},
["bjo"] = {"Mid-Southern Banda"},
["bjp"] = {"Fanamaket"},
["bjr"] = {"Binumarien"},
["bjs"] = {"Bajan"},
["bjt"] = {"Balanta-Ganja"},
["bju"] = {"Busuu"},
["bjv"] = {"Bedjond"},
["bjw"] = {"Bakwé"},
["bjx"] = {"Banao Itneg"},
["bjy"] = {"Bayali"},
["bjz"] = {"Baruga"},
["bka"] = {"Kyak"},
["bkc"] = {"Baka (Cameroon)"},
["bkd"] = {"Binukid", "Talaandig"},
["bkf"] = {"Beeke"},
["bkg"] = {"Buraka"},
["bkh"] = {"Bakoko"},
["bki"] = {"Baki"},
["bkj"] = {"Pande"},
["bkk"] = {"Brokskat"},
["bkl"] = {"Berik"},
["bkm"] = {"Kom (Cameroon)"},
["bkn"] = {"Bukitan"},
["bko"] = {"Kwa'"},
["bkp"] = {"Boko (Democratic Republic of Congo)"},
["bkq"] = {"Bakairí"},
["bkr"] = {"Bakumpai"},
["bks"] = {"Northern Sorsoganon"},
["bkt"] = {"Boloki"},
["bku"] = {"Buhid"},
["bkv"] = {"Bekwarra"},
["bkw"] = {"Bekwel"},
["bkx"] = {"Baikeno"},
["bky"] = {"Bokyi"},
["bkz"] = {"Bungku"},
["bla"] = {"Siksika"},
["blb"] = {"Bilua"},
["blc"] = {"Bella Coola"},
["bld"] = {"Bolango"},
["ble"] = {"Balanta-Kentohe"},
["blf"] = {"Buol"},
["blh"] = {"Kuwaa"},
["bli"] = {"Bolia"},
["blj"] = {"Bolongan"},
["blk"] = {"Pa'o Karen", "Pa'O"},
["bll"] = {"Biloxi"},
["blm"] = {"Beli (South Sudan)"},
["bln"] = {"Southern Catanduanes Bikol"},
["blo"] = {"Anii"},
["blp"] = {"Blablanga"},
["blq"] = {"Baluan-Pam"},
["blr"] = {"Blang"},
["bls"] = {"Balaesang"},
["blt"] = {"Tai Dam"},
["blv"] = {"Kibala", "Bolo"},
["blw"] = {"Balangao"},
["blx"] = {"Mag-Indi Ayta"},
["bly"] = {"Notre"},
["blz"] = {"Balantak"},
["bma"] = {"Lame"},
["bmb"] = {"Bembe"},
["bmc"] = {"Biem"},
["bmd"] = {"Baga Manduri"},
["bme"] = {"Limassa"},
["bmf"] = {"Bom-Kim"},
["bmg"] = {"Bamwe"},
["bmh"] = {"Kein"},
["bmi"] = {"Bagirmi"},
["bmj"] = {"Bote-Majhi"},
["bmk"] = {"Ghayavi"},
["bml"] = {"Bomboli"},
["bmm"] = {"Northern Betsimisaraka Malagasy"},
["bmn"] = {"Bina (Papua New Guinea)"},
["bmo"] = {"Bambalang"},
["bmp"] = {"Bulgebi"},
["bmq"] = {"Bomu"},
["bmr"] = {"Muinane"},
["bms"] = {"Bilma Kanuri"},
["bmt"] = {"Biao Mon"},
["bmu"] = {"Somba-Siawari"},
["bmv"] = {"Bum"},
["bmw"] = {"Bomwali"},
["bmx"] = {"Baimak"},
["bmz"] = {"Baramu"},
["bna"] = {"Bonerate"},
["bnb"] = {"Bookan"},
["bnc"] = {"Bontok"},
["bnd"] = {"Banda (Indonesia)"},
["bne"] = {"Bintauna"},
["bnf"] = {"Masiwang"},
["bng"] = {"Benga"},
["bni"] = {"Bangi"},
["bnj"] = {"Eastern Tawbuid"},
["bnk"] = {"Bierebo"},
["bnl"] = {"Boon"},
["bnm"] = {"Batanga"},
["bnn"] = {"Bunun"},
["bno"] = {"Bantoanon"},
["bnp"] = {"Bola"},
["bnq"] = {"Bantik"},
["bnr"] = {"Butmas-Tur"},
["bns"] = {"Bundeli"},
["bnt"] = {"Bantu languages"},
["bnu"] = {"Bentong"},
["bnv"] = {"Bonerif", "Beneraf", "Edwas"},
["bnw"] = {"Bisis"},
["bnx"] = {"Bangubangu"},
["bny"] = {"Bintulu"},
["bnz"] = {"Beezen"},
["boa"] = {"Bora"},
["bob"] = {"Aweer"},
["boe"] = {"Mundabli"},
["bof"] = {"Bolon"},
["bog"] = {"Bamako Sign Language"},
["boh"] = {"Boma"},
["boi"] = {"Barbareño"},
["boj"] = {"Anjam"},
["bok"] = {"Bonjo"},
["bol"] = {"Bole"},
["bom"] = {"Berom"},
["bon"] = {"Bine"},
["boo"] = {"Tiemacèwè Bozo"},
["bop"] = {"Bonkiman"},
["boq"] = {"Bogaya"},
["bor"] = {"Borôro"},
["bot"] = {"Bongo"},
["bou"] = {"Bondei"},
["bov"] = {"Tuwuli"},
["bow"] = {"Rema"},
["box"] = {"Buamu"},
["boy"] = {"Bodo (Central African Republic)"},
["boz"] = {"Tiéyaxo Bozo"},
["bpa"] = {"Daakaka"},
["bpc"] = {"Mbuk"},
["bpd"] = {"Banda-Banda"},
["bpe"] = {"Bauni"},
["bpg"] = {"Bonggo"},
["bph"] = {"Botlikh"},
["bpi"] = {"Bagupi"},
["bpj"] = {"Binji"},
["bpk"] = {"Orowe", "'Ôrôê"},
["bpl"] = {"Broome Pearling Lugger Pidgin"},
["bpm"] = {"Biyom"},
["bpn"] = {"Dzao Min"},
["bpo"] = {"Anasi"},
["bpp"] = {"Kaure"},
["bpq"] = {"Banda Malay"},
["bpr"] = {"Koronadal Blaan"},
["bps"] = {"Sarangani Blaan"},
["bpt"] = {"Barrow Point"},
["bpu"] = {"Bongu"},
["bpv"] = {"Bian Marind"},
["bpw"] = {"Bo (Papua New Guinea)"},
["bpx"] = {"Palya Bareli"},
["bpy"] = {"Bishnupriya"},
["bpz"] = {"Bilba"},
["bqa"] = {"Tchumbuli"},
["bqb"] = {"Bagusa"},
["bqc"] = {"Boko (Benin)", "Boo"},
["bqd"] = {"Bung"},
["bqf"] = {"Baga Kaloum"},
["bqg"] = {"Bago-Kusuntu"},
["bqh"] = {"Baima"},
["bqi"] = {"Bakhtiari"},
["bqj"] = {"Bandial"},
["bqk"] = {"Banda-Mbrès"},
["bql"] = {"Bilakura"},
["bqm"] = {"Wumboko"},
["bqn"] = {"Bulgarian Sign Language"},
["bqo"] = {"Balo"},
["bqp"] = {"Busa"},
["bqq"] = {"Biritai"},
["bqr"] = {"Burusu"},
["bqs"] = {"Bosngun"},
["bqt"] = {"Bamukumbit"},
["bqu"] = {"Boguru"},
["bqv"] = {"Koro Wachi", "Begbere-Ejar"},
["bqw"] = {"Buru (Nigeria)"},
["bqx"] = {"Baangi"},
["bqy"] = {"Bengkala Sign Language"},
["bqz"] = {"Bakaka"},
["bra"] = {"Braj"},
["brb"] = {"Brao", "Lave"},
["brc"] = {"Berbice Creole Dutch"},
["brd"] = {"Baraamu"},
["brf"] = {"Bira"},
["brg"] = {"Baure"},
["brh"] = {"Brahui"},
["bri"] = {"Mokpwe"},
["brj"] = {"Bieria"},
["brk"] = {"Birked"},
["brl"] = {"Birwa"},
["brm"] = {"Barambu"},
["brn"] = {"Boruca"},
["bro"] = {"Brokkat"},
["brp"] = {"Barapasi"},
["brq"] = {"Breri"},
["brr"] = {"Birao"},
["brs"] = {"Baras"},
["brt"] = {"Bitare"},
["bru"] = {"Eastern Bru"},
["brv"] = {"Western Bru"},
["brw"] = {"Bellari"},
["brx"] = {"Bodo (India)"},
["bry"] = {"Burui"},
["brz"] = {"Bilbil"},
["bsa"] = {"Abinomn"},
["bsb"] = {"Brunei Bisaya"},
["bsc"] = {"Bassari", "Oniyan"},
["bse"] = {"Wushi"},
["bsf"] = {"Bauchi"},
["bsg"] = {"Bashkardi"},
["bsh"] = {"Kati"},
["bsi"] = {"Bassossi"},
["bsj"] = {"Bangwinji"},
["bsk"] = {"Burushaski"},
["bsl"] = {"Basa-Gumna"},
["bsm"] = {"Busami"},
["bsn"] = {"Barasana-Eduria"},
["bso"] = {"Buso"},
["bsp"] = {"Baga Sitemu"},
["bsq"] = {"Bassa"},
["bsr"] = {"Bassa-Kontagora"},
["bss"] = {"Akoose"},
["bst"] = {"Basketo"},
["bsu"] = {"Bahonsuai"},
["bsv"] = {"Baga Sobané"},
["bsw"] = {"Baiso"},
["bsx"] = {"Yangkam"},
["bsy"] = {"Sabah Bisaya"},
["bta"] = {"Bata"},
["btc"] = {"Bati (Cameroon)"},
["btd"] = {"Batak Dairi"},
["bte"] = {"Gamo-Ningi"},
["btf"] = {"Birgit"},
["btg"] = {"Gagnoa Bété"},
["bth"] = {"Biatah Bidayuh"},
["bti"] = {"Burate"},
["btj"] = {"Bacanese Malay"},
["btk"] = {"Batak languages"},
["btm"] = {"Batak Mandailing"},
["btn"] = {"Ratagnon"},
["bto"] = {"Rinconada Bikol"},
["btp"] = {"Budibud"},
["btq"] = {"Batek"},
["btr"] = {"Baetora"},
["bts"] = {"Batak Simalungun"},
["btt"] = {"Bete-Bendi"},
["btu"] = {"Batu"},
["btv"] = {"Bateri"},
["btw"] = {"Butuanon"},
["btx"] = {"Batak Karo"},
["bty"] = {"Bobot"},
["btz"] = {"Batak Alas-Kluet"},
["bua"] = {"Buriat"},
["bub"] = {"Bua"},
["buc"] = {"Bushi"},
["bud"] = {"Ntcham"},
["bue"] = {"Beothuk"},
["buf"] = {"Bushoong"},
["bug"] = {"Buginese"},
["buh"] = {"Younuo Bunu"},
["bui"] = {"Bongili"},
["buj"] = {"Basa-Gurmana"},
["buk"] = {"Bugawac"},
["bum"] = {"Bulu (Cameroon)"},
["bun"] = {"Sherbro"},
["buo"] = {"Terei"},
["bup"] = {"Busoa"},
["buq"] = {"Brem"},
["bus"] = {"Bokobaru"},
["but"] = {"Bungain"},
["buu"] = {"Budu"},
["buv"] = {"Bun"},
["buw"] = {"Bubi"},
["bux"] = {"Boghom"},
["buy"] = {"Bullom So"},
["buz"] = {"Bukwen"},
["bva"] = {"Barein"},
["bvb"] = {"Bube"},
["bvc"] = {"Baelelea"},
["bvd"] = {"Baeggu"},
["bve"] = {"Berau Malay"},
["bvf"] = {"Boor"},
["bvg"] = {"Bonkeng"},
["bvh"] = {"Bure"},
["bvi"] = {"Belanda Viri"},
["bvj"] = {"Baan"},
["bvk"] = {"Bukat"},
["bvl"] = {"Bolivian Sign Language"},
["bvm"] = {"Bamunka"},
["bvn"] = {"Buna"},
["bvo"] = {"Bolgo"},
["bvp"] = {"Bumang"},
["bvq"] = {"Birri"},
["bvr"] = {"Burarra"},
["bvt"] = {"Bati (Indonesia)"},
["bvu"] = {"Bukit Malay"},
["bvv"] = {"Baniva"},
["bvw"] = {"Boga"},
["bvx"] = {"Dibole"},
["bvy"] = {"Baybayanon"},
["bvz"] = {"Bauzi"},
["bwa"] = {"Bwatoo"},
["bwb"] = {"Namosi-Naitasiri-Serua"},
["bwc"] = {"Bwile"},
["bwd"] = {"Bwaidoka"},
["bwe"] = {"Bwe Karen"},
["bwf"] = {"Boselewa"},
["bwg"] = {"Barwe"},
["bwh"] = {"Bishuo"},
["bwi"] = {"Baniwa"},
["bwj"] = {"Láá Láá Bwamu"},
["bwk"] = {"Bauwaki"},
["bwl"] = {"Bwela"},
["bwm"] = {"Biwat"},
["bwn"] = {"Wunai Bunu"},
["bwo"] = {"Boro (Ethiopia)", "Borna (Ethiopia)"},
["bwp"] = {"Mandobo Bawah"},
["bwq"] = {"Southern Bobo Madaré"},
["bwr"] = {"Bura-Pabir"},
["bws"] = {"Bomboma"},
["bwt"] = {"Bafaw-Balong"},
["bwu"] = {"Buli (Ghana)"},
["bww"] = {"Bwa"},
["bwx"] = {"Bu-Nao Bunu"},
["bwy"] = {"Cwi Bwamu"},
["bwz"] = {"Bwisi"},
["bxa"] = {"Tairaha"},
["bxb"] = {"Belanda Bor"},
["bxc"] = {"Molengue"},
["bxd"] = {"Pela"},
["bxe"] = {"Birale"},
["bxf"] = {"Bilur", "Minigir"},
["bxg"] = {"Bangala"},
["bxh"] = {"Buhutu"},
["bxi"] = {"Pirlatapa"},
["bxj"] = {"Bayungu"},
["bxk"] = {"Bukusu", "Lubukusu"},
["bxl"] = {"Jalkunan"},
["bxm"] = {"Mongolia Buriat"},
["bxn"] = {"Burduna"},
["bxo"] = {"Barikanchi"},
["bxp"] = {"Bebil"},
["bxq"] = {"Beele"},
["bxr"] = {"Russia Buriat"},
["bxs"] = {"Busam"},
["bxu"] = {"China Buriat"},
["bxv"] = {"Berakou"},
["bxw"] = {"Bankagooma"},
["bxz"] = {"Binahari"},
["bya"] = {"Batak"},
["byb"] = {"Bikya"},
["byc"] = {"Ubaghara"},
["byd"] = {"Benyadu'"},
["bye"] = {"Pouye"},
["byf"] = {"Bete"},
["byg"] = {"Baygo"},
["byh"] = {"Bhujel"},
["byi"] = {"Buyu"},
["byj"] = {"Bina (Nigeria)"},
["byk"] = {"Biao"},
["byl"] = {"Bayono"},
["bym"] = {"Bidjara"},
["byn"] = {"Bilin", "Blin"},
["byo"] = {"Biyo"},
["byp"] = {"Bumaji"},
["byq"] = {"Basay"},
["byr"] = {"Baruya", "Yipma"},
["bys"] = {"Burak"},
["byt"] = {"Berti"},
["byv"] = {"Medumba"},
["byw"] = {"Belhariya"},
["byx"] = {"Qaqet"},
["byz"] = {"Banaro"},
["bza"] = {"Bandi"},
["bzb"] = {"Andio"},
["bzc"] = {"Southern Betsimisaraka Malagasy"},
["bzd"] = {"Bribri"},
["bze"] = {"Jenaama Bozo"},
["bzf"] = {"Boikin"},
["bzg"] = {"Babuza"},
["bzh"] = {"Mapos Buang"},
["bzi"] = {"Bisu"},
["bzj"] = {"Belize Kriol English"},
["bzk"] = {"Nicaragua Creole English"},
["bzl"] = {"Boano (Sulawesi)"},
["bzm"] = {"Bolondo"},
["bzn"] = {"Boano (Maluku)"},
["bzo"] = {"Bozaba"},
["bzp"] = {"Kemberano"},
["bzq"] = {"Buli (Indonesia)"},
["bzr"] = {"Biri"},
["bzs"] = {"Brazilian Sign Language"},
["bzt"] = {"Brithenig"},
["bzu"] = {"Burmeso"},
["bzv"] = {"Naami"},
["bzw"] = {"Basa (Nigeria)"},
["bzx"] = {"Kɛlɛngaxo Bozo"},
["bzy"] = {"Obanliku"},
["bzz"] = {"Evant"},
["caa"] = {"Chortí"},
["cab"] = {"Garifuna"},
["cac"] = {"Chuj"},
["cad"] = {"Caddo"},
["cae"] = {"Lehar", "Laalaa"},
["caf"] = {"Southern Carrier"},
["cag"] = {"Nivaclé"},
["cah"] = {"Cahuarano"},
["cai"] = {"Central American Indian languages"},
["caj"] = {"Chané"},
["cak"] = {"Kaqchikel", "Cakchiquel"},
["cal"] = {"Carolinian"},
["cam"] = {"Cemuhî"},
["can"] = {"Chambri"},
["cao"] = {"Chácobo"},
["cap"] = {"Chipaya"},
["caq"] = {"Car Nicobarese"},
["car"] = {"Galibi Carib"},
["cas"] = {"Tsimané"},
["cau"] = {"Caucasian languages"},
["cav"] = {"Cavineña"},
["caw"] = {"Callawalla"},
["cax"] = {"Chiquitano"},
["cay"] = {"Cayuga"},
["caz"] = {"Canichana"},
["cba"] = {"Chibchan languages"},
["cbb"] = {"Cabiyarí"},
["cbc"] = {"Carapana"},
["cbd"] = {"Carijona"},
["cbg"] = {"Chimila"},
["cbi"] = {"Chachi"},
["cbj"] = {"Ede Cabe"},
["cbk"] = {"Chavacano"},
["cbl"] = {"Bualkhaw Chin"},
["cbn"] = {"Nyahkur"},
["cbo"] = {"Izora"},
["cbq"] = {"Tsucuba", "Cuba"},
["cbr"] = {"Cashibo-Cacataibo"},
["cbs"] = {"Cashinahua"},
["cbt"] = {"Chayahuita"},
["cbu"] = {"Candoshi-Shapra"},
["cbv"] = {"Cacua"},
["cbw"] = {"Kinabalian"},
["cby"] = {"Carabayo"},
["ccc"] = {"Chamicuro"},
["ccd"] = {"Cafundo Creole"},
["cce"] = {"Chopi"},
["ccg"] = {"Samba Daka"},
["cch"] = {"Atsam"},
["ccj"] = {"Kasanga"},
["ccl"] = {"Cutchi-Swahili"},
["ccm"] = {"Malaccan Creole Malay"},
["ccn"] = {"North Caucasian languages"},
["cco"] = {"Comaltepec Chinantec"},
["ccp"] = {"Chakma"},
["ccr"] = {"Cacaopera"},
["ccs"] = {"South Caucasian languages"},
["cda"] = {"Choni"},
["cdc"] = {"Chadic languages"},
["cdd"] = {"Caddoan languages"},
["cde"] = {"Chenchu"},
["cdf"] = {"Chiru"},
["cdh"] = {"Chambeali"},
["cdi"] = {"Chodri"},
["cdj"] = {"Churahi"},
["cdm"] = {"Chepang"},
["cdn"] = {"Chaudangsi"},
["cdo"] = {"Min Dong Chinese"},
["cdr"] = {"Cinda-Regi-Tiyal"},
["cds"] = {"Chadian Sign Language"},
["cdy"] = {"Chadong"},
["cdz"] = {"Koda"},
["cea"] = {"Lower Chehalis"},
["ceb"] = {"Cebuano"},
["ceg"] = {"Chamacoco"},
["cek"] = {"Eastern Khumi Chin"},
["cel"] = {"Celtic languages"},
["cen"] = {"Cen"},
["cet"] = {"Centúúm"},
["cey"] = {"Ekai Chin"},
["cfa"] = {"Dijim-Bwilim"},
["cfd"] = {"Cara"},
["cfg"] = {"Como Karim"},
["cfm"] = {"Falam Chin"},
["cga"] = {"Changriwa"},
["cgc"] = {"Kagayanen"},
["cgg"] = {"Chiga"},
["cgk"] = {"Chocangacakha"},
["chb"] = {"Chibcha"},
["chc"] = {"Catawba"},
["chd"] = {"Highland Oaxaca Chontal"},
["chf"] = {"Tabasco Chontal"},
["chg"] = {"Chagatai"},
["chh"] = {"Chinook"},
["chj"] = {"Ojitlán Chinantec"},
["chk"] = {"Chuukese"},
["chl"] = {"Cahuilla"},
["chm"] = {"Mari (Russia)"},
["chn"] = {"Chinook jargon"},
["cho"] = {"Choctaw"},
["chp"] = {"Chipewyan", "Dene Suline"},
["chq"] = {"Quiotepec Chinantec"},
["chr"] = {"Cherokee"},
["cht"] = {"Cholón"},
["chw"] = {"Chuwabu"},
["chx"] = {"Chantyal"},
["chy"] = {"Cheyenne"},
["chz"] = {"Ozumacín Chinantec"},
["cia"] = {"Cia-Cia"},
["cib"] = {"Ci Gbe"},
["cic"] = {"Chickasaw"},
["cid"] = {"Chimariko"},
["cie"] = {"Cineni"},
["cih"] = {"Chinali"},
["cik"] = {"Chitkuli Kinnauri"},
["cim"] = {"Cimbrian"},
["cin"] = {"Cinta Larga"},
["cip"] = {"Chiapanec"},
["cir"] = {"Tiri", "Haméa", "Méa"},
["ciw"] = {"Chippewa"},
["ciy"] = {"Chaima"},
["cja"] = {"Western Cham"},
["cje"] = {"Chru"},
["cjh"] = {"Upper Chehalis"},
["cji"] = {"Chamalal"},
["cjk"] = {"Chokwe"},
["cjm"] = {"Eastern Cham"},
["cjn"] = {"Chenapian"},
["cjo"] = {"Ashéninka Pajonal"},
["cjp"] = {"Cabécar"},
["cjs"] = {"Shor"},
["cjv"] = {"Chuave"},
["cjy"] = {"Jinyu Chinese"},
["ckb"] = {"Central Kurdish"},
["ckh"] = {"Chak"},
["ckl"] = {"Cibak"},
["ckm"] = {"Chakavian"},
["ckn"] = {"Kaang Chin"},
["cko"] = {"Anufo"},
["ckq"] = {"Kajakse"},
["ckr"] = {"Kairak"},
["cks"] = {"Tayo"},
["ckt"] = {"Chukot"},
["cku"] = {"Koasati"},
["ckv"] = {"Kavalan"},
["ckx"] = {"Caka"},
["cky"] = {"Cakfem-Mushere"},
["ckz"] = {"Cakchiquel-Quiché Mixed Language"},
["cla"] = {"Ron"},
["clc"] = {"Chilcotin"},
["cld"] = {"Chaldean Neo-Aramaic"},
["cle"] = {"Lealao Chinantec"},
["clh"] = {"Chilisso"},
["cli"] = {"Chakali"},
["clj"] = {"Laitu Chin"},
["clk"] = {"Idu-Mishmi"},
["cll"] = {"Chala"},
["clm"] = {"Clallam"},
["clo"] = {"Lowland Oaxaca Chontal"},
["clt"] = {"Lautu Chin"},
["clu"] = {"Caluyanun"},
["clw"] = {"Chulym"},
["cly"] = {"Eastern Highland Chatino"},
["cma"] = {"Maa"},
["cmc"] = {"Chamic languages"},
["cme"] = {"Cerma"},
["cmg"] = {"Classical Mongolian"},
["cmi"] = {"Emberá-Chamí"},
["cml"] = {"Campalagian"},
["cmm"] = {"Michigamea"},
["cmn"] = {"Mandarin Chinese"},
["cmo"] = {"Central Mnong"},
["cmr"] = {"Mro-Khimi Chin"},
["cms"] = {"Messapic"},
["cmt"] = {"Camtho"},
["cna"] = {"Changthang"},
["cnb"] = {"Chinbon Chin"},
["cnc"] = {"Côông"},
["cng"] = {"Northern Qiang"},
["cnh"] = {"Hakha Chin", "Haka Chin"},
["cni"] = {"Asháninka"},
["cnk"] = {"Khumi Chin"},
["cnl"] = {"Lalana Chinantec"},
["cno"] = {"Con"},
["cnp"] = {"Northern Ping Chinese", "Northern Pinghua"},
["cnq"] = {"Chung"},
["cnr"] = {"Montenegrin"},
["cns"] = {"Central Asmat"},
["cnt"] = {"Tepetotutla Chinantec"},
["cnu"] = {"Chenoua"},
["cnw"] = {"Ngawn Chin"},
["cnx"] = {"Middle Cornish"},
["coa"] = {"Cocos Islands Malay"},
["cob"] = {"Chicomuceltec"},
["coc"] = {"Cocopa"},
["cod"] = {"Cocama-Cocamilla"},
["coe"] = {"Koreguaje"},
["cof"] = {"Colorado"},
["cog"] = {"Chong"},
["coh"] = {"Chonyi-Dzihana-Kauma", "Chichonyi-Chidzihana-Chikauma"},
["coj"] = {"Cochimi"},
["cok"] = {"Santa Teresa Cora"},
["col"] = {"Columbia-Wenatchi"},
["com"] = {"Comanche"},
["con"] = {"Cofán"},
["coo"] = {"Comox"},
["cop"] = {"Coptic"},
["coq"] = {"Coquille"},
["cot"] = {"Caquinte"},
["cou"] = {"Wamey"},
["cov"] = {"Cao Miao"},
["cow"] = {"Cowlitz"},
["cox"] = {"Nanti"},
["coz"] = {"Chochotec"},
["cpa"] = {"Palantla Chinantec"},
["cpb"] = {"Ucayali-Yurúa Ashéninka"},
["cpc"] = {"Ajyíninka Apurucayali"},
["cpe"] = {"English-based creoles and pidgins"},
["cpf"] = {"French-based creoles and pidgins"},
["cpg"] = {"Cappadocian Greek"},
["cpi"] = {"Chinese Pidgin English"},
["cpn"] = {"Cherepon"},
["cpo"] = {"Kpeego"},
["cpp"] = {"Portuguese-based creoles and pidgins"},
["cps"] = {"Capiznon"},
["cpu"] = {"Pichis Ashéninka"},
["cpx"] = {"Pu-Xian Chinese"},
["cpy"] = {"South Ucayali Ashéninka"},
["cqd"] = {"Chuanqiandian Cluster Miao"},
["cra"] = {"Chara"},
["crb"] = {"Island Carib"},
["crc"] = {"Lonwolwol"},
["crd"] = {"Coeur d'Alene"},
["crf"] = {"Caramanta"},
["crg"] = {"Michif"},
["crh"] = {"Crimean Tatar", "Crimean Turkish"},
["cri"] = {"Sãotomense"},
["crj"] = {"Southern East Cree"},
["crk"] = {"Plains Cree"},
["crl"] = {"Northern East Cree"},
["crm"] = {"Moose Cree"},
["crn"] = {"El Nayar Cora"},
["cro"] = {"Crow"},
["crp"] = {"Creoles and pidgins"},
["crq"] = {"Iyo'wujwa Chorote"},
["crr"] = {"Carolina Algonquian"},
["crs"] = {"Seselwa Creole French"},
["crt"] = {"Iyojwa'ja Chorote"},
["crv"] = {"Chaura"},
["crw"] = {"Chrau"},
["crx"] = {"Carrier"},
["cry"] = {"Cori"},
["crz"] = {"Cruzeño"},
["csa"] = {"Chiltepec Chinantec"},
["csb"] = {"Kashubian"},
["csc"] = {"Catalan Sign Language", "Lengua de señas catalana", "Llengua de Signes Catalana"},
["csd"] = {"Chiangmai Sign Language"},
["cse"] = {"Czech Sign Language"},
["csf"] = {"Cuba Sign Language"},
["csg"] = {"Chilean Sign Language"},
["csh"] = {"Asho Chin"},
["csi"] = {"Coast Miwok"},
["csj"] = {"Songlai Chin"},
["csk"] = {"Jola-Kasa"},
["csl"] = {"Chinese Sign Language"},
["csm"] = {"Central Sierra Miwok"},
["csn"] = {"Colombian Sign Language"},
["cso"] = {"Sochiapam Chinantec", "Sochiapan Chinantec"},
["csp"] = {"Southern Ping Chinese", "Southern Pinghua"},
["csq"] = {"Croatia Sign Language"},
["csr"] = {"Costa Rican Sign Language"},
["css"] = {"Southern Ohlone"},
["cst"] = {"Northern Ohlone"},
["csu"] = {"Central Sudanic languages"},
["csv"] = {"Sumtu Chin"},
["csw"] = {"Swampy Cree"},
["csx"] = {"Cambodian Sign Language"},
["csy"] = {"Siyin Chin"},
["csz"] = {"Coos"},
["cta"] = {"Tataltepec Chatino"},
["ctc"] = {"Chetco"},
["ctd"] = {"Tedim Chin"},
["cte"] = {"Tepinapa Chinantec"},
["ctg"] = {"Chittagonian"},
["cth"] = {"Thaiphum Chin"},
["ctl"] = {"Tlacoatzintepec Chinantec"},
["ctm"] = {"Chitimacha"},
["ctn"] = {"Chhintange"},
["cto"] = {"Emberá-Catío"},
["ctp"] = {"Western Highland Chatino"},
["cts"] = {"Northern Catanduanes Bikol"},
["ctt"] = {"Wayanad Chetti"},
["ctu"] = {"Chol"},
["cty"] = {"Moundadan Chetty"},
["ctz"] = {"Zacatepec Chatino"},
["cua"] = {"Cua"},
["cub"] = {"Cubeo"},
["cuc"] = {"Usila Chinantec"},
["cuh"] = {"Chuka", "Gichuka"},
["cui"] = {"Cuiba"},
["cuj"] = {"Mashco Piro"},
["cuk"] = {"San Blas Kuna"},
["cul"] = {"Culina", "Kulina"},
["cuo"] = {"Cumanagoto"},
["cup"] = {"Cupeño"},
["cuq"] = {"Cun"},
["cur"] = {"Chhulung"},
["cus"] = {"Cushitic languages"},
["cut"] = {"Teutila Cuicatec"},
["cuu"] = {"Tai Ya"},
["cuv"] = {"Cuvok"},
["cuw"] = {"Chukwa"},
["cux"] = {"Tepeuxila Cuicatec"},
["cuy"] = {"Cuitlatec"},
["cvg"] = {"Chug"},
["cvn"] = {"Valle Nacional Chinantec"},
["cwa"] = {"Kabwa"},
["cwb"] = {"Maindo"},
["cwd"] = {"Woods Cree"},
["cwe"] = {"Kwere"},
["cwg"] = {"Chewong", "Cheq Wong"},
["cwt"] = {"Kuwaataay"},
["cxh"] = {"Cha'ari"},
["cya"] = {"Nopala Chatino"},
["cyb"] = {"Cayubaba"},
["cyo"] = {"Cuyonon"},
["czh"] = {"Huizhou Chinese"},
["czk"] = {"Knaanic"},
["czn"] = {"Zenzontepec Chatino"},
["czo"] = {"Min Zhong Chinese"},
["czt"] = {"Zotung Chin"},
["daa"] = {"Dangaléat"},
["dac"] = {"Dambi"},
["dad"] = {"Marik"},
["dae"] = {"Duupa"},
["dag"] = {"Dagbani"},
["dah"] = {"Gwahatike"},
["dai"] = {"Day"},
["daj"] = {"Dar Fur Daju"},
["dak"] = {"Dakota"},
["dal"] = {"Dahalo"},
["dam"] = {"Damakawa"},
["dao"] = {"Daai Chin"},
["daq"] = {"Dandami Maria"},
["dar"] = {"Dargwa"},
["das"] = {"Daho-Doo"},
["dau"] = {"Dar Sila Daju"},
["dav"] = {"Taita", "Dawida"},
["daw"] = {"Davawenyo"},
["dax"] = {"Dayi"},
["day"] = {"Land Dayak languages"},
["daz"] = {"Dao"},
["dba"] = {"Bangime"},
["dbb"] = {"Deno"},
["dbd"] = {"Dadiya"},
["dbe"] = {"Dabe"},
["dbf"] = {"Edopi"},
["dbg"] = {"Dogul Dom Dogon"},
["dbi"] = {"Doka"},
["dbj"] = {"Ida'an"},
["dbl"] = {"Dyirbal"},
["dbm"] = {"Duguri"},
["dbn"] = {"Duriankere"},
["dbo"] = {"Dulbu"},
["dbp"] = {"Duwai"},
["dbq"] = {"Daba"},
["dbr"] = {"Dabarre"},
["dbt"] = {"Ben Tey Dogon"},
["dbu"] = {"Bondum Dom Dogon"},
["dbv"] = {"Dungu"},
["dbw"] = {"Bankan Tey Dogon"},
["dby"] = {"Dibiyaso"},
["dcc"] = {"Deccan"},
["dcr"] = {"Negerhollands"},
["dda"] = {"Dadi Dadi"},
["ddd"] = {"Dongotono"},
["dde"] = {"Doondo"},
["ddg"] = {"Fataluku"},
["ddi"] = {"West Goodenough"},
["ddj"] = {"Jaru"},
["ddn"] = {"Dendi (Benin)"},
["ddo"] = {"Dido"},
["ddr"] = {"Dhudhuroa"},
["dds"] = {"Donno So Dogon"},
["ddw"] = {"Dawera-Daweloor"},
["dec"] = {"Dagik"},
["ded"] = {"Dedua"},
["dee"] = {"Dewoin"},
["def"] = {"Dezfuli"},
["deg"] = {"Degema"},
["deh"] = {"Dehwari"},
["dei"] = {"Demisa"},
["dek"] = {"Dek"},
["del"] = {"Delaware"},
["dem"] = {"Dem"},
["den"] = {"Slave (Athapascan)"},
["dep"] = {"Pidgin Delaware"},
["deq"] = {"Dendi (Central African Republic)"},
["der"] = {"Deori"},
["des"] = {"Desano"},
["dev"] = {"Domung"},
["dez"] = {"Dengese"},
["dga"] = {"Southern Dagaare"},
["dgb"] = {"Bunoge Dogon"},
["dgc"] = {"Casiguran Dumagat Agta"},
["dgd"] = {"Dagaari Dioula"},
["dge"] = {"Degenan"},
["dgg"] = {"Doga"},
["dgh"] = {"Dghwede"},
["dgi"] = {"Northern Dagara"},
["dgk"] = {"Dagba"},
["dgl"] = {"Andaandi", "Dongolawi"},
["dgn"] = {"Dagoman"},
["dgo"] = {"Dogri (individual language)"},
["dgr"] = {"Dogrib", "Tłı̨chǫ"},
["dgs"] = {"Dogoso"},
["dgt"] = {"Ndra'ngith"},
["dgw"] = {"Daungwurrung"},
["dgx"] = {"Doghoro"},
["dgz"] = {"Daga"},
["dhd"] = {"Dhundari"},
["dhg"] = {"Dhangu-Djangu", "Dhangu", "Djangu"},
["dhi"] = {"Dhimal"},
["dhl"] = {"Dhalandji"},
["dhm"] = {"Zemba"},
["dhn"] = {"Dhanki"},
["dho"] = {"Dhodia"},
["dhr"] = {"Dhargari"},
["dhs"] = {"Dhaiso"},
["dhu"] = {"Dhurga"},
["dhv"] = {"Dehu", "Drehu"},
["dhw"] = {"Dhanwar (Nepal)"},
["dhx"] = {"Dhungaloo"},
["dia"] = {"Dia"},
["dib"] = {"South Central Dinka"},
["dic"] = {"Lakota Dida"},
["did"] = {"Didinga"},
["dif"] = {"Dieri", "Diyari"},
["dig"] = {"Digo", "Chidigo"},
["dih"] = {"Kumiai"},
["dii"] = {"Dimbong"},
["dij"] = {"Dai"},
["dik"] = {"Southwestern Dinka"},
["dil"] = {"Dilling"},
["dim"] = {"Dime"},
["din"] = {"Dinka"},
["dio"] = {"Dibo"},
["dip"] = {"Northeastern Dinka"},
["diq"] = {"Dimli (individual language)"},
["dir"] = {"Dirim"},
["dis"] = {"Dimasa"},
["diu"] = {"Diriku"},
["diw"] = {"Northwestern Dinka"},
["dix"] = {"Dixon Reef"},
["diy"] = {"Diuwe"},
["diz"] = {"Ding"},
["dja"] = {"Djadjawurrung"},
["djb"] = {"Djinba"},
["djc"] = {"Dar Daju Daju"},
["djd"] = {"Djamindjung", "Ngaliwurru"},
["dje"] = {"Zarma"},
["djf"] = {"Djangun"},
["dji"] = {"Djinang"},
["djj"] = {"Djeebbana"},
["djk"] = {"Eastern Maroon Creole", "Businenge Tongo", "Nenge"},
["djm"] = {"Jamsay Dogon"},
["djn"] = {"Jawoyn", "Djauan"},
["djo"] = {"Jangkang"},
["djr"] = {"Djambarrpuyngu"},
["dju"] = {"Kapriman"},
["djw"] = {"Djawi"},
["dka"] = {"Dakpakha"},
["dkg"] = {"Kadung"},
["dkk"] = {"Dakka"},
["dkr"] = {"Kuijau"},
["dks"] = {"Southeastern Dinka"},
["dkx"] = {"Mazagway"},
["dlg"] = {"Dolgan"},
["dlk"] = {"Dahalik"},
["dlm"] = {"Dalmatian"},
["dln"] = {"Darlong"},
["dma"] = {"Duma"},
["dmb"] = {"Mombo Dogon"},
["dmc"] = {"Gavak"},
["dmd"] = {"Madhi Madhi"},
["dme"] = {"Dugwor"},
["dmf"] = {"Medefaidrin"},
["dmg"] = {"Upper Kinabatangan"},
["dmk"] = {"Domaaki"},
["dml"] = {"Dameli"},
["dmm"] = {"Dama"},
["dmn"] = {"Mande languages"},
["dmo"] = {"Kemedzung"},
["dmr"] = {"East Damar"},
["dms"] = {"Dampelas"},
["dmu"] = {"Dubu", "Tebi"},
["dmv"] = {"Dumpas"},
["dmw"] = {"Mudburra"},
["dmx"] = {"Dema"},
["dmy"] = {"Demta", "Sowari"},
["dna"] = {"Upper Grand Valley Dani"},
["dnd"] = {"Daonda"},
["dne"] = {"Ndendeule"},
["dng"] = {"Dungan"},
["dni"] = {"Lower Grand Valley Dani"},
["dnj"] = {"Dan"},
["dnk"] = {"Dengka"},
["dnn"] = {"Dzùùngoo"},
["dno"] = {"Ndrulo", "Northern Lendu"},
["dnr"] = {"Danaru"},
["dnt"] = {"Mid Grand Valley Dani"},
["dnu"] = {"Danau"},
["dnv"] = {"Danu"},
["dnw"] = {"Western Dani"},
["dny"] = {"Dení"},
["doa"] = {"Dom"},
["dob"] = {"Dobu"},
["doc"] = {"Northern Dong"},
["doe"] = {"Doe"},
["dof"] = {"Domu"},
["doh"] = {"Dong"},
["doi"] = {"Dogri (macrolanguage)"},
["dok"] = {"Dondo"},
["dol"] = {"Doso"},
["don"] = {"Toura (Papua New Guinea)"},
["doo"] = {"Dongo"},
["dop"] = {"Lukpa"},
["doq"] = {"Dominican Sign Language"},
["dor"] = {"Dori'o"},
["dos"] = {"Dogosé"},
["dot"] = {"Dass"},
["dov"] = {"Dombe"},
["dow"] = {"Doyayo"},
["dox"] = {"Bussa"},
["doy"] = {"Dompo"},
["doz"] = {"Dorze"},
["dpp"] = {"Papar"},
["dra"] = {"Dravidian languages"},
["drb"] = {"Dair"},
["drc"] = {"Minderico"},
["drd"] = {"Darmiya"},
["dre"] = {"Dolpo"},
["drg"] = {"Rungus"},
["dri"] = {"C'Lela"},
["drl"] = {"Paakantyi"},
["drn"] = {"West Damar"},
["dro"] = {"Daro-Matu Melanau"},
["drq"] = {"Dura"},
["drs"] = {"Gedeo"},
["drt"] = {"Drents"},
["dru"] = {"Rukai"},
["dry"] = {"Darai"},
["dsb"] = {"Lower Sorbian"},
["dse"] = {"Dutch Sign Language"},
["dsh"] = {"Daasanach"},
["dsi"] = {"Disa"},
["dsk"] = {"Dokshi"},
["dsl"] = {"Danish Sign Language"},
["dsn"] = {"Dusner"},
["dso"] = {"Desiya"},
["dsq"] = {"Tadaksahak"},
["dsz"] = {"Mardin Sign Language"},
["dta"] = {"Daur"},
["dtb"] = {"Labuk-Kinabatangan Kadazan"},
["dtd"] = {"Ditidaht"},
["dth"] = {"Adithinngithigh"},
["dti"] = {"Ana Tinga Dogon"},
["dtk"] = {"Tene Kan Dogon"},
["dtm"] = {"Tomo Kan Dogon"},
["dtn"] = {"Daatsʼíin"},
["dto"] = {"Tommo So Dogon"},
["dtp"] = {"Kadazan Dusun", "Central Dusun"},
["dtr"] = {"Lotud"},
["dts"] = {"Toro So Dogon"},
["dtt"] = {"Toro Tegu Dogon"},
["dtu"] = {"Tebul Ure Dogon"},
["dty"] = {"Dotyali"},
["dua"] = {"Duala"},
["dub"] = {"Dubli"},
["duc"] = {"Duna"},
["due"] = {"Umiray Dumaget Agta"},
["duf"] = {"Dumbea", "Drubea"},
["dug"] = {"Duruma", "Chiduruma"},
["duh"] = {"Dungra Bhil"},
["dui"] = {"Dumun"},
["duk"] = {"Uyajitaya"},
["dul"] = {"Alabat Island Agta"},
["dum"] = {"Middle Dutch (ca. 1050-1350)"},
["dun"] = {"Dusun Deyah"},
["duo"] = {"Dupaninan Agta"},
["dup"] = {"Duano"},
["duq"] = {"Dusun Malang"},
["dur"] = {"Dii"},
["dus"] = {"Dumi"},
["duu"] = {"Drung"},
["duv"] = {"Duvle"},
["duw"] = {"Dusun Witu"},
["dux"] = {"Duungooma"},
["duy"] = {"Dicamay Agta"},
["duz"] = {"Duli-Gey"},
["dva"] = {"Duau"},
["dwa"] = {"Diri"},
["dwk"] = {"Dawik Kui"},
["dwr"] = {"Dawro"},
["dws"] = {"Dutton World Speedwords"},
["dwu"] = {"Dhuwal"},
["dww"] = {"Dawawa"},
["dwy"] = {"Dhuwaya"},
["dwz"] = {"Dewas Rai"},
["dya"] = {"Dyan"},
["dyb"] = {"Dyaberdyaber"},
["dyd"] = {"Dyugun"},
["dyg"] = {"Villa Viciosa Agta"},
["dyi"] = {"Djimini Senoufo"},
["dym"] = {"Yanda Dom Dogon"},
["dyn"] = {"Dyangadi", "Dhanggatti"},
["dyo"] = {"Jola-Fonyi"},
["dyr"] = {"Dyarim"},
["dyu"] = {"Dyula"},
["dyy"] = {"Djabugay", "Dyaabugay"},
["dza"] = {"Tunzu"},
["dzd"] = {"Daza"},
["dze"] = {"Djiwarli"},
["dzg"] = {"Dazaga"},
["dzl"] = {"Dzalakha"},
["dzn"] = {"Dzando"},
["eaa"] = {"Karenggapa"},
["ebc"] = {"Beginci"},
["ebg"] = {"Ebughu"},
["ebk"] = {"Eastern Bontok"},
["ebo"] = {"Teke-Ebo"},
["ebr"] = {"Ebrié"},
["ebu"] = {"Embu", "Kiembu"},
["ecr"] = {"Eteocretan"},
["ecs"] = {"Ecuadorian Sign Language"},
["ecy"] = {"Eteocypriot"},
["eee"] = {"E"},
["efa"] = {"Efai"},
["efe"] = {"Efe"},
["efi"] = {"Efik"},
["ega"] = {"Ega"},
["egl"] = {"Emilian"},
["egm"] = {"Benamanga"},
["ego"] = {"Eggon"},
["egx"] = {"Egyptian languages"},
["egy"] = {"Egyptian (Ancient)"},
["ehs"] = {"Miyakubo Sign Language"},
["ehu"] = {"Ehueun"},
["eip"] = {"Eipomek"},
["eit"] = {"Eitiep"},
["eiv"] = {"Askopan"},
["eja"] = {"Ejamat"},
["eka"] = {"Ekajuk"},
["eke"] = {"Ekit"},
["ekg"] = {"Ekari"},
["eki"] = {"Eki"},
["ekk"] = {"Standard Estonian"},
["ekl"] = {"Kol (Bangladesh)", "Kol"},
["ekm"] = {"Elip"},
["eko"] = {"Koti"},
["ekp"] = {"Ekpeye"},
["ekr"] = {"Yace"},
["eky"] = {"Eastern Kayah"},
["ele"] = {"Elepi"},
["elh"] = {"El Hugeirat"},
["eli"] = {"Nding"},
["elk"] = {"Elkei"},
["elm"] = {"Eleme"},
["elo"] = {"El Molo"},
["elu"] = {"Elu"},
["elx"] = {"Elamite"},
["ema"] = {"Emai-Iuleha-Ora"},
["emb"] = {"Embaloh"},
["eme"] = {"Emerillon"},
["emg"] = {"Eastern Meohang"},
["emi"] = {"Mussau-Emira"},
["emk"] = {"Eastern Maninkakan"},
["emm"] = {"Mamulique"},
["emn"] = {"Eman"},
["emp"] = {"Northern Emberá"},
["emq"] = {"Eastern Minyag"},
["ems"] = {"Pacific Gulf Yupik"},
["emu"] = {"Eastern Muria"},
["emw"] = {"Emplawas"},
["emx"] = {"Erromintxela"},
["emy"] = {"Epigraphic Mayan"},
["emz"] = {"Mbessa"},
["ena"] = {"Apali"},
["enb"] = {"Markweeta"},
["enc"] = {"En"},
["end"] = {"Ende"},
["enf"] = {"Forest Enets"},
["enh"] = {"Tundra Enets"},
["enl"] = {"Enlhet"},
["enm"] = {"Middle English (1100-1500)"},
["enn"] = {"Engenni"},
["eno"] = {"Enggano"},
["enq"] = {"Enga"},
["enr"] = {"Emumu", "Emem"},
["enu"] = {"Enu"},
["env"] = {"Enwan (Edo State)"},
["enw"] = {"Enwan (Akwa Ibom State)"},
["enx"] = {"Enxet"},
["eot"] = {"Beti (Côte d'Ivoire)"},
["epi"] = {"Epie"},
["era"] = {"Eravallan"},
["erg"] = {"Sie"},
["erh"] = {"Eruwa"},
["eri"] = {"Ogea"},
["erk"] = {"South Efate"},
["ero"] = {"Horpa"},
["err"] = {"Erre"},
["ers"] = {"Ersu"},
["ert"] = {"Eritai"},
["erw"] = {"Erokwanas"},
["ese"] = {"Ese Ejja"},
["esg"] = {"Aheri Gondi"},
["esh"] = {"Eshtehardi"},
["esi"] = {"North Alaskan Inupiatun"},
["esk"] = {"Northwest Alaska Inupiatun"},
["esl"] = {"Egypt Sign Language"},
["esm"] = {"Esuma"},
["esn"] = {"Salvadoran Sign Language"},
["eso"] = {"Estonian Sign Language"},
["esq"] = {"Esselen"},
["ess"] = {"Central Siberian Yupik"},
["esu"] = {"Central Yupik"},
["esx"] = {"Eskimo-Aleut languages"},
["esy"] = {"Eskayan"},
["etb"] = {"Etebi"},
["etc"] = {"Etchemin"},
["eth"] = {"Ethiopian Sign Language"},
["etn"] = {"Eton (Vanuatu)"},
["eto"] = {"Eton (Cameroon)"},
["etr"] = {"Edolo"},
["ets"] = {"Yekhee"},
["ett"] = {"Etruscan"},
["etu"] = {"Ejagham"},
["etx"] = {"Eten"},
["etz"] = {"Semimi"},
["eud"] = {"Eudeve"},
["euq"] = {"Basque (family)"},
["eve"] = {"Even"},
["evh"] = {"Uvbie"},
["evn"] = {"Evenki"},
["ewo"] = {"Ewondo"},
["ext"] = {"Extremaduran"},
["eya"] = {"Eyak"},
["eyo"] = {"Keiyo"},
["eza"] = {"Ezaa"},
["eze"] = {"Uzekwe"},
["faa"] = {"Fasu"},
["fab"] = {"Fa d'Ambu"},
["fad"] = {"Wagi"},
["faf"] = {"Fagani"},
["fag"] = {"Finongan"},
["fah"] = {"Baissa Fali"},
["fai"] = {"Faiwol"},
["faj"] = {"Faita"},
["fak"] = {"Fang (Cameroon)"},
["fal"] = {"South Fali"},
["fam"] = {"Fam"},
["fan"] = {"Fang (Equatorial Guinea)"},
["fap"] = {"Paloor"},
["far"] = {"Fataleka"},
["fat"] = {"Fanti"},
["fau"] = {"Fayu"},
["fax"] = {"Fala"},
["fay"] = {"Southwestern Fars"},
["faz"] = {"Northwestern Fars"},
["fbl"] = {"West Albay Bikol"},
["fcs"] = {"Quebec Sign Language"},
["fer"] = {"Feroge"},
["ffi"] = {"Foia Foia"},
["ffm"] = {"Maasina Fulfulde"},
["fgr"] = {"Fongoro"},
["fia"] = {"Nobiin"},
["fie"] = {"Fyer"},
["fif"] = {"Faifi"},
["fil"] = {"Filipino", "Pilipino"},
["fip"] = {"Fipa"},
["fir"] = {"Firan"},
["fit"] = {"Tornedalen Finnish", "Meänkieli"},
["fiu"] = {"Finno-Ugrian languages"},
["fiw"] = {"Fiwaga"},
["fkk"] = {"Kirya-Konzəl"},
["fkv"] = {"Kven Finnish"},
["fla"] = {"Kalispel-Pend d'Oreille"},
["flh"] = {"Foau"},
["fli"] = {"Fali"},
["fll"] = {"North Fali"},
["fln"] = {"Flinders Island"},
["flr"] = {"Fuliiru"},
["fly"] = {"Flaaitaal", "Tsotsitaal"},
["fmp"] = {"Fe'fe'"},
["fmu"] = {"Far Western Muria"},
["fnb"] = {"Fanbak"},
["fng"] = {"Fanagalo"},
["fni"] = {"Fania"},
["fod"] = {"Foodo"},
["foi"] = {"Foi"},
["fom"] = {"Foma"},
["fon"] = {"Fon"},
["for"] = {"Fore"},
["fos"] = {"Siraya"},
["fox"] = {"Formosan languages"},
["fpe"] = {"Fernando Po Creole English"},
["fqs"] = {"Fas"},
["frc"] = {"Cajun French"},
["frd"] = {"Fordata"},
["frk"] = {"Frankish"},
["frm"] = {"Middle French (ca. 1400-1600)"},
["fro"] = {"Old French (842-ca. 1400)"},
["frp"] = {"Arpitan", "Francoprovençal"},
["frq"] = {"Forak"},
["frr"] = {"Northern Frisian"},
["frs"] = {"Eastern Frisian"},
["frt"] = {"Fortsenal"},
["fse"] = {"Finnish Sign Language"},
["fsl"] = {"French Sign Language"},
["fss"] = {"Finland-Swedish Sign Language", "finlandssvenskt teckenspråk", "suomenruotsalainen viittomakieli"},
["fub"] = {"Adamawa Fulfulde"},
["fuc"] = {"Pulaar"},
["fud"] = {"East Futuna"},
["fue"] = {"Borgu Fulfulde"},
["fuf"] = {"Pular"},
["fuh"] = {"Western Niger Fulfulde"},
["fui"] = {"Bagirmi Fulfulde"},
["fuj"] = {"Ko"},
["fum"] = {"Fum"},
["fun"] = {"Fulniô"},
["fuq"] = {"Central-Eastern Niger Fulfulde"},
["fur"] = {"Friulian"},
["fut"] = {"Futuna-Aniwa"},
["fuu"] = {"Furu"},
["fuv"] = {"Nigerian Fulfulde"},
["fuy"] = {"Fuyug"},
["fvr"] = {"Fur"},
["fwa"] = {"Fwâi"},
["fwe"] = {"Fwe"},
["gaa"] = {"Ga"},
["gab"] = {"Gabri"},
["gac"] = {"Mixed Great Andamanese"},
["gad"] = {"Gaddang"},
["gae"] = {"Guarequena"},
["gaf"] = {"Gende"},
["gag"] = {"Gagauz"},
["gah"] = {"Alekano"},
["gai"] = {"Borei"},
["gaj"] = {"Gadsup"},
["gak"] = {"Gamkonora"},
["gal"] = {"Galolen"},
["gam"] = {"Kandawo"},
["gan"] = {"Gan Chinese"},
["gao"] = {"Gants"},
["gap"] = {"Gal"},
["gaq"] = {"Gata'"},
["gar"] = {"Galeya"},
["gas"] = {"Adiwasi Garasia"},
["gat"] = {"Kenati"},
["gau"] = {"Mudhili Gadaba"},
["gaw"] = {"Nobonob"},
["gax"] = {"Borana-Arsi-Guji Oromo"},
["gay"] = {"Gayo"},
["gaz"] = {"West Central Oromo"},
["gba"] = {"Gbaya (Central African Republic)"},
["gbb"] = {"Kaytetye"},
["gbd"] = {"Karajarri"},
["gbe"] = {"Niksek"},
["gbf"] = {"Gaikundi"},
["gbg"] = {"Gbanziri"},
["gbh"] = {"Defi Gbe"},
["gbi"] = {"Galela"},
["gbj"] = {"Bodo Gadaba"},
["gbk"] = {"Gaddi"},
["gbl"] = {"Gamit"},
["gbm"] = {"Garhwali"},
["gbn"] = {"Mo'da"},
["gbo"] = {"Northern Grebo"},
["gbp"] = {"Gbaya-Bossangoa"},
["gbq"] = {"Gbaya-Bozoum"},
["gbr"] = {"Gbagyi"},
["gbs"] = {"Gbesi Gbe"},
["gbu"] = {"Gagadu"},
["gbv"] = {"Gbanu"},
["gbw"] = {"Gabi-Gabi"},
["gbx"] = {"Eastern Xwla Gbe"},
["gby"] = {"Gbari"},
["gbz"] = {"Zoroastrian Dari"},
["gcc"] = {"Mali"},
["gcd"] = {"Ganggalida"},
["gce"] = {"Galice"},
["gcf"] = {"Guadeloupean Creole French"},
["gcl"] = {"Grenadian Creole English"},
["gcn"] = {"Gaina"},
["gcr"] = {"Guianese Creole French"},
["gct"] = {"Colonia Tovar German"},
["gda"] = {"Gade Lohar"},
["gdb"] = {"Pottangi Ollar Gadaba"},
["gdc"] = {"Gugu Badhun"},
["gdd"] = {"Gedaged"},
["gde"] = {"Gude"},
["gdf"] = {"Guduf-Gava"},
["gdg"] = {"Ga'dang"},
["gdh"] = {"Gadjerawang", "Gajirrabeng"},
["gdi"] = {"Gundi"},
["gdj"] = {"Gurdjar"},
["gdk"] = {"Gadang"},
["gdl"] = {"Dirasha"},
["gdm"] = {"Laal"},
["gdn"] = {"Umanakaina"},
["gdo"] = {"Ghodoberi"},
["gdq"] = {"Mehri"},
["gdr"] = {"Wipi"},
["gds"] = {"Ghandruk Sign Language"},
["gdt"] = {"Kungardutyi"},
["gdu"] = {"Gudu"},
["gdx"] = {"Godwari"},
["gea"] = {"Geruma"},
["geb"] = {"Kire"},
["gec"] = {"Gboloo Grebo"},
["ged"] = {"Gade"},
["gef"] = {"Gerai"},
["geg"] = {"Gengle"},
["geh"] = {"Hutterite German", "Hutterisch"},
["gei"] = {"Gebe"},
["gej"] = {"Gen"},
["gek"] = {"Ywom"},
["gel"] = {"ut-Ma'in"},
["gem"] = {"Germanic languages"},
["geq"] = {"Geme"},
["ges"] = {"Geser-Gorom"},
["gev"] = {"Eviya"},
["gew"] = {"Gera"},
["gex"] = {"Garre"},
["gey"] = {"Enya"},
["gez"] = {"Geez"},
["gfk"] = {"Patpatar"},
["gft"] = {"Gafat"},
["gga"] = {"Gao"},
["ggb"] = {"Gbii"},
["ggd"] = {"Gugadj"},
["gge"] = {"Gurr-goni"},
["ggg"] = {"Gurgula"},
["ggk"] = {"Kungarakany"},
["ggl"] = {"Ganglau"},
["ggt"] = {"Gitua"},
["ggu"] = {"Gagu", "Gban"},
["ggw"] = {"Gogodala"},
["gha"] = {"Ghadamès"},
["ghc"] = {"Hiberno-Scottish Gaelic"},
["ghe"] = {"Southern Ghale"},
["ghh"] = {"Northern Ghale"},
["ghk"] = {"Geko Karen"},
["ghl"] = {"Ghulfan"},
["ghn"] = {"Ghanongga"},
["gho"] = {"Ghomara"},
["ghr"] = {"Ghera"},
["ghs"] = {"Guhu-Samane"},
["ght"] = {"Kuke", "Kutang Ghale"},
["gia"] = {"Kija"},
["gib"] = {"Gibanawa"},
["gic"] = {"Gail"},
["gid"] = {"Gidar"},
["gie"] = {"Gaɓogbo", "Guébie"},
["gig"] = {"Goaria"},
["gih"] = {"Githabul"},
["gii"] = {"Girirra"},
["gil"] = {"Gilbertese"},
["gim"] = {"Gimi (Eastern Highlands)"},
["gin"] = {"Hinukh"},
["gip"] = {"Gimi (West New Britain)"},
["giq"] = {"Green Gelao"},
["gir"] = {"Red Gelao"},
["gis"] = {"North Giziga"},
["git"] = {"Gitxsan"},
["giu"] = {"Mulao"},
["giw"] = {"White Gelao"},
["gix"] = {"Gilima"},
["giy"] = {"Giyug"},
["giz"] = {"South Giziga"},
["gjk"] = {"Kachi Koli"},
["gjm"] = {"Gunditjmara"},
["gjn"] = {"Gonja"},
["gjr"] = {"Gurindji Kriol"},
["gju"] = {"Gujari"},
["gka"] = {"Guya"},
["gkd"] = {"Magɨ (Madang Province)"},
["gke"] = {"Ndai"},
["gkn"] = {"Gokana"},
["gko"] = {"Kok-Nar"},
["gkp"] = {"Guinea Kpelle"},
["gku"] = {"ǂUngkue"},
["glb"] = {"Belning"},
["glc"] = {"Bon Gula"},
["gld"] = {"Nanai"},
["glh"] = {"Northwest Pashai", "Northwest Pashayi"},
["glj"] = {"Gula Iro"},
["glk"] = {"Gilaki"},
["gll"] = {"Garlali"},
["glo"] = {"Galambu"},
["glr"] = {"Glaro-Twabo"},
["glu"] = {"Gula (Chad)"},
["glw"] = {"Glavda"},
["gly"] = {"Gule"},
["gma"] = {"Gambera"},
["gmb"] = {"Gula'alaa"},
["gmd"] = {"Mághdì"},
["gme"] = {"East Germanic languages"},
["gmg"] = {"Magɨyi"},
["gmh"] = {"Middle High German (ca. 1050-1500)"},
["gml"] = {"Middle Low German"},
["gmm"] = {"Gbaya-Mbodomo"},
["gmn"] = {"Gimnime"},
["gmq"] = {"North Germanic languages"},
["gmr"] = {"Mirning", "Mirniny"},
["gmu"] = {"Gumalu"},
["gmv"] = {"Gamo"},
["gmw"] = {"West Germanic languages"},
["gmx"] = {"Magoma"},
["gmy"] = {"Mycenaean Greek"},
["gmz"] = {"Mgbolizhia"},
["gna"] = {"Kaansa"},
["gnb"] = {"Gangte"},
["gnc"] = {"Guanche"},
["gnd"] = {"Zulgo-Gemzek"},
["gne"] = {"Ganang"},
["gng"] = {"Ngangam"},
["gnh"] = {"Lere"},
["gni"] = {"Gooniyandi"},
["gnj"] = {"Ngen"},
["gnk"] = {"ǁGana"},
["gnl"] = {"Gangulu"},
["gnm"] = {"Ginuman"},
["gnn"] = {"Gumatj"},
["gno"] = {"Northern Gondi"},
["gnq"] = {"Gana"},
["gnr"] = {"Gureng Gureng"},
["gnt"] = {"Guntai"},
["gnu"] = {"Gnau"},
["gnw"] = {"Western Bolivian Guaraní"},
["gnz"] = {"Ganzi"},
["goa"] = {"Guro"},
["gob"] = {"Playero"},
["goc"] = {"Gorakor"},
["god"] = {"Godié"},
["goe"] = {"Gongduk"},
["gof"] = {"Gofa"},
["gog"] = {"Gogo"},
["goh"] = {"Old High German (ca. 750-1050)"},
["goi"] = {"Gobasi"},
["goj"] = {"Gowlan"},
["gok"] = {"Gowli"},
["gol"] = {"Gola"},
["gom"] = {"Goan Konkani"},
["gon"] = {"Gondi"},
["goo"] = {"Gone Dau"},
["gop"] = {"Yeretuar"},
["goq"] = {"Gorap"},
["gor"] = {"Gorontalo"},
["gos"] = {"Gronings"},
["got"] = {"Gothic"},
["gou"] = {"Gavar"},
["gov"] = {"Goo"},
["gow"] = {"Gorowa"},
["gox"] = {"Gobu"},
["goy"] = {"Goundo"},
["goz"] = {"Gozarkhani"},
["gpa"] = {"Gupa-Abawa"},
["gpe"] = {"Ghanaian Pidgin English"},
["gpn"] = {"Taiap"},
["gqa"] = {"Ga'anda"},
["gqi"] = {"Guiqiong"},
["gqn"] = {"Guana (Brazil)"},
["gqr"] = {"Gor"},
["gqu"] = {"Qau"},
["gra"] = {"Rajput Garasia"},
["grb"] = {"Grebo"},
["grc"] = {"Ancient Greek (to 1453)"},
["grd"] = {"Guruntum-Mbaaru"},
["grg"] = {"Madi"},
["grh"] = {"Gbiri-Niragu"},
["gri"] = {"Ghari"},
["grj"] = {"Southern Grebo"},
["grk"] = {"Greek languages"},
["grm"] = {"Kota Marudu Talantang"},
["gro"] = {"Groma"},
["grq"] = {"Gorovu"},
["grr"] = {"Taznatit"},
["grs"] = {"Gresi"},
["grt"] = {"Garo"},
["gru"] = {"Kistane"},
["grv"] = {"Central Grebo"},
["grw"] = {"Gweda"},
["grx"] = {"Guriaso"},
["gry"] = {"Barclayville Grebo"},
["grz"] = {"Guramalum"},
["gse"] = {"Ghanaian Sign Language"},
["gsg"] = {"German Sign Language"},
["gsl"] = {"Gusilay"},
["gsm"] = {"Guatemalan Sign Language"},
["gsn"] = {"Nema", "Gusan"},
["gso"] = {"Southwest Gbaya"},
["gsp"] = {"Wasembo"},
["gss"] = {"Greek Sign Language"},
["gsw"] = {"Swiss German", "Alemannic", "Alsatian"},
["gta"] = {"Guató"},
["gtu"] = {"Aghu-Tharnggala"},
["gua"] = {"Shiki"},
["gub"] = {"Guajajára"},
["guc"] = {"Wayuu"},
["gud"] = {"Yocoboué Dida"},
["gue"] = {"Gurindji"},
["guf"] = {"Gupapuyngu"},
["gug"] = {"Paraguayan Guaraní"},
["guh"] = {"Guahibo"},
["gui"] = {"Eastern Bolivian Guaraní"},
["guk"] = {"Gumuz"},
["gul"] = {"Sea Island Creole English"},
["gum"] = {"Guambiano"},
["gun"] = {"Mbyá Guaraní"},
["guo"] = {"Guayabero"},
["gup"] = {"Gunwinggu"},
["guq"] = {"Aché"},
["gur"] = {"Farefare"},
["gus"] = {"Guinean Sign Language"},
["gut"] = {"Maléku Jaíka"},
["guu"] = {"Yanomamö"},
["guw"] = {"Gun"},
["gux"] = {"Gourmanchéma"},
["guz"] = {"Gusii", "Ekegusii"},
["gva"] = {"Guana (Paraguay)"},
["gvc"] = {"Guanano"},
["gve"] = {"Duwet"},
["gvf"] = {"Golin"},
["gvj"] = {"Guajá"},
["gvl"] = {"Gulay"},
["gvm"] = {"Gurmana"},
["gvn"] = {"Kuku-Yalanji"},
["gvo"] = {"Gavião Do Jiparaná"},
["gvp"] = {"Pará Gavião"},
["gvr"] = {"Gurung"},
["gvs"] = {"Gumawana"},
["gvy"] = {"Guyani"},
["gwa"] = {"Mbato"},
["gwb"] = {"Gwa"},
["gwc"] = {"Gawri", "Kalami"},
["gwd"] = {"Gawwada"},
["gwe"] = {"Gweno"},
["gwf"] = {"Gowro"},
["gwg"] = {"Moo"},
["gwi"] = {"Gwichʼin"},
["gwj"] = {"ǀGwi"},
["gwm"] = {"Awngthim"},
["gwn"] = {"Gwandara"},
["gwr"] = {"Gwere"},
["gwt"] = {"Gawar-Bati"},
["gwu"] = {"Guwamu"},
["gww"] = {"Kwini"},
["gwx"] = {"Gua"},
["gxx"] = {"Wè Southern"},
["gya"] = {"Northwest Gbaya"},
["gyb"] = {"Garus"},
["gyd"] = {"Kayardild"},
["gye"] = {"Gyem"},
["gyf"] = {"Gungabula"},
["gyg"] = {"Gbayi"},
["gyi"] = {"Gyele"},
["gyl"] = {"Gayil"},
["gym"] = {"Ngäbere"},
["gyn"] = {"Guyanese Creole English"},
["gyo"] = {"Gyalsumdo"},
["gyr"] = {"Guarayu"},
["gyy"] = {"Gunya"},
["gyz"] = {"Geji", "Gyaazi"},
["gza"] = {"Ganza"},
["gzi"] = {"Gazi"},
["gzn"] = {"Gane"},
["haa"] = {"Han"},
["hab"] = {"Hanoi Sign Language"},
["hac"] = {"Gurani"},
["had"] = {"Hatam"},
["hae"] = {"Eastern Oromo"},
["haf"] = {"Haiphong Sign Language"},
["hag"] = {"Hanga"},
["hah"] = {"Hahon"},
["hai"] = {"Haida"},
["haj"] = {"Hajong"},
["hak"] = {"Hakka Chinese"},
["hal"] = {"Halang"},
["ham"] = {"Hewa"},
["han"] = {"Hangaza"},
["hao"] = {"Hakö"},
["hap"] = {"Hupla"},
["haq"] = {"Ha"},
["har"] = {"Harari"},
["has"] = {"Haisla"},
["hav"] = {"Havu"},
["haw"] = {"Hawaiian"},
["hax"] = {"Southern Haida"},
["hay"] = {"Haya"},
["haz"] = {"Hazaragi"},
["hba"] = {"Hamba"},
["hbb"] = {"Huba"},
["hbn"] = {"Heiban"},
["hbo"] = {"Ancient Hebrew"},
["hbu"] = {"Habu"},
["hca"] = {"Andaman Creole Hindi"},
["hch"] = {"Huichol"},
["hdn"] = {"Northern Haida"},
["hds"] = {"Honduras Sign Language"},
["hdy"] = {"Hadiyya"},
["hea"] = {"Northern Qiandong Miao"},
["hed"] = {"Herdé"},
["heg"] = {"Helong"},
["heh"] = {"Hehe"},
["hei"] = {"Heiltsuk"},
["hem"] = {"Hemba"},
["hgm"] = {"Haiǁom"},
["hgw"] = {"Haigwai"},
["hhi"] = {"Hoia Hoia"},
["hhr"] = {"Kerak"},
["hhy"] = {"Hoyahoya"},
["hia"] = {"Lamang"},
["hib"] = {"Hibito"},
["hid"] = {"Hidatsa"},
["hif"] = {"Fiji Hindi"},
["hig"] = {"Kamwe"},
["hih"] = {"Pamosu"},
["hii"] = {"Hinduri"},
["hij"] = {"Hijuk"},
["hik"] = {"Seit-Kaitetu"},
["hil"] = {"Hiligaynon"},
["him"] = {"Himachali languages", "Western Pahari languages"},
["hio"] = {"Tsoa"},
["hir"] = {"Himarimã"},
["hit"] = {"Hittite"},
["hiw"] = {"Hiw"},
["hix"] = {"Hixkaryána"},
["hji"] = {"Haji"},
["hka"] = {"Kahe"},
["hke"] = {"Hunde"},
["hkh"] = {"Khah", "Poguli"},
["hkk"] = {"Hunjara-Kaina Ke"},
["hkn"] = {"Mel-Khaonh"},
["hks"] = {"Hong Kong Sign Language", "Heung Kong Sau Yue"},
["hla"] = {"Halia"},
["hlb"] = {"Halbi"},
["hld"] = {"Halang Doan"},
["hle"] = {"Hlersu"},
["hlt"] = {"Matu Chin"},
["hlu"] = {"Hieroglyphic Luwian"},
["hma"] = {"Southern Mashan Hmong", "Southern Mashan Miao"},
["hmb"] = {"Humburi Senni Songhay"},
["hmc"] = {"Central Huishui Hmong", "Central Huishui Miao"},
["hmd"] = {"Large Flowery Miao", "A-hmaos", "Da-Hua Miao"},
["hme"] = {"Eastern Huishui Hmong", "Eastern Huishui Miao"},
["hmf"] = {"Hmong Don"},
["hmg"] = {"Southwestern Guiyang Hmong"},
["hmh"] = {"Southwestern Huishui Hmong", "Southwestern Huishui Miao"},
["hmi"] = {"Northern Huishui Hmong", "Northern Huishui Miao"},
["hmj"] = {"Ge", "Gejia"},
["hmk"] = {"Maek"},
["hml"] = {"Luopohe Hmong", "Luopohe Miao"},
["hmm"] = {"Central Mashan Hmong", "Central Mashan Miao"},
["hmn"] = {"Hmong", "Mong"},
["hmp"] = {"Northern Mashan Hmong", "Northern Mashan Miao"},
["hmq"] = {"Eastern Qiandong Miao"},
["hmr"] = {"Hmar"},
["hms"] = {"Southern Qiandong Miao"},
["hmt"] = {"Hamtai"},
["hmu"] = {"Hamap"},
["hmv"] = {"Hmong Dô"},
["hmw"] = {"Western Mashan Hmong", "Western Mashan Miao"},
["hmx"] = {"Hmong-Mien languages"},
["hmy"] = {"Southern Guiyang Hmong", "Southern Guiyang Miao"},
["hmz"] = {"Hmong Shua", "Sinicized Miao"},
["hna"] = {"Mina (Cameroon)"},
["hnd"] = {"Southern Hindko"},
["hne"] = {"Chhattisgarhi"},
["hng"] = {"Hungu"},
["hnh"] = {"ǁAni"},
["hni"] = {"Hani"},
["hnj"] = {"Hmong Njua", "Mong Leng", "Mong Njua"},
["hnn"] = {"Hanunoo"},
["hno"] = {"Northern Hindko"},
["hns"] = {"Caribbean Hindustani"},
["hnu"] = {"Hung"},
["hoa"] = {"Hoava"},
["hob"] = {"Mari (Madang Province)"},
["hoc"] = {"Ho"},
["hod"] = {"Holma"},
["hoe"] = {"Horom"},
["hoh"] = {"Hobyót"},
["hoi"] = {"Holikachuk"},
["hoj"] = {"Hadothi", "Haroti"},
["hok"] = {"Hokan languages"},
["hol"] = {"Holu"},
["hom"] = {"Homa"},
["hoo"] = {"Holoholo"},
["hop"] = {"Hopi"},
["hor"] = {"Horo"},
["hos"] = {"Ho Chi Minh City Sign Language"},
["hot"] = {"Hote", "Malê"},
["hov"] = {"Hovongan"},
["how"] = {"Honi"},
["hoy"] = {"Holiya"},
["hoz"] = {"Hozo"},
["hpo"] = {"Hpon"},
["hps"] = {"Hawai'i Sign Language (HSL)", "Hawai'i Pidgin Sign Language"},
["hra"] = {"Hrangkhol"},
["hrc"] = {"Niwer Mil"},
["hre"] = {"Hre"},
["hrk"] = {"Haruku"},
["hrm"] = {"Horned Miao"},
["hro"] = {"Haroi"},
["hrp"] = {"Nhirrpi"},
["hrt"] = {"Hértevin"},
["hru"] = {"Hruso"},
["hrw"] = {"Warwar Feni"},
["hrx"] = {"Hunsrik"},
["hrz"] = {"Harzani"},
["hsb"] = {"Upper Sorbian"},
["hsh"] = {"Hungarian Sign Language"},
["hsl"] = {"Hausa Sign Language"},
["hsn"] = {"Xiang Chinese"},
["hss"] = {"Harsusi"},
["hti"] = {"Hoti"},
["hto"] = {"Minica Huitoto"},
["hts"] = {"Hadza"},
["htu"] = {"Hitu"},
["htx"] = {"Middle Hittite"},
["hub"] = {"Huambisa"},
["huc"] = {"ǂHua", "ǂʼAmkhoe"},
["hud"] = {"Huaulu"},
["hue"] = {"San Francisco Del Mar Huave"},
["huf"] = {"Humene"},
["hug"] = {"Huachipaeri"},
["huh"] = {"Huilliche"},
["hui"] = {"Huli"},
["huj"] = {"Northern Guiyang Hmong", "Northern Guiyang Miao"},
["huk"] = {"Hulung"},
["hul"] = {"Hula"},
["hum"] = {"Hungana"},
["huo"] = {"Hu"},
["hup"] = {"Hupa"},
["huq"] = {"Tsat"},
["hur"] = {"Halkomelem"},
["hus"] = {"Huastec"},
["hut"] = {"Humla"},
["huu"] = {"Murui Huitoto"},
["huv"] = {"San Mateo Del Mar Huave"},
["huw"] = {"Hukumina"},
["hux"] = {"Nüpode Huitoto"},
["huy"] = {"Hulaulá"},
["huz"] = {"Hunzib"},
["hvc"] = {"Haitian Vodoun Culture Language"},
["hve"] = {"San Dionisio Del Mar Huave"},
["hvk"] = {"Haveke"},
["hvn"] = {"Sabu"},
["hvv"] = {"Santa María Del Mar Huave"},
["hwa"] = {"Wané"},
["hwc"] = {"Hawai'i Creole English", "Hawai'i Pidgin"},
["hwo"] = {"Hwana"},
["hya"] = {"Hya"},
["hyw"] = {"Western Armenian"},
["hyx"] = {"Armenian (family)"},
["iai"] = {"Iaai"},
["ian"] = {"Iatmul"},
["iar"] = {"Purari"},
["iba"] = {"Iban"},
["ibb"] = {"Ibibio"},
["ibd"] = {"Iwaidja"},
["ibe"] = {"Akpes"},
["ibg"] = {"Ibanag"},
["ibh"] = {"Bih"},
["ibl"] = {"Ibaloi"},
["ibm"] = {"Agoi"},
["ibn"] = {"Ibino"},
["ibr"] = {"Ibuoro"},
["ibu"] = {"Ibu"},
["iby"] = {"Ibani"},
["ica"] = {"Ede Ica"},
["ich"] = {"Etkywan"},
["icl"] = {"Icelandic Sign Language"},
["icr"] = {"Islander Creole English"},
["ida"] = {"Idakho-Isukha-Tiriki", "Luidakho-Luisukha-Lutirichi"},
["idb"] = {"Indo-Portuguese"},
["idc"] = {"Idon", "Ajiya"},
["idd"] = {"Ede Idaca"},
["ide"] = {"Idere"},
["idi"] = {"Idi"},
["idr"] = {"Indri"},
["ids"] = {"Idesa"},
["idt"] = {"Idaté"},
["idu"] = {"Idoma"},
["ifa"] = {"Amganad Ifugao"},
["ifb"] = {"Batad Ifugao", "Ayangan Ifugao"},
["ife"] = {"Ifè"},
["iff"] = {"Ifo"},
["ifk"] = {"Tuwali Ifugao"},
["ifm"] = {"Teke-Fuumu"},
["ifu"] = {"Mayoyao Ifugao"},
["ify"] = {"Keley-I Kallahan"},
["igb"] = {"Ebira"},
["ige"] = {"Igede"},
["igg"] = {"Igana"},
["igl"] = {"Igala"},
["igm"] = {"Kanggape"},
["ign"] = {"Ignaciano"},
["igo"] = {"Isebe"},
["igs"] = {"Interglossa"},
["igw"] = {"Igwe"},
["ihb"] = {"Iha Based Pidgin"},
["ihi"] = {"Ihievbe"},
["ihp"] = {"Iha"},
["ihw"] = {"Bidhawal"},
["iin"] = {"Thiin"},
["iir"] = {"Indo-Iranian languages"},
["ijc"] = {"Izon"},
["ije"] = {"Biseni"},
["ijj"] = {"Ede Ije"},
["ijn"] = {"Kalabari"},
["ijo"] = {"Ijo languages"},
["ijs"] = {"Southeast Ijo"},
["ike"] = {"Eastern Canadian Inuktitut"},
["ikh"] = {"Ikhin-Arokho"},
["iki"] = {"Iko"},
["ikk"] = {"Ika"},
["ikl"] = {"Ikulu"},
["iko"] = {"Olulumo-Ikom"},
["ikp"] = {"Ikpeshi"},
["ikr"] = {"Ikaranggal"},
["iks"] = {"Inuit Sign Language"},
["ikt"] = {"Inuinnaqtun", "Western Canadian Inuktitut"},
["ikv"] = {"Iku-Gora-Ankwa"},
["ikw"] = {"Ikwere"},
["ikx"] = {"Ik"},
["ikz"] = {"Ikizu"},
["ila"] = {"Ile Ape"},
["ilb"] = {"Ila"},
["ilg"] = {"Garig-Ilgar"},
["ili"] = {"Ili Turki"},
["ilk"] = {"Ilongot"},
["ilm"] = {"Iranun (Malaysia)"},
["ilo"] = {"Iloko"},
["ilp"] = {"Iranun (Philippines)"},
["ils"] = {"International Sign"},
["ilu"] = {"Ili'uun"},
["ilv"] = {"Ilue"},
["ima"] = {"Mala Malasar"},
["imi"] = {"Anamgura"},
["iml"] = {"Miluk"},
["imn"] = {"Imonda"},
["imo"] = {"Imbongu"},
["imr"] = {"Imroing"},
["ims"] = {"Marsian"},
["imt"] = {"Imotong"},
["imy"] = {"Milyan"},
["inb"] = {"Inga"},
["inc"] = {"Indic languages"},
["ine"] = {"Indo-European languages"},
["ing"] = {"Degexit'an"},
["inh"] = {"Ingush"},
["inj"] = {"Jungle Inga"},
["inl"] = {"Indonesian Sign Language"},
["inm"] = {"Minaean"},
["inn"] = {"Isinai"},
["ino"] = {"Inoke-Yate"},
["inp"] = {"Iñapari"},
["ins"] = {"Indian Sign Language"},
["int"] = {"Intha"},
["inz"] = {"Ineseño"},
["ior"] = {"Inor"},
["iou"] = {"Tuma-Irumu"},
["iow"] = {"Iowa-Oto"},
["ipi"] = {"Ipili"},
["ipo"] = {"Ipiko"},
["iqu"] = {"Iquito"},
["iqw"] = {"Ikwo"},
["ira"] = {"Iranian languages"},
["ire"] = {"Iresim"},
["irh"] = {"Irarutu"},
["iri"] = {"Rigwe", "Irigwe"},
["irk"] = {"Iraqw"},
["irn"] = {"Irántxe"},
["iro"] = {"Iroquoian languages"},
["irr"] = {"Ir"},
["iru"] = {"Irula"},
["irx"] = {"Kamberau"},
["iry"] = {"Iraya"},
["isa"] = {"Isabi"},
["isc"] = {"Isconahua"},
["isd"] = {"Isnag"},
["ise"] = {"Italian Sign Language"},
["isg"] = {"Irish Sign Language"},
["ish"] = {"Esan"},
["isi"] = {"Nkem-Nkum"},
["isk"] = {"Ishkashimi"},
["ism"] = {"Masimasi"},
["isn"] = {"Isanzu"},
["iso"] = {"Isoko"},
["isr"] = {"Israeli Sign Language"},
["ist"] = {"Istriot"},
["isu"] = {"Isu (Menchum Division)"},
["itb"] = {"Binongan Itneg"},
["itc"] = {"Italic languages"},
["itd"] = {"Southern Tidung"},
["ite"] = {"Itene"},
["iti"] = {"Inlaod Itneg"},
["itk"] = {"Judeo-Italian"},
["itl"] = {"Itelmen"},
["itm"] = {"Itu Mbon Uzo"},
["ito"] = {"Itonama"},
["itr"] = {"Iteri"},
["its"] = {"Isekiri"},
["itt"] = {"Maeng Itneg"},
["itv"] = {"Itawit"},
["itw"] = {"Ito"},
["itx"] = {"Itik"},
["ity"] = {"Moyadan Itneg"},
["itz"] = {"Itzá"},
["ium"] = {"Iu Mien"},
["ivb"] = {"Ibatan"},
["ivv"] = {"Ivatan"},
["iwk"] = {"I-Wak"},
["iwm"] = {"Iwam"},
["iwo"] = {"Iwur"},
["iws"] = {"Sepik Iwam"},
["ixc"] = {"Ixcatec"},
["ixl"] = {"Ixil"},
["iya"] = {"Iyayu"},
["iyo"] = {"Mesaka"},
["iyx"] = {"Yaka (Congo)"},
["izh"] = {"Ingrian"},
["izm"] = {"Kizamani"},
["izr"] = {"Izere"},
["izz"] = {"Izii"},
["jaa"] = {"Jamamadí"},
["jab"] = {"Hyam"},
["jac"] = {"Popti'", "Jakalteko"},
["jad"] = {"Jahanka"},
["jae"] = {"Yabem"},
["jaf"] = {"Jara"},
["jah"] = {"Jah Hut"},
["jaj"] = {"Zazao"},
["jak"] = {"Jakun"},
["jal"] = {"Yalahatan"},
["jam"] = {"Jamaican Creole English"},
["jan"] = {"Jandai"},
["jao"] = {"Yanyuwa"},
["jaq"] = {"Yaqay"},
["jas"] = {"New Caledonian Javanese"},
["jat"] = {"Jakati"},
["jau"] = {"Yaur"},
["jax"] = {"Jambi Malay"},
["jay"] = {"Yan-nhangu", "Nhangu"},
["jaz"] = {"Jawe"},
["jbe"] = {"Judeo-Berber"},
["jbi"] = {"Badjiri"},
["jbj"] = {"Arandai"},
["jbk"] = {"Barikewa"},
["jbm"] = {"Bijim"},
["jbn"] = {"Nafusi"},
["jbo"] = {"Lojban"},
["jbr"] = {"Jofotek-Bromnya"},
["jbt"] = {"Jabutí"},
["jbu"] = {"Jukun Takum"},
["jbw"] = {"Yawijibaya"},
["jcs"] = {"Jamaican Country Sign Language"},
["jct"] = {"Krymchak"},
["jda"] = {"Jad"},
["jdg"] = {"Jadgali"},
["jdt"] = {"Judeo-Tat"},
["jeb"] = {"Jebero"},
["jee"] = {"Jerung"},
["jeh"] = {"Jeh"},
["jei"] = {"Yei"},
["jek"] = {"Jeri Kuo"},
["jel"] = {"Yelmek"},
["jen"] = {"Dza"},
["jer"] = {"Jere"},
["jet"] = {"Manem"},
["jeu"] = {"Jonkor Bourmataguil"},
["jgb"] = {"Ngbee"},
["jge"] = {"Judeo-Georgian"},
["jgk"] = {"Gwak"},
["jgo"] = {"Ngomba"},
["jhi"] = {"Jehai"},
["jhs"] = {"Jhankot Sign Language"},
["jia"] = {"Jina"},
["jib"] = {"Jibu"},
["jic"] = {"Tol"},
["jid"] = {"Bu (Kaduna State)"},
["jie"] = {"Jilbe"},
["jig"] = {"Jingulu", "Djingili"},
["jih"] = {"sTodsde", "Shangzhai"},
["jii"] = {"Jiiddu"},
["jil"] = {"Jilim"},
["jim"] = {"Jimi (Cameroon)"},
["jio"] = {"Jiamao"},
["jiq"] = {"Guanyinqiao", "Lavrung"},
["jit"] = {"Jita"},
["jiu"] = {"Youle Jinuo"},
["jiv"] = {"Shuar"},
["jiy"] = {"Buyuan Jinuo"},
["jje"] = {"Jejueo"},
["jjr"] = {"Bankal"},
["jka"] = {"Kaera"},
["jkm"] = {"Mobwa Karen"},
["jko"] = {"Kubo"},
["jkp"] = {"Paku Karen"},
["jkr"] = {"Koro (India)"},
["jks"] = {"Amami Koniya Sign Language"},
["jku"] = {"Labir"},
["jle"] = {"Ngile"},
["jls"] = {"Jamaican Sign Language"},
["jma"] = {"Dima"},
["jmb"] = {"Zumbun"},
["jmc"] = {"Machame"},
["jmd"] = {"Yamdena"},
["jmi"] = {"Jimi (Nigeria)"},
["jml"] = {"Jumli"},
["jmn"] = {"Makuri Naga"},
["jmr"] = {"Kamara"},
["jms"] = {"Mashi (Nigeria)"},
["jmw"] = {"Mouwase"},
["jmx"] = {"Western Juxtlahuaca Mixtec"},
["jna"] = {"Jangshung"},
["jnd"] = {"Jandavra"},
["jng"] = {"Yangman"},
["jni"] = {"Janji"},
["jnj"] = {"Yemsa"},
["jnl"] = {"Rawat"},
["jns"] = {"Jaunsari"},
["job"] = {"Joba"},
["jod"] = {"Wojenaka"},
["jog"] = {"Jogi"},
["jor"] = {"Jorá"},
["jos"] = {"Jordanian Sign Language"},
["jow"] = {"Jowulu"},
["jpa"] = {"Jewish Palestinian Aramaic"},
["jpr"] = {"Judeo-Persian"},
["jpx"] = {"Japanese (family)"},
["jqr"] = {"Jaqaru"},
["jra"] = {"Jarai"},
["jrb"] = {"Judeo-Arabic"},
["jrr"] = {"Jiru"},
["jrt"] = {"Jakattoe"},
["jru"] = {"Japrería"},
["jsl"] = {"Japanese Sign Language"},
["jua"] = {"Júma"},
["jub"] = {"Wannu"},
["juc"] = {"Jurchen"},
["jud"] = {"Worodougou"},
["juh"] = {"Hõne"},
["jui"] = {"Ngadjuri"},
["juk"] = {"Wapan"},
["jul"] = {"Jirel"},
["jum"] = {"Jumjum"},
["jun"] = {"Juang"},
["juo"] = {"Jiba"},
["jup"] = {"Hupdë"},
["jur"] = {"Jurúna"},
["jus"] = {"Jumla Sign Language"},
["jut"] = {"Jutish"},
["juu"] = {"Ju"},
["juw"] = {"Wãpha"},
["juy"] = {"Juray"},
["jvd"] = {"Javindo"},
["jvn"] = {"Caribbean Javanese"},
["jwi"] = {"Jwira-Pepesa"},
["jya"] = {"Jiarong"},
["jye"] = {"Judeo-Yemeni Arabic"},
["jyy"] = {"Jaya"},
["kaa"] = {"Kara-Kalpak", "Karakalpak"},
["kab"] = {"Kabyle"},
["kac"] = {"Kachin", "Jingpho"},
["kad"] = {"Adara"},
["kae"] = {"Ketangalan"},
["kaf"] = {"Katso"},
["kag"] = {"Kajaman"},
["kah"] = {"Kara (Central African Republic)"},
["kai"] = {"Karekare"},
["kaj"] = {"Jju"},
["kak"] = {"Kalanguya", "Kayapa Kallahan"},
["kam"] = {"Kamba (Kenya)"},
["kao"] = {"Xaasongaxango"},
["kap"] = {"Bezhta"},
["kaq"] = {"Capanahua"},
["kar"] = {"Karen languages"},
["kav"] = {"Katukína"},
["kaw"] = {"Kawi"},
["kax"] = {"Kao"},
["kay"] = {"Kamayurá"},
["kba"] = {"Kalarko"},
["kbb"] = {"Kaxuiâna"},
["kbc"] = {"Kadiwéu"},
["kbd"] = {"Kabardian"},
["kbe"] = {"Kanju"},
["kbg"] = {"Khamba"},
["kbh"] = {"Camsá"},
["kbi"] = {"Kaptiau"},
["kbj"] = {"Kari"},
["kbk"] = {"Grass Koiari"},
["kbl"] = {"Kanembu"},
["kbm"] = {"Iwal"},
["kbn"] = {"Kare (Central African Republic)"},
["kbo"] = {"Keliko"},
["kbp"] = {"Kabiyè"},
["kbq"] = {"Kamano"},
["kbr"] = {"Kafa"},
["kbs"] = {"Kande"},
["kbt"] = {"Abadi"},
["kbu"] = {"Kabutra"},
["kbv"] = {"Dera (Indonesia)"},
["kbw"] = {"Kaiep"},
["kbx"] = {"Ap Ma"},
["kby"] = {"Manga Kanuri"},
["kbz"] = {"Duhwa"},
["kca"] = {"Khanty"},
["kcb"] = {"Kawacha"},
["kcc"] = {"Lubila"},
["kcd"] = {"Ngkâlmpw Kanum"},
["kce"] = {"Kaivi"},
["kcf"] = {"Ukaan"},
["kcg"] = {"Tyap"},
["kch"] = {"Vono"},
["kci"] = {"Kamantan"},
["kcj"] = {"Kobiana"},
["kck"] = {"Kalanga"},
["kcl"] = {"Kela (Papua New Guinea)", "Kala"},
["kcm"] = {"Gula (Central African Republic)"},
["kcn"] = {"Nubi"},
["kco"] = {"Kinalakna"},
["kcp"] = {"Kanga"},
["kcq"] = {"Kamo"},
["kcr"] = {"Katla"},
["kcs"] = {"Koenoem"},
["kct"] = {"Kaian"},
["kcu"] = {"Kami (Tanzania)"},
["kcv"] = {"Kete"},
["kcw"] = {"Kabwari"},
["kcx"] = {"Kachama-Ganjule"},
["kcy"] = {"Korandje"},
["kcz"] = {"Konongo"},
["kda"] = {"Worimi"},
["kdc"] = {"Kutu"},
["kdd"] = {"Yankunytjatjara"},
["kde"] = {"Makonde"},
["kdf"] = {"Mamusi"},
["kdg"] = {"Seba"},
["kdh"] = {"Tem"},
["kdi"] = {"Kumam"},
["kdj"] = {"Karamojong"},
["kdk"] = {"Numèè", "Kwényi"},
["kdl"] = {"Tsikimba"},
["kdm"] = {"Kagoma"},
["kdn"] = {"Kunda"},
["kdo"] = {"Kordofanian languages"},
["kdp"] = {"Kaningdon-Nindem"},
["kdq"] = {"Koch"},
["kdr"] = {"Karaim"},
["kdt"] = {"Kuy"},
["kdu"] = {"Kadaru"},
["kdw"] = {"Koneraw"},
["kdx"] = {"Kam"},
["kdy"] = {"Keder", "Keijar"},
["kdz"] = {"Kwaja"},
["kea"] = {"Kabuverdianu"},
["keb"] = {"Kélé"},
["kec"] = {"Keiga"},
["ked"] = {"Kerewe"},
["kee"] = {"Eastern Keres"},
["kef"] = {"Kpessi"},
["keg"] = {"Tese"},
["keh"] = {"Keak"},
["kei"] = {"Kei"},
["kej"] = {"Kadar"},
["kek"] = {"Kekchí"},
["kel"] = {"Kela (Democratic Republic of Congo)"},
["kem"] = {"Kemak"},
["ken"] = {"Kenyang"},
["keo"] = {"Kakwa"},
["kep"] = {"Kaikadi"},
["keq"] = {"Kamar"},
["ker"] = {"Kera"},
["kes"] = {"Kugbo"},
["ket"] = {"Ket"},
["keu"] = {"Akebu"},
["kev"] = {"Kanikkaran"},
["kew"] = {"West Kewa"},
["kex"] = {"Kukna"},
["key"] = {"Kupia"},
["kez"] = {"Kukele"},
["kfa"] = {"Kodava"},
["kfb"] = {"Northwestern Kolami"},
["kfc"] = {"Konda-Dora"},
["kfd"] = {"Korra Koraga"},
["kfe"] = {"Kota (India)"},
["kff"] = {"Koya"},
["kfg"] = {"Kudiya"},
["kfh"] = {"Kurichiya"},
["kfi"] = {"Kannada Kurumba"},
["kfj"] = {"Kemiehua"},
["kfk"] = {"Kinnauri"},
["kfl"] = {"Kung"},
["kfm"] = {"Khunsari"},
["kfn"] = {"Kuk"},
["kfo"] = {"Koro (Côte d'Ivoire)"},
["kfp"] = {"Korwa"},
["kfq"] = {"Korku"},
["kfr"] = {"Kachhi", "Kutchi"},
["kfs"] = {"Bilaspuri"},
["kft"] = {"Kanjari"},
["kfu"] = {"Katkari"},
["kfv"] = {"Kurmukar"},
["kfw"] = {"Kharam Naga"},
["kfx"] = {"Kullu Pahari"},
["kfy"] = {"Kumaoni"},
["kfz"] = {"Koromfé"},
["kga"] = {"Koyaga"},
["kgb"] = {"Kawe"},
["kge"] = {"Komering"},
["kgf"] = {"Kube"},
["kgg"] = {"Kusunda"},
["kgi"] = {"Selangor Sign Language"},
["kgj"] = {"Gamale Kham"},
["kgk"] = {"Kaiwá"},
["kgl"] = {"Kunggari"},
["kgn"] = {"Karingani"},
["kgo"] = {"Krongo"},
["kgp"] = {"Kaingang"},
["kgq"] = {"Kamoro"},
["kgr"] = {"Abun"},
["kgs"] = {"Kumbainggar"},
["kgt"] = {"Somyev"},
["kgu"] = {"Kobol"},
["kgv"] = {"Karas"},
["kgw"] = {"Karon Dori"},
["kgx"] = {"Kamaru"},
["kgy"] = {"Kyerung"},
["kha"] = {"Khasi"},
["khb"] = {"Lü"},
["khc"] = {"Tukang Besi North"},
["khd"] = {"Bädi Kanum"},
["khe"] = {"Korowai"},
["khf"] = {"Khuen"},
["khg"] = {"Khams Tibetan"},
["khh"] = {"Kehu"},
["khi"] = {"Khoisan languages"},
["khj"] = {"Kuturmi"},
["khk"] = {"Halh Mongolian"},
["khl"] = {"Lusi"},
["khn"] = {"Khandesi"},
["kho"] = {"Khotanese", "Sakan"},
["khp"] = {"Kapori", "Kapauri"},
["khq"] = {"Koyra Chiini Songhay"},
["khr"] = {"Kharia"},
["khs"] = {"Kasua"},
["kht"] = {"Khamti"},
["khu"] = {"Nkhumbi"},
["khv"] = {"Khvarshi"},
["khw"] = {"Khowar"},
["khx"] = {"Kanu"},
["khy"] = {"Kele (Democratic Republic of Congo)"},
["khz"] = {"Keapara"},
["kia"] = {"Kim"},
["kib"] = {"Koalib"},
["kic"] = {"Kickapoo"},
["kid"] = {"Koshin"},
["kie"] = {"Kibet"},
["kif"] = {"Eastern Parbate Kham"},
["kig"] = {"Kimaama", "Kimaghima"},
["kih"] = {"Kilmeri"},
["kii"] = {"Kitsai"},
["kij"] = {"Kilivila"},
["kil"] = {"Kariya"},
["kim"] = {"Karagas"},
["kio"] = {"Kiowa"},
["kip"] = {"Sheshi Kham"},
["kiq"] = {"Kosadle", "Kosare"},
["kis"] = {"Kis"},
["kit"] = {"Agob"},
["kiu"] = {"Kirmanjki (individual language)"},
["kiv"] = {"Kimbu"},
["kiw"] = {"Northeast Kiwai"},
["kix"] = {"Khiamniungan Naga"},
["kiy"] = {"Kirikiri"},
["kiz"] = {"Kisi"},
["kja"] = {"Mlap"},
["kjb"] = {"Q'anjob'al", "Kanjobal"},
["kjc"] = {"Coastal Konjo"},
["kjd"] = {"Southern Kiwai"},
["kje"] = {"Kisar"},
["kjg"] = {"Khmu"},
["kjh"] = {"Khakas"},
["kji"] = {"Zabana"},
["kjj"] = {"Khinalugh"},
["kjk"] = {"Highland Konjo"},
["kjl"] = {"Western Parbate Kham"},
["kjm"] = {"Kháng"},
["kjn"] = {"Kunjen"},
["kjo"] = {"Harijan Kinnauri"},
["kjp"] = {"Pwo Eastern Karen"},
["kjq"] = {"Western Keres"},
["kjr"] = {"Kurudu"},
["kjs"] = {"East Kewa"},
["kjt"] = {"Phrae Pwo Karen"},
["kju"] = {"Kashaya"},
["kjv"] = {"Kaikavian Literary Language"},
["kjx"] = {"Ramopa"},
["kjy"] = {"Erave"},
["kjz"] = {"Bumthangkha"},
["kka"] = {"Kakanda"},
["kkb"] = {"Kwerisa"},
["kkc"] = {"Odoodee"},
["kkd"] = {"Kinuku"},
["kke"] = {"Kakabe"},
["kkf"] = {"Kalaktang Monpa"},
["kkg"] = {"Mabaka Valley Kalinga"},
["kkh"] = {"Khün"},
["kki"] = {"Kagulu"},
["kkj"] = {"Kako"},
["kkk"] = {"Kokota"},
["kkl"] = {"Kosarek Yale"},
["kkm"] = {"Kiong"},
["kkn"] = {"Kon Keu"},
["kko"] = {"Karko"},
["kkp"] = {"Gugubera", "Koko-Bera"},
["kkq"] = {"Kaeku"},
["kkr"] = {"Kir-Balar"},
["kks"] = {"Giiwo"},
["kkt"] = {"Koi"},
["kku"] = {"Tumi"},
["kkv"] = {"Kangean"},
["kkw"] = {"Teke-Kukuya"},
["kkx"] = {"Kohin"},
["kky"] = {"Guugu Yimidhirr", "Guguyimidjir"},
["kkz"] = {"Kaska"},
["kla"] = {"Klamath-Modoc"},
["klb"] = {"Kiliwa"},
["klc"] = {"Kolbila"},
["kld"] = {"Gamilaraay"},
["kle"] = {"Kulung (Nepal)"},
["klf"] = {"Kendeje"},
["klg"] = {"Tagakaulo"},
["klh"] = {"Weliki"},
["kli"] = {"Kalumpang"},
["klj"] = {"Khalaj"},
["klk"] = {"Kono (Nigeria)"},
["kll"] = {"Kagan Kalagan"},
["klm"] = {"Migum"},
["kln"] = {"Kalenjin"},
["klo"] = {"Kapya"},
["klp"] = {"Kamasa"},
["klq"] = {"Rumu"},
["klr"] = {"Khaling"},
["kls"] = {"Kalasha"},
["klt"] = {"Nukna"},
["klu"] = {"Klao"},
["klv"] = {"Maskelynes"},
["klw"] = {"Tado", "Lindu"},
["klx"] = {"Koluwawa"},
["kly"] = {"Kalao"},
["klz"] = {"Kabola"},
["kma"] = {"Konni"},
["kmb"] = {"Kimbundu"},
["kmc"] = {"Southern Dong"},
["kmd"] = {"Majukayang Kalinga"},
["kme"] = {"Bakole"},
["kmf"] = {"Kare (Papua New Guinea)"},
["kmg"] = {"Kâte"},
["kmh"] = {"Kalam"},
["kmi"] = {"Kami (Nigeria)"},
["kmj"] = {"Kumarbhag Paharia"},
["kmk"] = {"Limos Kalinga"},
["kml"] = {"Tanudan Kalinga"},
["kmm"] = {"Kom (India)"},
["kmn"] = {"Awtuw"},
["kmo"] = {"Kwoma"},
["kmp"] = {"Gimme"},
["kmq"] = {"Kwama"},
["kmr"] = {"Northern Kurdish"},
["kms"] = {"Kamasau"},
["kmt"] = {"Kemtuik"},
["kmu"] = {"Kanite"},
["kmv"] = {"Karipúna Creole French"},
["kmw"] = {"Komo (Democratic Republic of Congo)"},
["kmx"] = {"Waboda"},
["kmy"] = {"Koma"},
["kmz"] = {"Khorasani Turkish"},
["kna"] = {"Dera (Nigeria)"},
["knb"] = {"Lubuagan Kalinga"},
["knc"] = {"Central Kanuri"},
["knd"] = {"Konda"},
["kne"] = {"Kankanaey"},
["knf"] = {"Mankanya"},
["kng"] = {"Koongo"},
["kni"] = {"Kanufi"},
["knj"] = {"Western Kanjobal"},
["knk"] = {"Kuranko"},
["knl"] = {"Keninjal"},
["knm"] = {"Kanamarí"},
["knn"] = {"Konkani (individual language)"},
["kno"] = {"Kono (Sierra Leone)"},
["knp"] = {"Kwanja"},
["knq"] = {"Kintaq"},
["knr"] = {"Kaningra"},
["kns"] = {"Kensiu"},
["knt"] = {"Panoan Katukína"},
["knu"] = {"Kono (Guinea)"},
["knv"] = {"Tabo"},
["knw"] = {"Kung-Ekoka"},
["knx"] = {"Kendayan", "Salako"},
["kny"] = {"Kanyok"},
["knz"] = {"Kalamsé"},
["koa"] = {"Konomala"},
["koc"] = {"Kpati"},
["kod"] = {"Kodi"},
["koe"] = {"Kacipo-Bale Suri"},
["kof"] = {"Kubi"},
["kog"] = {"Cogui", "Kogi"},
["koh"] = {"Koyo"},
["koi"] = {"Komi-Permyak"},
["kok"] = {"Konkani (macrolanguage)"},
["kol"] = {"Kol (Papua New Guinea)"},
["koo"] = {"Konzo"},
["kop"] = {"Waube"},
["koq"] = {"Kota (Gabon)"},
["kos"] = {"Kosraean"},
["kot"] = {"Lagwan"},
["kou"] = {"Koke"},
["kov"] = {"Kudu-Camo"},
["kow"] = {"Kugama"},
["koy"] = {"Koyukon"},
["koz"] = {"Korak"},
["kpa"] = {"Kutto"},
["kpb"] = {"Mullu Kurumba"},
["kpc"] = {"Curripaco"},
["kpd"] = {"Koba"},
["kpe"] = {"Kpelle"},
["kpf"] = {"Komba"},
["kpg"] = {"Kapingamarangi"},
["kph"] = {"Kplang"},
["kpi"] = {"Kofei"},
["kpj"] = {"Karajá"},
["kpk"] = {"Kpan"},
["kpl"] = {"Kpala"},
["kpm"] = {"Koho"},
["kpn"] = {"Kepkiriwát"},
["kpo"] = {"Ikposo"},
["kpq"] = {"Korupun-Sela"},
["kpr"] = {"Korafe-Yegha"},
["kps"] = {"Tehit"},
["kpt"] = {"Karata"},
["kpu"] = {"Kafoa"},
["kpv"] = {"Komi-Zyrian"},
["kpw"] = {"Kobon"},
["kpx"] = {"Mountain Koiali"},
["kpy"] = {"Koryak"},
["kpz"] = {"Kupsabiny"},
["kqa"] = {"Mum"},
["kqb"] = {"Kovai"},
["kqc"] = {"Doromu-Koki"},
["kqd"] = {"Koy Sanjaq Surat"},
["kqe"] = {"Kalagan"},
["kqf"] = {"Kakabai"},
["kqg"] = {"Khe"},
["kqh"] = {"Kisankasa"},
["kqi"] = {"Koitabu"},
["kqj"] = {"Koromira"},
["kqk"] = {"Kotafon Gbe"},
["kql"] = {"Kyenele"},
["kqm"] = {"Khisa"},
["kqn"] = {"Kaonde"},
["kqo"] = {"Eastern Krahn"},
["kqp"] = {"Kimré"},
["kqq"] = {"Krenak"},
["kqr"] = {"Kimaragang"},
["kqs"] = {"Northern Kissi"},
["kqt"] = {"Klias River Kadazan"},
["kqu"] = {"Seroa"},
["kqv"] = {"Okolod"},
["kqw"] = {"Kandas"},
["kqx"] = {"Mser"},
["kqy"] = {"Koorete"},
["kqz"] = {"Korana"},
["kra"] = {"Kumhali"},
["krb"] = {"Karkin"},
["krc"] = {"Karachay-Balkar"},
["krd"] = {"Kairui-Midiki"},
["kre"] = {"Panará"},
["krf"] = {"Koro (Vanuatu)"},
["krh"] = {"Kurama"},
["kri"] = {"Krio"},
["krj"] = {"Kinaray-A"},
["krk"] = {"Kerek"},
["krl"] = {"Karelian"},
["krn"] = {"Sapo"},
["kro"] = {"Kru languages"},
["krp"] = {"Durop"},
["krr"] = {"Krung"},
["krs"] = {"Gbaya (Sudan)"},
["krt"] = {"Tumari Kanuri"},
["kru"] = {"Kurukh"},
["krv"] = {"Kavet"},
["krw"] = {"Western Krahn"},
["krx"] = {"Karon"},
["kry"] = {"Kryts"},
["krz"] = {"Sota Kanum"},
["ksb"] = {"Shambala"},
["ksc"] = {"Southern Kalinga"},
["ksd"] = {"Kuanua"},
["kse"] = {"Kuni"},
["ksf"] = {"Bafia"},
["ksg"] = {"Kusaghe"},
["ksh"] = {"Kölsch"},
["ksi"] = {"Krisa", "I'saka"},
["ksj"] = {"Uare"},
["ksk"] = {"Kansa"},
["ksl"] = {"Kumalu"},
["ksm"] = {"Kumba"},
["ksn"] = {"Kasiguranin"},
["kso"] = {"Kofa"},
["ksp"] = {"Kaba"},
["ksq"] = {"Kwaami"},
["ksr"] = {"Borong"},
["kss"] = {"Southern Kisi"},
["kst"] = {"Winyé"},
["ksu"] = {"Khamyang"},
["ksv"] = {"Kusu"},
["ksw"] = {"S'gaw Karen"},
["ksx"] = {"Kedang"},
["ksy"] = {"Kharia Thar"},
["ksz"] = {"Kodaku"},
["kta"] = {"Katua"},
["ktb"] = {"Kambaata"},
["ktc"] = {"Kholok"},
["ktd"] = {"Kokata", "Kukatha"},
["kte"] = {"Nubri"},
["ktf"] = {"Kwami"},
["ktg"] = {"Kalkutung"},
["kth"] = {"Karanga"},
["kti"] = {"North Muyu"},
["ktj"] = {"Plapo Krumen"},
["ktk"] = {"Kaniet"},
["ktl"] = {"Koroshi"},
["ktm"] = {"Kurti"},
["ktn"] = {"Karitiâna"},
["kto"] = {"Kuot"},
["ktp"] = {"Kaduo"},
["ktq"] = {"Katabaga"},
["kts"] = {"South Muyu"},
["ktt"] = {"Ketum"},
["ktu"] = {"Kituba (Democratic Republic of Congo)"},
["ktv"] = {"Eastern Katu"},
["ktw"] = {"Kato"},
["ktx"] = {"Kaxararí"},
["kty"] = {"Kango (Bas-Uélé District)"},
["ktz"] = {"Juǀʼhoan", "Juǀʼhoansi"},
["kub"] = {"Kutep"},
["kuc"] = {"Kwinsu"},
["kud"] = {"'Auhelawa"},
["kue"] = {"Kuman (Papua New Guinea)"},
["kuf"] = {"Western Katu"},
["kug"] = {"Kupa"},
["kuh"] = {"Kushi"},
["kui"] = {"Kuikúro-Kalapálo", "Kalapalo"},
["kuj"] = {"Kuria"},
["kuk"] = {"Kepo'"},
["kul"] = {"Kulere"},
["kum"] = {"Kumyk"},
["kun"] = {"Kunama"},
["kuo"] = {"Kumukio"},
["kup"] = {"Kunimaipa"},
["kuq"] = {"Karipuna"},
["kus"] = {"Kusaal"},
["kut"] = {"Kutenai"},
["kuu"] = {"Upper Kuskokwim"},
["kuv"] = {"Kur"},
["kuw"] = {"Kpagua"},
["kux"] = {"Kukatja"},
["kuy"] = {"Kuuku-Ya'u"},
["kuz"] = {"Kunza"},
["kva"] = {"Bagvalal"},
["kvb"] = {"Kubu"},
["kvc"] = {"Kove"},
["kvd"] = {"Kui (Indonesia)"},
["kve"] = {"Kalabakan"},
["kvf"] = {"Kabalai"},
["kvg"] = {"Kuni-Boazi"},
["kvh"] = {"Komodo"},
["kvi"] = {"Kwang"},
["kvj"] = {"Psikye"},
["kvk"] = {"Korean Sign Language"},
["kvl"] = {"Kayaw"},
["kvm"] = {"Kendem"},
["kvn"] = {"Border Kuna"},
["kvo"] = {"Dobel"},
["kvp"] = {"Kompane"},
["kvq"] = {"Geba Karen"},
["kvr"] = {"Kerinci"},
["kvt"] = {"Lahta Karen", "Lahta"},
["kvu"] = {"Yinbaw Karen"},
["kvv"] = {"Kola"},
["kvw"] = {"Wersing"},
["kvx"] = {"Parkari Koli"},
["kvy"] = {"Yintale Karen", "Yintale"},
["kvz"] = {"Tsakwambo", "Tsaukambo"},
["kwa"] = {"Dâw"},
["kwb"] = {"Kwa"},
["kwc"] = {"Likwala"},
["kwd"] = {"Kwaio"},
["kwe"] = {"Kwerba"},
["kwf"] = {"Kwara'ae"},
["kwg"] = {"Sara Kaba Deme"},
["kwh"] = {"Kowiai"},
["kwi"] = {"Awa-Cuaiquer"},
["kwj"] = {"Kwanga"},
["kwk"] = {"Kwakiutl"},
["kwl"] = {"Kofyar"},
["kwm"] = {"Kwambi"},
["kwn"] = {"Kwangali"},
["kwo"] = {"Kwomtari"},
["kwp"] = {"Kodia"},
["kwr"] = {"Kwer"},
["kws"] = {"Kwese"},
["kwt"] = {"Kwesten"},
["kwu"] = {"Kwakum"},
["kwv"] = {"Sara Kaba Náà"},
["kww"] = {"Kwinti"},
["kwx"] = {"Khirwar"},
["kwy"] = {"San Salvador Kongo"},
["kwz"] = {"Kwadi"},
["kxa"] = {"Kairiru"},
["kxb"] = {"Krobu"},
["kxc"] = {"Konso", "Khonso"},
["kxd"] = {"Brunei"},
["kxf"] = {"Manumanaw Karen", "Manumanaw"},
["kxh"] = {"Karo (Ethiopia)"},
["kxi"] = {"Keningau Murut"},
["kxj"] = {"Kulfa"},
["kxk"] = {"Zayein Karen"},
["kxm"] = {"Northern Khmer"},
["kxn"] = {"Kanowit-Tanjong Melanau"},
["kxo"] = {"Kanoé"},
["kxp"] = {"Wadiyara Koli"},
["kxq"] = {"Smärky Kanum"},
["kxr"] = {"Koro (Papua New Guinea)"},
["kxs"] = {"Kangjia"},
["kxt"] = {"Koiwat"},
["kxv"] = {"Kuvi"},
["kxw"] = {"Konai"},
["kxx"] = {"Likuba"},
["kxy"] = {"Kayong"},
["kxz"] = {"Kerewo"},
["kya"] = {"Kwaya"},
["kyb"] = {"Butbut Kalinga"},
["kyc"] = {"Kyaka"},
["kyd"] = {"Karey"},
["kye"] = {"Krache"},
["kyf"] = {"Kouya"},
["kyg"] = {"Keyagana"},
["kyh"] = {"Karok"},
["kyi"] = {"Kiput"},
["kyj"] = {"Karao"},
["kyk"] = {"Kamayo"},
["kyl"] = {"Kalapuya"},
["kym"] = {"Kpatili"},
["kyn"] = {"Northern Binukidnon"},
["kyo"] = {"Kelon"},
["kyp"] = {"Kang"},
["kyq"] = {"Kenga"},
["kyr"] = {"Kuruáya"},
["kys"] = {"Baram Kayan"},
["kyt"] = {"Kayagar"},
["kyu"] = {"Western Kayah"},
["kyv"] = {"Kayort"},
["kyw"] = {"Kudmali"},
["kyx"] = {"Rapoisi"},
["kyy"] = {"Kambaira"},
["kyz"] = {"Kayabí"},
["kza"] = {"Western Karaboro"},
["kzb"] = {"Kaibobo"},
["kzc"] = {"Bondoukou Kulango"},
["kzd"] = {"Kadai"},
["kze"] = {"Kosena"},
["kzf"] = {"Da'a Kaili"},
["kzg"] = {"Kikai"},
["kzi"] = {"Kelabit"},
["kzk"] = {"Kazukuru"},
["kzl"] = {"Kayeli"},
["kzm"] = {"Kais"},
["kzn"] = {"Kokola"},
["kzo"] = {"Kaningi"},
["kzp"] = {"Kaidipang"},
["kzq"] = {"Kaike"},
["kzr"] = {"Karang"},
["kzs"] = {"Sugut Dusun"},
["kzu"] = {"Kayupulau"},
["kzv"] = {"Komyandaret"},
["kzw"] = {"Karirí-Xocó"},
["kzx"] = {"Kamarian"},
["kzy"] = {"Kango (Tshopo District)"},
["kzz"] = {"Kalabra"},
["laa"] = {"Southern Subanen"},
["lab"] = {"Linear A"},
["lac"] = {"Lacandon"},
["lad"] = {"Ladino"},
["lae"] = {"Pattani"},
["laf"] = {"Lafofa"},
["lag"] = {"Rangi"},
["lah"] = {"Lahnda"},
["lai"] = {"Lambya"},
["laj"] = {"Lango (Uganda)"},
["lal"] = {"Lalia"},
["lam"] = {"Lamba"},
["lan"] = {"Laru"},
["lap"] = {"Laka (Chad)"},
["laq"] = {"Qabiao"},
["lar"] = {"Larteh"},
["las"] = {"Lama (Togo)"},
["lau"] = {"Laba"},
["law"] = {"Lauje"},
["lax"] = {"Tiwa"},
["lay"] = {"Lama Bai"},
["laz"] = {"Aribwatsa"},
["lbb"] = {"Label"},
["lbc"] = {"Lakkia"},
["lbe"] = {"Lak"},
["lbf"] = {"Tinani"},
["lbg"] = {"Laopang"},
["lbi"] = {"La'bi"},
["lbj"] = {"Ladakhi"},
["lbk"] = {"Central Bontok"},
["lbl"] = {"Libon Bikol"},
["lbm"] = {"Lodhi"},
["lbn"] = {"Rmeet"},
["lbo"] = {"Laven"},
["lbq"] = {"Wampar"},
["lbr"] = {"Lohorung"},
["lbs"] = {"Libyan Sign Language"},
["lbt"] = {"Lachi"},
["lbu"] = {"Labu"},
["lbv"] = {"Lavatbura-Lamusong"},
["lbw"] = {"Tolaki"},
["lbx"] = {"Lawangan"},
["lby"] = {"Lamalama", "Lamu-Lamu"},
["lbz"] = {"Lardil"},
["lcc"] = {"Legenyem"},
["lcd"] = {"Lola"},
["lce"] = {"Loncong", "Sekak"},
["lcf"] = {"Lubu"},
["lch"] = {"Luchazi"},
["lcl"] = {"Lisela"},
["lcm"] = {"Tungag"},
["lcp"] = {"Western Lawa"},
["lcq"] = {"Luhu"},
["lcs"] = {"Lisabata-Nuniali"},
["lda"] = {"Kla-Dan"},
["ldb"] = {"Dũya"},
["ldd"] = {"Luri"},
["ldg"] = {"Lenyima"},
["ldh"] = {"Lamja-Dengsa-Tola"},
["ldi"] = {"Laari"},
["ldj"] = {"Lemoro"},
["ldk"] = {"Leelau"},
["ldl"] = {"Kaan"},
["ldm"] = {"Landoma"},
["ldn"] = {"Láadan"},
["ldo"] = {"Loo"},
["ldp"] = {"Tso"},
["ldq"] = {"Lufu"},
["lea"] = {"Lega-Shabunda"},
["leb"] = {"Lala-Bisa"},
["lec"] = {"Leco"},
["led"] = {"Lendu"},
["lee"] = {"Lyélé"},
["lef"] = {"Lelemi"},
["leh"] = {"Lenje"},
["lei"] = {"Lemio"},
["lej"] = {"Lengola"},
["lek"] = {"Leipon"},
["lel"] = {"Lele (Democratic Republic of Congo)"},
["lem"] = {"Nomaande"},
["len"] = {"Lenca"},
["leo"] = {"Leti (Cameroon)"},
["lep"] = {"Lepcha"},
["leq"] = {"Lembena"},
["ler"] = {"Lenkau"},
["les"] = {"Lese"},
["let"] = {"Lesing-Gelimi", "Amio-Gelimi"},
["leu"] = {"Kara (Papua New Guinea)"},
["lev"] = {"Lamma"},
["lew"] = {"Ledo Kaili"},
["lex"] = {"Luang"},
["ley"] = {"Lemolang"},
["lez"] = {"Lezghian"},
["lfa"] = {"Lefa"},
["lfn"] = {"Lingua Franca Nova"},
["lga"] = {"Lungga"},
["lgb"] = {"Laghu"},
["lgg"] = {"Lugbara"},
["lgh"] = {"Laghuu"},
["lgi"] = {"Lengilu"},
["lgk"] = {"Lingarak", "Neverver"},
["lgl"] = {"Wala"},
["lgm"] = {"Lega-Mwenga"},
["lgn"] = {"T'apo", "Opuuo"},
["lgo"] = {"Lango (South Sudan)"},
["lgq"] = {"Logba"},
["lgr"] = {"Lengo"},
["lgs"] = {"Guinea-Bissau Sign Language", "Língua Gestual Guineense"},
["lgt"] = {"Pahi"},
["lgu"] = {"Longgu"},
["lgz"] = {"Ligenza"},
["lha"] = {"Laha (Viet Nam)"},
["lhh"] = {"Laha (Indonesia)"},
["lhi"] = {"Lahu Shi"},
["lhl"] = {"Lahul Lohar"},
["lhm"] = {"Lhomi"},
["lhn"] = {"Lahanan"},
["lhp"] = {"Lhokpu"},
["lhs"] = {"Mlahsö"},
["lht"] = {"Lo-Toga"},
["lhu"] = {"Lahu"},
["lia"] = {"West-Central Limba"},
["lib"] = {"Likum"},
["lic"] = {"Hlai"},
["lid"] = {"Nyindrou"},
["lie"] = {"Likila"},
["lif"] = {"Limbu"},
["lig"] = {"Ligbi"},
["lih"] = {"Lihir"},
["lij"] = {"Ligurian"},
["lik"] = {"Lika"},
["lil"] = {"Lillooet"},
["lio"] = {"Liki"},
["lip"] = {"Sekpele"},
["liq"] = {"Libido"},
["lir"] = {"Liberian English"},
["lis"] = {"Lisu"},
["liu"] = {"Logorik"},
["liv"] = {"Liv"},
["liw"] = {"Col"},
["lix"] = {"Liabuku"},
["liy"] = {"Banda-Bambari"},
["liz"] = {"Libinza"},
["lja"] = {"Golpa"},
["lje"] = {"Rampi"},
["lji"] = {"Laiyolo"},
["ljl"] = {"Li'o"},
["ljp"] = {"Lampung Api"},
["ljw"] = {"Yirandali"},
["ljx"] = {"Yuru"},
["lka"] = {"Lakalei"},
["lkb"] = {"Kabras", "Lukabaras"},
["lkc"] = {"Kucong"},
["lkd"] = {"Lakondê"},
["lke"] = {"Kenyi"},
["lkh"] = {"Lakha"},
["lki"] = {"Laki"},
["lkj"] = {"Remun"},
["lkl"] = {"Laeko-Libuat"},
["lkm"] = {"Kalaamaya"},
["lkn"] = {"Lakon", "Vure"},
["lko"] = {"Khayo", "Olukhayo"},
["lkr"] = {"Päri"},
["lks"] = {"Kisa", "Olushisa"},
["lkt"] = {"Lakota"},
["lku"] = {"Kungkari"},
["lky"] = {"Lokoya"},
["lla"] = {"Lala-Roba"},
["llb"] = {"Lolo"},
["llc"] = {"Lele (Guinea)"},
["lld"] = {"Ladin"},
["lle"] = {"Lele (Papua New Guinea)"},
["llf"] = {"Hermit"},
["llg"] = {"Lole"},
["llh"] = {"Lamu"},
["lli"] = {"Teke-Laali"},
["llj"] = {"Ladji Ladji"},
["llk"] = {"Lelak"},
["lll"] = {"Lilau"},
["llm"] = {"Lasalimu"},
["lln"] = {"Lele (Chad)"},
["llp"] = {"North Efate"},
["llq"] = {"Lolak"},
["lls"] = {"Lithuanian Sign Language"},
["llu"] = {"Lau"},
["llx"] = {"Lauan"},
["lma"] = {"East Limba"},
["lmb"] = {"Merei"},
["lmc"] = {"Limilngan"},
["lmd"] = {"Lumun"},
["lme"] = {"Pévé"},
["lmf"] = {"South Lembata"},
["lmg"] = {"Lamogai"},
["lmh"] = {"Lambichhong"},
["lmi"] = {"Lombi"},
["lmj"] = {"West Lembata"},
["lmk"] = {"Lamkang"},
["lml"] = {"Hano"},
["lmn"] = {"Lambadi"},
["lmo"] = {"Lombard"},
["lmp"] = {"Limbum"},
["lmq"] = {"Lamatuka"},
["lmr"] = {"Lamalera"},
["lmu"] = {"Lamenu"},
["lmv"] = {"Lomaiviti"},
["lmw"] = {"Lake Miwok"},
["lmx"] = {"Laimbue"},
["lmy"] = {"Lamboya"},
["lna"] = {"Langbashe"},
["lnb"] = {"Mbalanhu"},
["lnd"] = {"Lundayeh", "Lun Bawang"},
["lng"] = {"Langobardic"},
["lnh"] = {"Lanoh"},
["lni"] = {"Daantanai'"},
["lnj"] = {"Leningitij"},
["lnl"] = {"South Central Banda"},
["lnm"] = {"Langam"},
["lnn"] = {"Lorediakarkar"},
["lns"] = {"Lamnso'"},
["lnu"] = {"Longuda"},
["lnw"] = {"Lanima"},
["lnz"] = {"Lonzo"},
["loa"] = {"Loloda"},
["lob"] = {"Lobi"},
["loc"] = {"Inonhan"},
["loe"] = {"Saluan"},
["lof"] = {"Logol"},
["log"] = {"Logo"},
["loh"] = {"Laarim", "Narim"},
["loi"] = {"Loma (Côte d'Ivoire)"},
["loj"] = {"Lou"},
["lok"] = {"Loko"},
["lol"] = {"Mongo"},
["lom"] = {"Loma (Liberia)"},
["lon"] = {"Malawi Lomwe"},
["loo"] = {"Lombo"},
["lop"] = {"Lopa"},
["loq"] = {"Lobala"},
["lor"] = {"Téén"},
["los"] = {"Loniu"},
["lot"] = {"Otuho"},
["lou"] = {"Louisiana Creole"},
["lov"] = {"Lopi"},
["low"] = {"Tampias Lobu"},
["lox"] = {"Loun"},
["loy"] = {"Loke"},
["loz"] = {"Lozi"},
["lpa"] = {"Lelepa"},
["lpe"] = {"Lepki"},
["lpn"] = {"Long Phuri Naga"},
["lpo"] = {"Lipo"},
["lpx"] = {"Lopit"},
["lqr"] = {"Logir"},
["lra"] = {"Rara Bakati'"},
["lrc"] = {"Northern Luri"},
["lre"] = {"Laurentian"},
["lrg"] = {"Laragia"},
["lri"] = {"Marachi", "Olumarachi"},
["lrk"] = {"Loarki"},
["lrl"] = {"Lari"},
["lrm"] = {"Marama", "Olumarama"},
["lrn"] = {"Lorang"},
["lro"] = {"Laro"},
["lrr"] = {"Southern Yamphu"},
["lrt"] = {"Larantuka Malay"},
["lrv"] = {"Larevat"},
["lrz"] = {"Lemerig"},
["lsa"] = {"Lasgerdi"},
["lsb"] = {"Burundian Sign Language", "Langue des Signes Burundaise"},
["lsc"] = {"Albarradas Sign Language", "Lengua de señas Albarradas"},
["lsd"] = {"Lishana Deni"},
["lse"] = {"Lusengo"},
["lsh"] = {"Lish"},
["lsi"] = {"Lashi"},
["lsl"] = {"Latvian Sign Language"},
["lsm"] = {"Saamia", "Olusamia"},
["lsn"] = {"Tibetan Sign Language"},
["lso"] = {"Laos Sign Language"},
["lsp"] = {"Panamanian Sign Language", "Lengua de Señas Panameñas"},
["lsr"] = {"Aruop"},
["lss"] = {"Lasi"},
["lst"] = {"Trinidad and Tobago Sign Language"},
["lsv"] = {"Sivia Sign Language"},
["lsw"] = {"Seychelles Sign Language", "Lalang Siny Seselwa", "Langue des Signes Seychelloise"},
["lsy"] = {"Mauritian Sign Language"},
["ltc"] = {"Late Middle Chinese"},
["ltg"] = {"Latgalian"},
["lth"] = {"Thur"},
["lti"] = {"Leti (Indonesia)"},
["ltn"] = {"Latundê"},
["lto"] = {"Tsotso", "Olutsotso"},
["lts"] = {"Tachoni", "Lutachoni"},
["ltu"] = {"Latu"},
["lua"] = {"Luba-Lulua"},
["luc"] = {"Aringa"},
["lud"] = {"Ludian"},
["lue"] = {"Luvale"},
["luf"] = {"Laua"},
["lui"] = {"Luiseno"},
["luj"] = {"Luna"},
["luk"] = {"Lunanakha"},
["lul"] = {"Olu'bo"},
["lum"] = {"Luimbi"},
["lun"] = {"Lunda"},
["luo"] = {"Luo (Kenya and Tanzania)", "Dholuo"},
["lup"] = {"Lumbu"},
["luq"] = {"Lucumi"},
["lur"] = {"Laura"},
["lus"] = {"Lushai"},
["lut"] = {"Lushootseed"},
["luu"] = {"Lumba-Yakkha"},
["luv"] = {"Luwati"},
["luw"] = {"Luo (Cameroon)"},
["luy"] = {"Luyia", "Oluluyia"},
["luz"] = {"Southern Luri"},
["lva"] = {"Maku'a"},
["lvi"] = {"Lavi"},
["lvk"] = {"Lavukaleve"},
["lvl"] = {"Lwel"},
["lvs"] = {"Standard Latvian"},
["lvu"] = {"Levuka"},
["lwa"] = {"Lwalu"},
["lwe"] = {"Lewo Eleng"},
["lwg"] = {"Wanga", "Oluwanga"},
["lwh"] = {"White Lachi"},
["lwl"] = {"Eastern Lawa"},
["lwm"] = {"Laomian"},
["lwo"] = {"Luwo"},
["lws"] = {"Malawian Sign Language"},
["lwt"] = {"Lewotobi"},
["lwu"] = {"Lawu"},
["lww"] = {"Lewo"},
["lxm"] = {"Lakurumau"},
["lya"] = {"Layakha"},
["lyg"] = {"Lyngngam"},
["lyn"] = {"Luyana"},
["lzh"] = {"Literary Chinese"},
["lzl"] = {"Litzlitz"},
["lzn"] = {"Leinong Naga"},
["lzz"] = {"Laz"},
["maa"] = {"San Jerónimo Tecóatl Mazatec"},
["mab"] = {"Yutanduchi Mixtec"},
["mad"] = {"Madurese"},
["mae"] = {"Bo-Rukul"},
["maf"] = {"Mafa"},
["mag"] = {"Magahi"},
["mai"] = {"Maithili"},
["maj"] = {"Jalapa De Díaz Mazatec"},
["mak"] = {"Makasar"},
["mam"] = {"Mam"},
["man"] = {"Mandingo", "Manding"},
["map"] = {"Austronesian languages"},
["maq"] = {"Chiquihuitlán Mazatec"},
["mas"] = {"Masai"},
["mat"] = {"San Francisco Matlatzinca"},
["mau"] = {"Huautla Mazatec"},
["mav"] = {"Sateré-Mawé"},
["maw"] = {"Mampruli"},
["max"] = {"North Moluccan Malay"},
["maz"] = {"Central Mazahua"},
["mba"] = {"Higaonon"},
["mbb"] = {"Western Bukidnon Manobo"},
["mbc"] = {"Macushi"},
["mbd"] = {"Dibabawon Manobo"},
["mbe"] = {"Molale"},
["mbf"] = {"Baba Malay"},
["mbh"] = {"Mangseng"},
["mbi"] = {"Ilianen Manobo"},
["mbj"] = {"Nadëb"},
["mbk"] = {"Malol"},
["mbl"] = {"Maxakalí"},
["mbm"] = {"Ombamba"},
["mbn"] = {"Macaguán"},
["mbo"] = {"Mbo (Cameroon)"},
["mbp"] = {"Malayo"},
["mbq"] = {"Maisin"},
["mbr"] = {"Nukak Makú"},
["mbs"] = {"Sarangani Manobo"},
["mbt"] = {"Matigsalug Manobo"},
["mbu"] = {"Mbula-Bwazza"},
["mbv"] = {"Mbulungish"},
["mbw"] = {"Maring"},
["mbx"] = {"Mari (East Sepik Province)"},
["mby"] = {"Memoni"},
["mbz"] = {"Amoltepec Mixtec"},
["mca"] = {"Maca"},
["mcb"] = {"Machiguenga"},
["mcc"] = {"Bitur"},
["mcd"] = {"Sharanahua"},
["mce"] = {"Itundujia Mixtec"},
["mcf"] = {"Matsés"},
["mcg"] = {"Mapoyo"},
["mch"] = {"Maquiritari"},
["mci"] = {"Mese"},
["mcj"] = {"Mvanip"},
["mck"] = {"Mbunda"},
["mcl"] = {"Macaguaje"},
["mcm"] = {"Malaccan Creole Portuguese"},
["mcn"] = {"Masana"},
["mco"] = {"Coatlán Mixe"},
["mcp"] = {"Makaa"},
["mcq"] = {"Ese"},
["mcr"] = {"Menya"},
["mcs"] = {"Mambai"},
["mct"] = {"Mengisa"},
["mcu"] = {"Cameroon Mambila"},
["mcv"] = {"Minanibai"},
["mcw"] = {"Mawa (Chad)"},
["mcx"] = {"Mpiemo"},
["mcy"] = {"South Watut"},
["mcz"] = {"Mawan"},
["mda"] = {"Mada (Nigeria)"},
["mdb"] = {"Morigi"},
["mdc"] = {"Male (Papua New Guinea)"},
["mdd"] = {"Mbum"},
["mde"] = {"Maba (Chad)"},
["mdf"] = {"Moksha"},
["mdg"] = {"Massalat"},
["mdh"] = {"Maguindanaon"},
["mdi"] = {"Mamvu"},
["mdj"] = {"Mangbetu"},
["mdk"] = {"Mangbutu"},
["mdl"] = {"Maltese Sign Language"},
["mdm"] = {"Mayogo"},
["mdn"] = {"Mbati"},
["mdp"] = {"Mbala"},
["mdq"] = {"Mbole"},
["mdr"] = {"Mandar"},
["mds"] = {"Maria (Papua New Guinea)"},
["mdt"] = {"Mbere"},
["mdu"] = {"Mboko"},
["mdv"] = {"Santa Lucía Monteverde Mixtec"},
["mdw"] = {"Mbosi"},
["mdx"] = {"Dizin"},
["mdy"] = {"Male (Ethiopia)"},
["mdz"] = {"Suruí Do Pará"},
["mea"] = {"Menka"},
["meb"] = {"Ikobi"},
["mec"] = {"Marra"},
["med"] = {"Melpa"},
["mee"] = {"Mengen"},
["mef"] = {"Megam"},
["meh"] = {"Southwestern Tlaxiaco Mixtec"},
["mei"] = {"Midob"},
["mej"] = {"Meyah"},
["mek"] = {"Mekeo"},
["mel"] = {"Central Melanau"},
["mem"] = {"Mangala"},
["men"] = {"Mende (Sierra Leone)"},
["meo"] = {"Kedah Malay"},
["mep"] = {"Miriwoong"},
["meq"] = {"Merey"},
["mer"] = {"Meru"},
["mes"] = {"Masmaje"},
["met"] = {"Mato"},
["meu"] = {"Motu"},
["mev"] = {"Mano"},
["mew"] = {"Maaka"},
["mey"] = {"Hassaniyya"},
["mez"] = {"Menominee"},
["mfa"] = {"Pattani Malay"},
["mfb"] = {"Bangka"},
["mfc"] = {"Mba"},
["mfd"] = {"Mendankwe-Nkwen"},
["mfe"] = {"Morisyen"},
["mff"] = {"Naki"},
["mfg"] = {"Mogofin"},
["mfh"] = {"Matal"},
["mfi"] = {"Wandala"},
["mfj"] = {"Mefele"},
["mfk"] = {"North Mofu"},
["mfl"] = {"Putai"},
["mfm"] = {"Marghi South"},
["mfn"] = {"Cross River Mbembe"},
["mfo"] = {"Mbe"},
["mfp"] = {"Makassar Malay"},
["mfq"] = {"Moba"},
["mfr"] = {"Marrithiyel"},
["mfs"] = {"Mexican Sign Language"},
["mft"] = {"Mokerang"},
["mfu"] = {"Mbwela"},
["mfv"] = {"Mandjak"},
["mfw"] = {"Mulaha"},
["mfx"] = {"Melo"},
["mfy"] = {"Mayo"},
["mfz"] = {"Mabaan"},
["mga"] = {"Middle Irish (900-1200)"},
["mgb"] = {"Mararit"},
["mgc"] = {"Morokodo"},
["mgd"] = {"Moru"},
["mge"] = {"Mango"},
["mgf"] = {"Maklew"},
["mgg"] = {"Mpumpong"},
["mgh"] = {"Makhuwa-Meetto"},
["mgi"] = {"Lijili"},
["mgj"] = {"Abureni"},
["mgk"] = {"Mawes"},
["mgl"] = {"Maleu-Kilenge"},
["mgm"] = {"Mambae"},
["mgn"] = {"Mbangi"},
["mgo"] = {"Meta'"},
["mgp"] = {"Eastern Magar"},
["mgq"] = {"Malila"},
["mgr"] = {"Mambwe-Lungu"},
["mgs"] = {"Manda (Tanzania)"},
["mgt"] = {"Mongol"},
["mgu"] = {"Mailu"},
["mgv"] = {"Matengo"},
["mgw"] = {"Matumbi"},
["mgy"] = {"Mbunga"},
["mgz"] = {"Mbugwe"},
["mha"] = {"Manda (India)"},
["mhb"] = {"Mahongwe"},
["mhc"] = {"Mocho"},
["mhd"] = {"Mbugu"},
["mhe"] = {"Besisi", "Mah Meri"},
["mhf"] = {"Mamaa"},
["mhg"] = {"Margu"},
["mhi"] = {"Ma'di"},
["mhj"] = {"Mogholi"},
["mhk"] = {"Mungaka"},
["mhl"] = {"Mauwake"},
["mhm"] = {"Makhuwa-Moniga"},
["mhn"] = {"Mócheno"},
["mho"] = {"Mashi (Zambia)"},
["mhp"] = {"Balinese Malay"},
["mhq"] = {"Mandan"},
["mhr"] = {"Eastern Mari"},
["mhs"] = {"Buru (Indonesia)"},
["mht"] = {"Mandahuaca"},
["mhu"] = {"Digaro-Mishmi", "Darang Deng"},
["mhw"] = {"Mbukushu"},
["mhx"] = {"Maru", "Lhaovo"},
["mhy"] = {"Ma'anyan"},
["mhz"] = {"Mor (Mor Islands)"},
["mia"] = {"Miami"},
["mib"] = {"Atatláhuca Mixtec"},
["mic"] = {"Mi'kmaq", "Micmac"},
["mid"] = {"Mandaic"},
["mie"] = {"Ocotepec Mixtec"},
["mif"] = {"Mofu-Gudur"},
["mig"] = {"San Miguel El Grande Mixtec"},
["mih"] = {"Chayuco Mixtec"},
["mii"] = {"Chigmecatitlán Mixtec"},
["mij"] = {"Abar", "Mungbam"},
["mik"] = {"Mikasuki"},
["mil"] = {"Peñoles Mixtec"},
["mim"] = {"Alacatlatzala Mixtec"},
["min"] = {"Minangkabau"},
["mio"] = {"Pinotepa Nacional Mixtec"},
["mip"] = {"Apasco-Apoala Mixtec"},
["miq"] = {"Mískito"},
["mir"] = {"Isthmus Mixe"},
["mis"] = {"Uncoded languages"},
["mit"] = {"Southern Puebla Mixtec"},
["miu"] = {"Cacaloxtepec Mixtec"},
["miw"] = {"Akoye"},
["mix"] = {"Mixtepec Mixtec"},
["miy"] = {"Ayutla Mixtec"},
["miz"] = {"Coatzospan Mixtec"},
["mjb"] = {"Makalero"},
["mjc"] = {"San Juan Colorado Mixtec"},
["mjd"] = {"Northwest Maidu"},
["mje"] = {"Muskum"},
["mjg"] = {"Tu"},
["mjh"] = {"Mwera (Nyasa)"},
["mji"] = {"Kim Mun"},
["mjj"] = {"Mawak"},
["mjk"] = {"Matukar"},
["mjl"] = {"Mandeali"},
["mjm"] = {"Medebur"},
["mjn"] = {"Ma (Papua New Guinea)"},
["mjo"] = {"Malankuravan"},
["mjp"] = {"Malapandaram"},
["mjq"] = {"Malaryan"},
["mjr"] = {"Malavedan"},
["mjs"] = {"Miship"},
["mjt"] = {"Sauria Paharia"},
["mju"] = {"Manna-Dora"},
["mjv"] = {"Mannan"},
["mjw"] = {"Karbi"},
["mjx"] = {"Mahali"},
["mjy"] = {"Mahican"},
["mjz"] = {"Majhi"},
["mka"] = {"Mbre"},
["mkb"] = {"Mal Paharia"},
["mkc"] = {"Siliput"},
["mke"] = {"Mawchi"},
["mkf"] = {"Miya"},
["mkg"] = {"Mak (China)"},
["mkh"] = {"Mon-Khmer languages"},
["mki"] = {"Dhatki"},
["mkj"] = {"Mokilese"},
["mkk"] = {"Byep"},
["mkl"] = {"Mokole"},
["mkm"] = {"Moklen"},
["mkn"] = {"Kupang Malay"},
["mko"] = {"Mingang Doso"},
["mkp"] = {"Moikodi"},
["mkq"] = {"Bay Miwok"},
["mkr"] = {"Malas"},
["mks"] = {"Silacayoapan Mixtec"},
["mkt"] = {"Vamale"},
["mku"] = {"Konyanka Maninka"},
["mkv"] = {"Mafea"},
["mkw"] = {"Kituba (Congo)"},
["mkx"] = {"Kinamiging Manobo"},
["mky"] = {"East Makian"},
["mkz"] = {"Makasae"},
["mla"] = {"Malo"},
["mlb"] = {"Mbule"},
["mlc"] = {"Cao Lan"},
["mle"] = {"Manambu"},
["mlf"] = {"Mal"},
["mlh"] = {"Mape"},
["mli"] = {"Malimpung"},
["mlj"] = {"Miltu"},
["mlk"] = {"Ilwana", "Kiwilwana"},
["mll"] = {"Malua Bay"},
["mlm"] = {"Mulam"},
["mln"] = {"Malango"},
["mlo"] = {"Mlomp"},
["mlp"] = {"Bargam"},
["mlq"] = {"Western Maninkakan"},
["mlr"] = {"Vame"},
["mls"] = {"Masalit"},
["mlu"] = {"To'abaita"},
["mlv"] = {"Motlav", "Mwotlap"},
["mlw"] = {"Moloko"},
["mlx"] = {"Malfaxal", "Naha'ai"},
["mlz"] = {"Malaynon"},
["mma"] = {"Mama"},
["mmb"] = {"Momina"},
["mmc"] = {"Michoacán Mazahua"},
["mmd"] = {"Maonan"},
["mme"] = {"Mae"},
["mmf"] = {"Mundat"},
["mmg"] = {"North Ambrym"},
["mmh"] = {"Mehináku"},
["mmi"] = {"Musar"},
["mmj"] = {"Majhwar"},
["mmk"] = {"Mukha-Dora"},
["mml"] = {"Man Met"},
["mmm"] = {"Maii"},
["mmn"] = {"Mamanwa"},
["mmo"] = {"Mangga Buang"},
["mmp"] = {"Siawi"},
["mmq"] = {"Musak"},
["mmr"] = {"Western Xiangxi Miao"},
["mmt"] = {"Malalamai"},
["mmu"] = {"Mmaala"},
["mmv"] = {"Miriti"},
["mmw"] = {"Emae"},
["mmx"] = {"Madak"},
["mmy"] = {"Migaama"},
["mmz"] = {"Mabaale"},
["mna"] = {"Mbula"},
["mnb"] = {"Muna"},
["mnc"] = {"Manchu"},
["mnd"] = {"Mondé"},
["mne"] = {"Naba"},
["mnf"] = {"Mundani"},
["mng"] = {"Eastern Mnong"},
["mnh"] = {"Mono (Democratic Republic of Congo)"},
["mni"] = {"Manipuri"},
["mnj"] = {"Munji"},
["mnk"] = {"Mandinka"},
["mnl"] = {"Tiale"},
["mnm"] = {"Mapena"},
["mnn"] = {"Southern Mnong"},
["mno"] = {"Manobo languages"},
["mnp"] = {"Min Bei Chinese"},
["mnq"] = {"Minriq"},
["mnr"] = {"Mono (USA)"},
["mns"] = {"Mansi"},
["mnu"] = {"Mer"},
["mnv"] = {"Rennell-Bellona"},
["mnw"] = {"Mon"},
["mnx"] = {"Manikion"},
["mny"] = {"Manyawa"},
["mnz"] = {"Moni"},
["moa"] = {"Mwan"},
["moc"] = {"Mocoví"},
["mod"] = {"Mobilian"},
["moe"] = {"Innu", "Montagnais"},
["mog"] = {"Mongondow"},
["moh"] = {"Mohawk"},
["moi"] = {"Mboi"},
["moj"] = {"Monzombo"},
["mok"] = {"Morori"},
["mom"] = {"Mangue"},
["moo"] = {"Monom"},
["mop"] = {"Mopán Maya"},
["moq"] = {"Mor (Bomberai Peninsula)"},
["mor"] = {"Moro"},
["mos"] = {"Mossi"},
["mot"] = {"Barí"},
["mou"] = {"Mogum"},
["mov"] = {"Mohave"},
["mow"] = {"Moi (Congo)"},
["mox"] = {"Molima"},
["moy"] = {"Shekkacho"},
["moz"] = {"Mukulu", "Gergiko"},
["mpa"] = {"Mpoto"},
["mpb"] = {"Malak Malak", "Mullukmulluk"},
["mpc"] = {"Mangarrayi"},
["mpd"] = {"Machinere"},
["mpe"] = {"Majang"},
["mpg"] = {"Marba"},
["mph"] = {"Maung"},
["mpi"] = {"Mpade"},
["mpj"] = {"Martu Wangka", "Wangkajunga"},
["mpk"] = {"Mbara (Chad)"},
["mpl"] = {"Middle Watut"},
["mpm"] = {"Yosondúa Mixtec"},
["mpn"] = {"Mindiri"},
["mpo"] = {"Miu"},
["mpp"] = {"Migabac"},
["mpq"] = {"Matís"},
["mpr"] = {"Vangunu"},
["mps"] = {"Dadibi"},
["mpt"] = {"Mian"},
["mpu"] = {"Makuráp"},
["mpv"] = {"Mungkip"},
["mpw"] = {"Mapidian"},
["mpx"] = {"Misima-Panaeati"},
["mpy"] = {"Mapia"},
["mpz"] = {"Mpi"},
["mqa"] = {"Maba (Indonesia)"},
["mqb"] = {"Mbuko"},
["mqc"] = {"Mangole"},
["mqe"] = {"Matepi"},
["mqf"] = {"Momuna"},
["mqg"] = {"Kota Bangun Kutai Malay"},
["mqh"] = {"Tlazoyaltepec Mixtec"},
["mqi"] = {"Mariri"},
["mqj"] = {"Mamasa"},
["mqk"] = {"Rajah Kabunsuwan Manobo"},
["mql"] = {"Mbelime"},
["mqm"] = {"South Marquesan"},
["mqn"] = {"Moronene"},
["mqo"] = {"Modole"},
["mqp"] = {"Manipa"},
["mqq"] = {"Minokok"},
["mqr"] = {"Mander"},
["mqs"] = {"West Makian"},
["mqt"] = {"Mok"},
["mqu"] = {"Mandari"},
["mqv"] = {"Mosimo"},
["mqw"] = {"Murupi"},
["mqx"] = {"Mamuju"},
["mqy"] = {"Manggarai"},
["mqz"] = {"Pano"},
["mra"] = {"Mlabri"},
["mrb"] = {"Marino"},
["mrc"] = {"Maricopa"},
["mrd"] = {"Western Magar"},
["mre"] = {"Martha's Vineyard Sign Language"},
["mrf"] = {"Elseng"},
["mrg"] = {"Mising"},
["mrh"] = {"Mara Chin"},
["mrj"] = {"Western Mari"},
["mrk"] = {"Hmwaveke"},
["mrl"] = {"Mortlockese"},
["mrm"] = {"Merlav", "Mwerlap"},
["mrn"] = {"Cheke Holo"},
["mro"] = {"Mru"},
["mrp"] = {"Morouas"},
["mrq"] = {"North Marquesan"},
["mrr"] = {"Maria (India)"},
["mrs"] = {"Maragus"},
["mrt"] = {"Marghi Central"},
["mru"] = {"Mono (Cameroon)"},
["mrv"] = {"Mangareva"},
["mrw"] = {"Maranao"},
["mrx"] = {"Maremgi", "Dineor"},
["mry"] = {"Mandaya"},
["mrz"] = {"Marind"},
["msb"] = {"Masbatenyo"},
["msc"] = {"Sankaran Maninka"},
["msd"] = {"Yucatec Maya Sign Language"},
["mse"] = {"Musey"},
["msf"] = {"Mekwei"},
["msg"] = {"Moraid"},
["msh"] = {"Masikoro Malagasy"},
["msi"] = {"Sabah Malay"},
["msj"] = {"Ma (Democratic Republic of Congo)"},
["msk"] = {"Mansaka"},
["msl"] = {"Molof", "Poule"},
["msm"] = {"Agusan Manobo"},
["msn"] = {"Vurës"},
["mso"] = {"Mombum"},
["msp"] = {"Maritsauá"},
["msq"] = {"Caac"},
["msr"] = {"Mongolian Sign Language"},
["mss"] = {"West Masela"},
["msu"] = {"Musom"},
["msv"] = {"Maslam"},
["msw"] = {"Mansoanka"},
["msx"] = {"Moresada"},
["msy"] = {"Aruamu"},
["msz"] = {"Momare"},
["mta"] = {"Cotabato Manobo"},
["mtb"] = {"Anyin Morofo"},
["mtc"] = {"Munit"},
["mtd"] = {"Mualang"},
["mte"] = {"Mono (Solomon Islands)"},
["mtf"] = {"Murik (Papua New Guinea)"},
["mtg"] = {"Una"},
["mth"] = {"Munggui"},
["mti"] = {"Maiwa (Papua New Guinea)"},
["mtj"] = {"Moskona"},
["mtk"] = {"Mbe'"},
["mtl"] = {"Montol"},
["mtm"] = {"Mator"},
["mtn"] = {"Matagalpa"},
["mto"] = {"Totontepec Mixe"},
["mtp"] = {"Wichí Lhamtés Nocten"},
["mtq"] = {"Muong"},
["mtr"] = {"Mewari"},
["mts"] = {"Yora"},
["mtt"] = {"Mota"},
["mtu"] = {"Tututepec Mixtec"},
["mtv"] = {"Asaro'o"},
["mtw"] = {"Southern Binukidnon"},
["mtx"] = {"Tidaá Mixtec"},
["mty"] = {"Nabi"},
["mua"] = {"Mundang"},
["mub"] = {"Mubi"},
["muc"] = {"Ajumbu"},
["mud"] = {"Mednyj Aleut"},
["mue"] = {"Media Lengua"},
["mug"] = {"Musgu"},
["muh"] = {"Mündü"},
["mui"] = {"Musi"},
["muj"] = {"Mabire"},
["muk"] = {"Mugom"},
["mul"] = {"Multiple languages"},
["mum"] = {"Maiwala"},
["mun"] = {"Munda languages"},
["muo"] = {"Nyong"},
["mup"] = {"Malvi"},
["muq"] = {"Eastern Xiangxi Miao"},
["mur"] = {"Murle"},
["mus"] = {"Creek"},
["mut"] = {"Western Muria"},
["muu"] = {"Yaaku"},
["muv"] = {"Muthuvan"},
["mux"] = {"Bo-Ung"},
["muy"] = {"Muyang"},
["muz"] = {"Mursi"},
["mva"] = {"Manam"},
["mvb"] = {"Mattole"},
["mvd"] = {"Mamboru"},
["mve"] = {"Marwari (Pakistan)"},
["mvf"] = {"Peripheral Mongolian"},
["mvg"] = {"Yucuañe Mixtec"},
["mvh"] = {"Mulgi"},
["mvi"] = {"Miyako"},
["mvk"] = {"Mekmek"},
["mvl"] = {"Mbara (Australia)"},
["mvn"] = {"Minaveha"},
["mvo"] = {"Marovo"},
["mvp"] = {"Duri"},
["mvq"] = {"Moere"},
["mvr"] = {"Marau"},
["mvs"] = {"Massep"},
["mvt"] = {"Mpotovoro"},
["mvu"] = {"Marfa"},
["mvv"] = {"Tagal Murut"},
["mvw"] = {"Machinga"},
["mvx"] = {"Meoswar"},
["mvy"] = {"Indus Kohistani"},
["mvz"] = {"Mesqan"},
["mwa"] = {"Mwatebu"},
["mwb"] = {"Juwal"},
["mwc"] = {"Are"},
["mwe"] = {"Mwera (Chimwera)"},
["mwf"] = {"Murrinh-Patha"},
["mwg"] = {"Aiklep"},
["mwh"] = {"Mouk-Aria"},
["mwi"] = {"Labo", "Ninde"},
["mwk"] = {"Kita Maninkakan"},
["mwl"] = {"Mirandese"},
["mwm"] = {"Sar"},
["mwn"] = {"Nyamwanga"},
["mwo"] = {"Central Maewo"},
["mwp"] = {"Kala Lagaw Ya"},
["mwq"] = {"Mün Chin"},
["mwr"] = {"Marwari"},
["mws"] = {"Mwimbi-Muthambi"},
["mwt"] = {"Moken"},
["mwu"] = {"Mittu"},
["mwv"] = {"Mentawai"},
["mww"] = {"Hmong Daw"},
["mwz"] = {"Moingi"},
["mxa"] = {"Northwest Oaxaca Mixtec"},
["mxb"] = {"Tezoatlán Mixtec"},
["mxc"] = {"Manyika"},
["mxd"] = {"Modang"},
["mxe"] = {"Mele-Fila"},
["mxf"] = {"Malgbe"},
["mxg"] = {"Mbangala"},
["mxh"] = {"Mvuba"},
["mxi"] = {"Mozarabic"},
["mxj"] = {"Miju-Mishmi", "Geman Deng"},
["mxk"] = {"Monumbo"},
["mxl"] = {"Maxi Gbe"},
["mxm"] = {"Meramera"},
["mxn"] = {"Moi (Indonesia)"},
["mxo"] = {"Mbowe"},
["mxp"] = {"Tlahuitoltepec Mixe"},
["mxq"] = {"Juquila Mixe"},
["mxr"] = {"Murik (Malaysia)"},
["mxs"] = {"Huitepec Mixtec"},
["mxt"] = {"Jamiltepec Mixtec"},
["mxu"] = {"Mada (Cameroon)"},
["mxv"] = {"Metlatónoc Mixtec"},
["mxw"] = {"Namo"},
["mxx"] = {"Mahou", "Mawukakan"},
["mxy"] = {"Southeastern Nochixtlán Mixtec"},
["mxz"] = {"Central Masela"},
["myb"] = {"Mbay"},
["myc"] = {"Mayeka"},
["mye"] = {"Myene"},
["myf"] = {"Bambassi"},
["myg"] = {"Manta"},
["myh"] = {"Makah"},
["myj"] = {"Mangayat"},
["myk"] = {"Mamara Senoufo"},
["myl"] = {"Moma"},
["mym"] = {"Me'en"},
["myn"] = {"Mayan languages"},
["myo"] = {"Anfillo"},
["myp"] = {"Pirahã"},
["myr"] = {"Muniche"},
["mys"] = {"Mesmes"},
["myu"] = {"Mundurukú"},
["myv"] = {"Erzya"},
["myw"] = {"Muyuw"},
["myx"] = {"Masaaba"},
["myy"] = {"Macuna"},
["myz"] = {"Classical Mandaic"},
["mza"] = {"Santa María Zacatepec Mixtec"},
["mzb"] = {"Tumzabt"},
["mzc"] = {"Madagascar Sign Language"},
["mzd"] = {"Malimba"},
["mze"] = {"Morawa"},
["mzg"] = {"Monastic Sign Language"},
["mzh"] = {"Wichí Lhamtés Güisnay"},
["mzi"] = {"Ixcatlán Mazatec"},
["mzj"] = {"Manya"},
["mzk"] = {"Nigeria Mambila"},
["mzl"] = {"Mazatlán Mixe"},
["mzm"] = {"Mumuye"},
["mzn"] = {"Mazanderani"},
["mzo"] = {"Matipuhy"},
["mzp"] = {"Movima"},
["mzq"] = {"Mori Atas"},
["mzr"] = {"Marúbo"},
["mzs"] = {"Macanese"},
["mzt"] = {"Mintil"},
["mzu"] = {"Inapang"},
["mzv"] = {"Manza"},
["mzw"] = {"Deg"},
["mzx"] = {"Mawayana"},
["mzy"] = {"Mozambican Sign Language"},
["mzz"] = {"Maiadomu"},
["naa"] = {"Namla"},
["nab"] = {"Southern Nambikuára"},
["nac"] = {"Narak"},
["nae"] = {"Naka'ela"},
["naf"] = {"Nabak"},
["nag"] = {"Naga Pidgin"},
["nah"] = {"Nahuatl languages"},
["nai"] = {"North American Indian languages"},
["naj"] = {"Nalu"},
["nak"] = {"Nakanai"},
["nal"] = {"Nalik"},
["nam"] = {"Ngan'gityemerri"},
["nan"] = {"Min Nan Chinese"},
["nao"] = {"Naaba"},
["nap"] = {"Neapolitan"},
["naq"] = {"Khoekhoe", "Nama (Namibia)"},
["nar"] = {"Iguta"},
["nas"] = {"Naasioi"},
["nat"] = {"Ca̱hungwa̱rya̱", "Hungworo"},
["naw"] = {"Nawuri"},
["nax"] = {"Nakwi"},
["nay"] = {"Ngarrindjeri"},
["naz"] = {"Coatepec Nahuatl"},
["nba"] = {"Nyemba"},
["nbb"] = {"Ndoe"},
["nbc"] = {"Chang Naga"},
["nbd"] = {"Ngbinda"},
["nbe"] = {"Konyak Naga"},
["nbg"] = {"Nagarchal"},
["nbh"] = {"Ngamo"},
["nbi"] = {"Mao Naga"},
["nbj"] = {"Ngarinyman"},
["nbk"] = {"Nake"},
["nbm"] = {"Ngbaka Ma'bo"},
["nbn"] = {"Kuri"},
["nbo"] = {"Nkukoli"},
["nbp"] = {"Nnam"},
["nbq"] = {"Nggem"},
["nbr"] = {"Numana"},
["nbs"] = {"Namibian Sign Language"},
["nbt"] = {"Na"},
["nbu"] = {"Rongmei Naga"},
["nbv"] = {"Ngamambo"},
["nbw"] = {"Southern Ngbandi"},
["nby"] = {"Ningera"},
["nca"] = {"Iyo"},
["ncb"] = {"Central Nicobarese"},
["ncc"] = {"Ponam"},
["ncd"] = {"Nachering"},
["nce"] = {"Yale"},
["ncf"] = {"Notsi"},
["ncg"] = {"Nisga'a"},
["nch"] = {"Central Huasteca Nahuatl"},
["nci"] = {"Classical Nahuatl"},
["ncj"] = {"Northern Puebla Nahuatl"},
["nck"] = {"Na-kara"},
["ncl"] = {"Michoacán Nahuatl"},
["ncm"] = {"Nambo"},
["ncn"] = {"Nauna"},
["nco"] = {"Sibe"},
["ncq"] = {"Northern Katang"},
["ncr"] = {"Ncane"},
["ncs"] = {"Nicaraguan Sign Language"},
["nct"] = {"Chothe Naga"},
["ncu"] = {"Chumburung"},
["ncx"] = {"Central Puebla Nahuatl"},
["ncz"] = {"Natchez"},
["nda"] = {"Ndasa"},
["ndb"] = {"Kenswei Nsei"},
["ndc"] = {"Ndau"},
["ndd"] = {"Nde-Nsele-Nta"},
["ndf"] = {"Nadruvian"},
["ndg"] = {"Ndengereko"},
["ndh"] = {"Ndali"},
["ndi"] = {"Samba Leko"},
["ndj"] = {"Ndamba"},
["ndk"] = {"Ndaka"},
["ndl"] = {"Ndolo"},
["ndm"] = {"Ndam"},
["ndn"] = {"Ngundi"},
["ndp"] = {"Ndo"},
["ndq"] = {"Ndombe"},
["ndr"] = {"Ndoola"},
["nds"] = {"Low German", "Low Saxon"},
["ndt"] = {"Ndunga"},
["ndu"] = {"Dugun"},
["ndv"] = {"Ndut"},
["ndw"] = {"Ndobo"},
["ndx"] = {"Nduga"},
["ndy"] = {"Lutos"},
["ndz"] = {"Ndogo"},
["nea"] = {"Eastern Ngad'a"},
["neb"] = {"Toura (Côte d'Ivoire)"},
["nec"] = {"Nedebang"},
["ned"] = {"Nde-Gbite"},
["nee"] = {"Nêlêmwa-Nixumwak"},
["nef"] = {"Nefamese"},
["neg"] = {"Negidal"},
["neh"] = {"Nyenkha"},
["nei"] = {"Neo-Hittite"},
["nej"] = {"Neko"},
["nek"] = {"Neku"},
["nem"] = {"Nemi"},
["nen"] = {"Nengone"},
["neo"] = {"Ná-Meo"},
["neq"] = {"North Central Mixe"},
["ner"] = {"Yahadian"},
["nes"] = {"Bhoti Kinnauri"},
["net"] = {"Nete"},
["neu"] = {"Neo"},
["nev"] = {"Nyaheun"},
["new"] = {"Newari", "Nepal Bhasa"},
["nex"] = {"Neme"},
["ney"] = {"Neyo"},
["nez"] = {"Nez Perce"},
["nfa"] = {"Dhao"},
["nfd"] = {"Ahwai"},
["nfl"] = {"Ayiwo", "Äiwoo"},
["nfr"] = {"Nafaanra"},
["nfu"] = {"Mfumte"},
["nga"] = {"Ngbaka"},
["ngb"] = {"Northern Ngbandi"},
["ngc"] = {"Ngombe (Democratic Republic of Congo)"},
["ngd"] = {"Ngando (Central African Republic)"},
["nge"] = {"Ngemba"},
["ngf"] = {"Trans-New Guinea languages"},
["ngg"] = {"Ngbaka Manza"},
["ngh"] = {"Nǁng"},
["ngi"] = {"Ngizim"},
["ngj"] = {"Ngie"},
["ngk"] = {"Dalabon"},
["ngl"] = {"Lomwe"},
["ngm"] = {"Ngatik Men's Creole"},
["ngn"] = {"Ngwo"},
["ngp"] = {"Ngulu"},
["ngq"] = {"Ngurimi", "Ngoreme"},
["ngr"] = {"Engdewu"},
["ngs"] = {"Gvoko"},
["ngt"] = {"Kriang", "Ngeq"},
["ngu"] = {"Guerrero Nahuatl"},
["ngv"] = {"Nagumi"},
["ngw"] = {"Ngwaba"},
["ngx"] = {"Nggwahyi"},
["ngy"] = {"Tibea"},
["ngz"] = {"Ngungwel"},
["nha"] = {"Nhanda"},
["nhb"] = {"Beng"},
["nhc"] = {"Tabasco Nahuatl"},
["nhd"] = {"Chiripá", "Ava Guaraní"},
["nhe"] = {"Eastern Huasteca Nahuatl"},
["nhf"] = {"Nhuwala"},
["nhg"] = {"Tetelcingo Nahuatl"},
["nhh"] = {"Nahari"},
["nhi"] = {"Zacatlán-Ahuacatlán-Tepetzintla Nahuatl"},
["nhk"] = {"Isthmus-Cosoleacaque Nahuatl"},
["nhm"] = {"Morelos Nahuatl"},
["nhn"] = {"Central Nahuatl"},
["nho"] = {"Takuu"},
["nhp"] = {"Isthmus-Pajapan Nahuatl"},
["nhq"] = {"Huaxcaleca Nahuatl"},
["nhr"] = {"Naro"},
["nht"] = {"Ometepec Nahuatl"},
["nhu"] = {"Noone"},
["nhv"] = {"Temascaltepec Nahuatl"},
["nhw"] = {"Western Huasteca Nahuatl"},
["nhx"] = {"Isthmus-Mecayapan Nahuatl"},
["nhy"] = {"Northern Oaxaca Nahuatl"},
["nhz"] = {"Santa María La Alta Nahuatl"},
["nia"] = {"Nias"},
["nib"] = {"Nakame"},
["nic"] = {"Niger-Kordofanian languages"},
["nid"] = {"Ngandi"},
["nie"] = {"Niellim"},
["nif"] = {"Nek"},
["nig"] = {"Ngalakgan"},
["nih"] = {"Nyiha (Tanzania)"},
["nii"] = {"Nii"},
["nij"] = {"Ngaju"},
["nik"] = {"Southern Nicobarese"},
["nil"] = {"Nila"},
["nim"] = {"Nilamba"},
["nin"] = {"Ninzo"},
["nio"] = {"Nganasan"},
["niq"] = {"Nandi"},
["nir"] = {"Nimboran"},
["nis"] = {"Nimi"},
["nit"] = {"Southeastern Kolami"},
["niu"] = {"Niuean"},
["niv"] = {"Gilyak"},
["niw"] = {"Nimo"},
["nix"] = {"Hema"},
["niy"] = {"Ngiti"},
["niz"] = {"Ningil"},
["nja"] = {"Nzanyi"},
["njb"] = {"Nocte Naga"},
["njd"] = {"Ndonde Hamba"},
["njh"] = {"Lotha Naga"},
["nji"] = {"Gudanji"},
["njj"] = {"Njen"},
["njl"] = {"Njalgulgule"},
["njm"] = {"Angami Naga"},
["njn"] = {"Liangmai Naga"},
["njo"] = {"Ao Naga"},
["njr"] = {"Njerep"},
["njs"] = {"Nisa"},
["njt"] = {"Ndyuka-Trio Pidgin"},
["nju"] = {"Ngadjunmaya"},
["njx"] = {"Kunyi"},
["njy"] = {"Njyem"},
["njz"] = {"Nyishi"},
["nka"] = {"Nkoya"},
["nkb"] = {"Khoibu Naga"},
["nkc"] = {"Nkongho"},
["nkd"] = {"Koireng"},
["nke"] = {"Duke"},
["nkf"] = {"Inpui Naga"},
["nkg"] = {"Nekgini"},
["nkh"] = {"Khezha Naga"},
["nki"] = {"Thangal Naga"},
["nkj"] = {"Nakai"},
["nkk"] = {"Nokuku"},
["nkm"] = {"Namat"},
["nkn"] = {"Nkangala"},
["nko"] = {"Nkonya"},
["nkp"] = {"Niuatoputapu"},
["nkq"] = {"Nkami"},
["nkr"] = {"Nukuoro"},
["nks"] = {"North Asmat"},
["nkt"] = {"Nyika (Tanzania)"},
["nku"] = {"Bouna Kulango"},
["nkv"] = {"Nyika (Malawi and Zambia)"},
["nkw"] = {"Nkutu"},
["nkx"] = {"Nkoroo"},
["nkz"] = {"Nkari"},
["nla"] = {"Ngombale"},
["nlc"] = {"Nalca"},
["nle"] = {"East Nyala"},
["nlg"] = {"Gela"},
["nli"] = {"Grangali"},
["nlj"] = {"Nyali"},
["nlk"] = {"Ninia Yali"},
["nll"] = {"Nihali"},
["nlm"] = {"Mankiyali"},
["nlo"] = {"Ngul"},
["nlq"] = {"Lao Naga"},
["nlu"] = {"Nchumbulu"},
["nlv"] = {"Orizaba Nahuatl"},
["nlw"] = {"Walangama"},
["nlx"] = {"Nahali"},
["nly"] = {"Nyamal"},
["nlz"] = {"Nalögo"},
["nma"] = {"Maram Naga"},
["nmb"] = {"Big Nambas", "V'ënen Taut"},
["nmc"] = {"Ngam"},
["nmd"] = {"Ndumu"},
["nme"] = {"Mzieme Naga"},
["nmf"] = {"Tangkhul Naga (India)"},
["nmg"] = {"Kwasio"},
["nmh"] = {"Monsang Naga"},
["nmi"] = {"Nyam"},
["nmj"] = {"Ngombe (Central African Republic)"},
["nmk"] = {"Namakura"},
["nml"] = {"Ndemli"},
["nmm"] = {"Manangba"},
["nmn"] = {"ǃXóõ"},
["nmo"] = {"Moyon Naga"},
["nmp"] = {"Nimanbur"},
["nmq"] = {"Nambya"},
["nmr"] = {"Nimbari"},
["nms"] = {"Letemboi"},
["nmt"] = {"Namonuito"},
["nmu"] = {"Northeast Maidu"},
["nmv"] = {"Ngamini"},
["nmw"] = {"Nimoa", "Rifao"},
["nmx"] = {"Nama (Papua New Guinea)"},
["nmy"] = {"Namuyi"},
["nmz"] = {"Nawdm"},
["nna"] = {"Nyangumarta"},
["nnb"] = {"Nande"},
["nnc"] = {"Nancere"},
["nnd"] = {"West Ambae"},
["nne"] = {"Ngandyera"},
["nnf"] = {"Ngaing"},
["nng"] = {"Maring Naga"},
["nnh"] = {"Ngiemboon"},
["nni"] = {"North Nuaulu"},
["nnj"] = {"Nyangatom"},
["nnk"] = {"Nankina"},
["nnl"] = {"Northern Rengma Naga"},
["nnm"] = {"Namia"},
["nnn"] = {"Ngete"},
["nnp"] = {"Wancho Naga"},
["nnq"] = {"Ngindo"},
["nnr"] = {"Narungga"},
["nnt"] = {"Nanticoke"},
["nnu"] = {"Dwang"},
["nnv"] = {"Nugunu (Australia)"},
["nnw"] = {"Southern Nuni"},
["nny"] = {"Nyangga"},
["nnz"] = {"Nda'nda'"},
["noa"] = {"Woun Meu"},
["noc"] = {"Nuk"},
["nod"] = {"Northern Thai"},
["noe"] = {"Nimadi"},
["nof"] = {"Nomane"},
["nog"] = {"Nogai"},
["noh"] = {"Nomu"},
["noi"] = {"Noiri"},
["noj"] = {"Nonuya"},
["nok"] = {"Nooksack"},
["nol"] = {"Nomlaki"},
["non"] = {"Old Norse"},
["nop"] = {"Numanggang"},
["noq"] = {"Ngongo"},
["nos"] = {"Eastern Nisu"},
["not"] = {"Nomatsiguenga"},
["nou"] = {"Ewage-Notu"},
["nov"] = {"Novial"},
["now"] = {"Nyambo"},
["noy"] = {"Noy"},
["noz"] = {"Nayi"},
["npa"] = {"Nar Phu"},
["npb"] = {"Nupbikha"},
["npg"] = {"Ponyo-Gongwang Naga"},
["nph"] = {"Phom Naga"},
["npi"] = {"Nepali (individual language)"},
["npl"] = {"Southeastern Puebla Nahuatl"},
["npn"] = {"Mondropolon"},
["npo"] = {"Pochuri Naga"},
["nps"] = {"Nipsan"},
["npu"] = {"Puimei Naga"},
["npx"] = {"Noipx"},
["npy"] = {"Napu"},
["nqg"] = {"Southern Nago"},
["nqk"] = {"Kura Ede Nago"},
["nql"] = {"Ngendelengo"},
["nqm"] = {"Ndom"},
["nqn"] = {"Nen"},
["nqo"] = {"N'Ko", "N’Ko"},
["nqq"] = {"Kyan-Karyaw Naga"},
["nqt"] = {"Nteng"},
["nqy"] = {"Akyaung Ari Naga"},
["nra"] = {"Ngom"},
["nrb"] = {"Nara"},
["nrc"] = {"Noric"},
["nre"] = {"Southern Rengma Naga"},
["nrf"] = {"Jèrriais", "Guernésiais", "Sercquiais"},
["nrg"] = {"Narango"},
["nri"] = {"Chokri Naga"},
["nrk"] = {"Ngarla"},
["nrl"] = {"Ngarluma"},
["nrm"] = {"Narom"},
["nrn"] = {"Norn"},
["nrp"] = {"North Picene"},
["nrr"] = {"Norra", "Nora"},
["nrt"] = {"Northern Kalapuya"},
["nru"] = {"Narua"},
["nrx"] = {"Ngurmbur"},
["nrz"] = {"Lala"},
["nsa"] = {"Sangtam Naga"},
["nsb"] = {"Lower Nossob"},
["nsc"] = {"Nshi"},
["nsd"] = {"Southern Nisu"},
["nse"] = {"Nsenga"},
["nsf"] = {"Northwestern Nisu"},
["nsg"] = {"Ngasa"},
["nsh"] = {"Ngoshie"},
["nsi"] = {"Nigerian Sign Language"},
["nsk"] = {"Naskapi"},
["nsl"] = {"Norwegian Sign Language"},
["nsm"] = {"Sumi Naga"},
["nsn"] = {"Nehan"},
["nso"] = {"Pedi", "Northern Sotho", "Sepedi"},
["nsp"] = {"Nepalese Sign Language"},
["nsq"] = {"Northern Sierra Miwok"},
["nsr"] = {"Maritime Sign Language"},
["nss"] = {"Nali"},
["nst"] = {"Tase Naga"},
["nsu"] = {"Sierra Negra Nahuatl"},
["nsv"] = {"Southwestern Nisu"},
["nsw"] = {"Navut"},
["nsx"] = {"Nsongo"},
["nsy"] = {"Nasal"},
["nsz"] = {"Nisenan"},
["ntd"] = {"Northern Tidung"},
["nte"] = {"Nathembo"},
["ntg"] = {"Ngantangarra"},
["nti"] = {"Natioro"},
["ntj"] = {"Ngaanyatjarra"},
["ntk"] = {"Ikoma-Nata-Isenye"},
["ntm"] = {"Nateni"},
["nto"] = {"Ntomba"},
["ntp"] = {"Northern Tepehuan"},
["ntr"] = {"Delo"},
["ntu"] = {"Natügu"},
["ntw"] = {"Nottoway"},
["ntx"] = {"Tangkhul Naga (Myanmar)"},
["nty"] = {"Mantsi"},
["ntz"] = {"Natanzi"},
["nua"] = {"Yuanga"},
["nub"] = {"Nubian languages"},
["nuc"] = {"Nukuini"},
["nud"] = {"Ngala"},
["nue"] = {"Ngundu"},
["nuf"] = {"Nusu"},
["nug"] = {"Nungali"},
["nuh"] = {"Ndunda"},
["nui"] = {"Ngumbi"},
["nuj"] = {"Nyole"},
["nuk"] = {"Nuu-chah-nulth", "Nuuchahnulth"},
["nul"] = {"Nusa Laut"},
["num"] = {"Niuafo'ou"},
["nun"] = {"Anong"},
["nuo"] = {"Nguôn"},
["nup"] = {"Nupe-Nupe-Tako"},
["nuq"] = {"Nukumanu"},
["nur"] = {"Nukuria"},
["nus"] = {"Nuer"},
["nut"] = {"Nung (Viet Nam)"},
["nuu"] = {"Ngbundu"},
["nuv"] = {"Northern Nuni"},
["nuw"] = {"Nguluwan"},
["nux"] = {"Mehek"},
["nuy"] = {"Nunggubuyu"},
["nuz"] = {"Tlamacazapa Nahuatl"},
["nvh"] = {"Nasarian"},
["nvm"] = {"Namiae"},
["nvo"] = {"Nyokon"},
["nwa"] = {"Nawathinehena"},
["nwb"] = {"Nyabwa"},
["nwc"] = {"Classical Newari", "Classical Nepal Bhasa", "Old Newari"},
["nwe"] = {"Ngwe"},
["nwg"] = {"Ngayawung"},
["nwi"] = {"Southwest Tanna"},
["nwm"] = {"Nyamusa-Molo"},
["nwo"] = {"Nauo"},
["nwr"] = {"Nawaru"},
["nww"] = {"Ndwewe"},
["nwx"] = {"Middle Newar"},
["nwy"] = {"Nottoway-Meherrin"},
["nxa"] = {"Nauete"},
["nxd"] = {"Ngando (Democratic Republic of Congo)"},
["nxe"] = {"Nage"},
["nxg"] = {"Ngad'a"},
["nxi"] = {"Nindi"},
["nxk"] = {"Koki Naga"},
["nxl"] = {"South Nuaulu"},
["nxm"] = {"Numidian"},
["nxn"] = {"Ngawun"},
["nxo"] = {"Ndambomo"},
["nxq"] = {"Naxi"},
["nxr"] = {"Ninggerum"},
["nxx"] = {"Nafri"},
["nyb"] = {"Nyangbo"},
["nyc"] = {"Nyanga-li"},
["nyd"] = {"Nyore", "Olunyole"},
["nye"] = {"Nyengo"},
["nyf"] = {"Giryama", "Kigiryama"},
["nyg"] = {"Nyindu"},
["nyh"] = {"Nyikina"},
["nyi"] = {"Ama (Sudan)"},
["nyj"] = {"Nyanga"},
["nyk"] = {"Nyaneka"},
["nyl"] = {"Nyeu"},
["nym"] = {"Nyamwezi"},
["nyn"] = {"Nyankole"},
["nyo"] = {"Nyoro"},
["nyp"] = {"Nyang'i"},
["nyq"] = {"Nayini"},
["nyr"] = {"Nyiha (Malawi)"},
["nys"] = {"Nyungar"},
["nyt"] = {"Nyawaygi"},
["nyu"] = {"Nyungwe"},
["nyv"] = {"Nyulnyul"},
["nyw"] = {"Nyaw"},
["nyx"] = {"Nganyaywana"},
["nyy"] = {"Nyakyusa-Ngonde"},
["nza"] = {"Tigon Mbembe"},
["nzb"] = {"Njebi"},
["nzd"] = {"Nzadi"},
["nzi"] = {"Nzima"},
["nzk"] = {"Nzakara"},
["nzm"] = {"Zeme Naga"},
["nzr"] = {"Dir-Nyamzak-Mbarimi"},
["nzs"] = {"New Zealand Sign Language"},
["nzu"] = {"Teke-Nzikou"},
["nzy"] = {"Nzakambay"},
["nzz"] = {"Nanga Dama Dogon"},
["oaa"] = {"Orok"},
["oac"] = {"Oroch"},
["oar"] = {"Old Aramaic (up to 700 BCE)", "Ancient Aramaic (up to 700 BCE)"},
["oav"] = {"Old Avar"},
["obi"] = {"Obispeño"},
["obk"] = {"Southern Bontok"},
["obl"] = {"Oblo"},
["obm"] = {"Moabite"},
["obo"] = {"Obo Manobo"},
["obr"] = {"Old Burmese"},
["obt"] = {"Old Breton"},
["obu"] = {"Obulom"},
["oca"] = {"Ocaina"},
["och"] = {"Old Chinese"},
["ocm"] = {"Old Cham"},
["oco"] = {"Old Cornish"},
["ocu"] = {"Atzingo Matlatzinca"},
["oda"] = {"Odut"},
["odk"] = {"Od"},
["odt"] = {"Old Dutch"},
["odu"] = {"Odual"},
["ofo"] = {"Ofo"},
["ofs"] = {"Old Frisian"},
["ofu"] = {"Efutop"},
["ogb"] = {"Ogbia"},
["ogc"] = {"Ogbah"},
["oge"] = {"Old Georgian"},
["ogg"] = {"Ogbogolo"},
["ogo"] = {"Khana"},
["ogu"] = {"Ogbronuagum"},
["oht"] = {"Old Hittite"},
["ohu"] = {"Old Hungarian"},
["oia"] = {"Oirata"},
["oie"] = {"Okolie"},
["oin"] = {"Inebu One"},
["ojb"] = {"Northwestern Ojibwa"},
["ojc"] = {"Central Ojibwa"},
["ojg"] = {"Eastern Ojibwa"},
["ojp"] = {"Old Japanese"},
["ojs"] = {"Severn Ojibwa"},
["ojv"] = {"Ontong Java"},
["ojw"] = {"Western Ojibwa"},
["oka"] = {"Okanagan"},
["okb"] = {"Okobo"},
["okc"] = {"Kobo"},
["okd"] = {"Okodia"},
["oke"] = {"Okpe (Southwestern Edo)"},
["okg"] = {"Koko Babangk"},
["okh"] = {"Koresh-e Rostam"},
["oki"] = {"Okiek"},
["okj"] = {"Oko-Juwoi"},
["okk"] = {"Kwamtim One"},
["okl"] = {"Old Kentish Sign Language"},
["okm"] = {"Middle Korean (10th-16th cent.)"},
["okn"] = {"Oki-No-Erabu"},
["oko"] = {"Old Korean (3rd-9th cent.)"},
["okr"] = {"Kirike"},
["oks"] = {"Oko-Eni-Osayen"},
["oku"] = {"Oku"},
["okv"] = {"Orokaiva"},
["okx"] = {"Okpe (Northwestern Edo)"},
["okz"] = {"Old Khmer"},
["ola"] = {"Walungge"},
["old"] = {"Mochi"},
["ole"] = {"Olekha"},
["olk"] = {"Olkol"},
["olm"] = {"Oloma"},
["olo"] = {"Livvi"},
["olr"] = {"Olrat"},
["olt"] = {"Old Lithuanian"},
["olu"] = {"Kuvale"},
["oma"] = {"Omaha-Ponca"},
["omb"] = {"East Ambae"},
["omc"] = {"Mochica"},
["omg"] = {"Omagua"},
["omi"] = {"Omi"},
["omk"] = {"Omok"},
["oml"] = {"Ombo"},
["omn"] = {"Minoan"},
["omo"] = {"Utarmbung"},
["omp"] = {"Old Manipuri"},
["omq"] = {"Oto-Manguean languages"},
["omr"] = {"Old Marathi"},
["omt"] = {"Omotik"},
["omu"] = {"Omurano"},
["omv"] = {"Omotic languages"},
["omw"] = {"South Tairora"},
["omx"] = {"Old Mon"},
["omy"] = {"Old Malay"},
["ona"] = {"Ona"},
["onb"] = {"Lingao"},
["one"] = {"Oneida"},
["ong"] = {"Olo"},
["oni"] = {"Onin"},
["onj"] = {"Onjob"},
["onk"] = {"Kabore One"},
["onn"] = {"Onobasulu"},
["ono"] = {"Onondaga"},
["onp"] = {"Sartang"},
["onr"] = {"Northern One"},
["ons"] = {"Ono"},
["ont"] = {"Ontenu"},
["onu"] = {"Unua"},
["onw"] = {"Old Nubian"},
["onx"] = {"Onin Based Pidgin"},
["ood"] = {"Tohono O'odham"},
["oog"] = {"Ong"},
["oon"] = {"Önge"},
["oor"] = {"Oorlams"},
["oos"] = {"Old Ossetic"},
["opa"] = {"Okpamheri"},
["opk"] = {"Kopkaka"},
["opm"] = {"Oksapmin"},
["opo"] = {"Opao"},
["opt"] = {"Opata"},
["opy"] = {"Ofayé"},
["ora"] = {"Oroha"},
["orc"] = {"Orma"},
["ore"] = {"Orejón"},
["org"] = {"Oring"},
["orh"] = {"Oroqen"},
["orn"] = {"Orang Kanaq"},
["oro"] = {"Orokolo"},
["orr"] = {"Oruma"},
["ors"] = {"Orang Seletar"},
["ort"] = {"Adivasi Oriya"},
["oru"] = {"Ormuri"},
["orv"] = {"Old Russian"},
["orw"] = {"Oro Win"},
["orx"] = {"Oro"},
["ory"] = {"Odia (individual language)", "Oriya (individual language)"},
["orz"] = {"Ormu"},
["osa"] = {"Osage"},
["osc"] = {"Oscan"},
["osi"] = {"Osing"},
["osn"] = {"Old Sundanese"},
["oso"] = {"Ososo"},
["osp"] = {"Old Spanish"},
["ost"] = {"Osatu"},
["osu"] = {"Southern One"},
["osx"] = {"Old Saxon"},
["ota"] = {"Ottoman Turkish (1500-1928)"},
["otb"] = {"Old Tibetan"},
["otd"] = {"Ot Danum"},
["ote"] = {"Mezquital Otomi"},
["oti"] = {"Oti"},
["otk"] = {"Old Turkish"},
["otl"] = {"Tilapa Otomi"},
["otm"] = {"Eastern Highland Otomi"},
["otn"] = {"Tenango Otomi"},
["oto"] = {"Otomian languages"},
["otq"] = {"Querétaro Otomi"},
["otr"] = {"Otoro"},
["ots"] = {"Estado de México Otomi"},
["ott"] = {"Temoaya Otomi"},
["otu"] = {"Otuke"},
["otw"] = {"Ottawa"},
["otx"] = {"Texcatepec Otomi"},
["oty"] = {"Old Tamil"},
["otz"] = {"Ixtenco Otomi"},
["oua"] = {"Tagargrent"},
["oub"] = {"Glio-Oubi"},
["oue"] = {"Oune"},
["oui"] = {"Old Uighur"},
["oum"] = {"Ouma"},
["ovd"] = {"Elfdalian", "Övdalian"},
["owi"] = {"Owiniga"},
["owl"] = {"Old Welsh"},
["oyb"] = {"Oy"},
["oyd"] = {"Oyda"},
["oym"] = {"Wayampi"},
["oyy"] = {"Oya'oya"},
["ozm"] = {"Koonzime"},
["paa"] = {"Papuan languages"},
["pab"] = {"Parecís"},
["pac"] = {"Pacoh"},
["pad"] = {"Paumarí"},
["pae"] = {"Pagibete"},
["paf"] = {"Paranawát"},
["pag"] = {"Pangasinan"},
["pah"] = {"Tenharim"},
["pai"] = {"Pe"},
["pak"] = {"Parakanã"},
["pal"] = {"Pahlavi"},
["pam"] = {"Pampanga", "Kapampangan"},
["pao"] = {"Northern Paiute"},
["pap"] = {"Papiamento"},
["paq"] = {"Parya"},
["par"] = {"Panamint", "Timbisha"},
["pas"] = {"Papasena"},
["pau"] = {"Palauan"},
["pav"] = {"Pakaásnovos"},
["paw"] = {"Pawnee"},
["pax"] = {"Pankararé"},
["pay"] = {"Pech"},
["paz"] = {"Pankararú"},
["pbb"] = {"Páez"},
["pbc"] = {"Patamona"},
["pbe"] = {"Mezontla Popoloca"},
["pbf"] = {"Coyotepec Popoloca"},
["pbg"] = {"Paraujano"},
["pbh"] = {"E'ñapa Woromaipu"},
["pbi"] = {"Parkwa"},
["pbl"] = {"Mak (Nigeria)"},
["pbm"] = {"Puebla Mazatec"},
["pbn"] = {"Kpasam"},
["pbo"] = {"Papel"},
["pbp"] = {"Badyara"},
["pbr"] = {"Pangwa"},
["pbs"] = {"Central Pame"},
["pbt"] = {"Southern Pashto"},
["pbu"] = {"Northern Pashto"},
["pbv"] = {"Pnar"},
["pby"] = {"Pyu (Papua New Guinea)"},
["pca"] = {"Santa Inés Ahuatempan Popoloca"},
["pcb"] = {"Pear"},
["pcc"] = {"Bouyei"},
["pcd"] = {"Picard"},
["pce"] = {"Ruching Palaung"},
["pcf"] = {"Paliyan"},
["pcg"] = {"Paniya"},
["pch"] = {"Pardhan"},
["pci"] = {"Duruwa"},
["pcj"] = {"Parenga"},
["pck"] = {"Paite Chin"},
["pcl"] = {"Pardhi"},
["pcm"] = {"Nigerian Pidgin"},
["pcn"] = {"Piti"},
["pcp"] = {"Pacahuara"},
["pcw"] = {"Pyapun"},
["pda"] = {"Anam"},
["pdc"] = {"Pennsylvania German"},
["pdi"] = {"Pa Di"},
["pdn"] = {"Podena", "Fedan"},
["pdo"] = {"Padoe"},
["pdt"] = {"Plautdietsch"},
["pdu"] = {"Kayan"},
["pea"] = {"Peranakan Indonesian"},
["peb"] = {"Eastern Pomo"},
["ped"] = {"Mala (Papua New Guinea)"},
["pee"] = {"Taje"},
["pef"] = {"Northeastern Pomo"},
["peg"] = {"Pengo"},
["peh"] = {"Bonan"},
["pei"] = {"Chichimeca-Jonaz"},
["pej"] = {"Northern Pomo"},
["pek"] = {"Penchal"},
["pel"] = {"Pekal"},
["pem"] = {"Phende"},
["peo"] = {"Old Persian (ca. 600-400 B.C.)"},
["pep"] = {"Kunja"},
["peq"] = {"Southern Pomo"},
["pes"] = {"Iranian Persian"},
["pev"] = {"Pémono"},
["pex"] = {"Petats"},
["pey"] = {"Petjo"},
["pez"] = {"Eastern Penan"},
["pfa"] = {"Pááfang"},
["pfe"] = {"Pere"},
["pfl"] = {"Pfaelzisch"},
["pga"] = {"Sudanese Creole Arabic"},
["pgd"] = {"Gāndhārī"},
["pgg"] = {"Pangwali"},
["pgi"] = {"Pagi"},
["pgk"] = {"Rerep"},
["pgl"] = {"Primitive Irish"},
["pgn"] = {"Paelignian"},
["pgs"] = {"Pangseng"},
["pgu"] = {"Pagu"},
["pgz"] = {"Papua New Guinean Sign Language"},
["pha"] = {"Pa-Hng"},
["phd"] = {"Phudagi"},
["phg"] = {"Phuong"},
["phh"] = {"Phukha"},
["phi"] = {"Philippine languages"},
["phj"] = {"Pahari"},
["phk"] = {"Phake"},
["phl"] = {"Phalura", "Palula"},
["phm"] = {"Phimbi"},
["phn"] = {"Phoenician"},
["pho"] = {"Phunoi"},
["phq"] = {"Phana'"},
["phr"] = {"Pahari-Potwari"},
["pht"] = {"Phu Thai"},
["phu"] = {"Phuan"},
["phv"] = {"Pahlavani"},
["phw"] = {"Phangduwali"},
["pia"] = {"Pima Bajo"},
["pib"] = {"Yine"},
["pic"] = {"Pinji"},
["pid"] = {"Piaroa"},
["pie"] = {"Piro"},
["pif"] = {"Pingelapese"},
["pig"] = {"Pisabo"},
["pih"] = {"Pitcairn-Norfolk"},
["pij"] = {"Pijao"},
["pil"] = {"Yom"},
["pim"] = {"Powhatan"},
["pin"] = {"Piame"},
["pio"] = {"Piapoco"},
["pip"] = {"Pero"},
["pir"] = {"Piratapuyo"},
["pis"] = {"Pijin"},
["pit"] = {"Pitta Pitta"},
["piu"] = {"Pintupi-Luritja"},
["piv"] = {"Pileni", "Vaeakau-Taumako"},
["piw"] = {"Pimbwe"},
["pix"] = {"Piu"},
["piy"] = {"Piya-Kwonci"},
["piz"] = {"Pije"},
["pjt"] = {"Pitjantjatjara"},
["pka"] = {"Ardhamāgadhī Prākrit"},
["pkb"] = {"Pokomo", "Kipfokomo"},
["pkc"] = {"Paekche"},
["pkg"] = {"Pak-Tong"},
["pkh"] = {"Pankhu"},
["pkn"] = {"Pakanha"},
["pko"] = {"Pökoot"},
["pkp"] = {"Pukapuka"},
["pkr"] = {"Attapady Kurumba"},
["pks"] = {"Pakistan Sign Language"},
["pkt"] = {"Maleng"},
["pku"] = {"Paku"},
["pla"] = {"Miani"},
["plb"] = {"Polonombauk"},
["plc"] = {"Central Palawano"},
["pld"] = {"Polari"},
["ple"] = {"Palu'e"},
["plf"] = {"Central Malayo-Polynesian languages"},
["plg"] = {"Pilagá"},
["plh"] = {"Paulohi"},
["plk"] = {"Kohistani Shina"},
["pll"] = {"Shwe Palaung"},
["pln"] = {"Palenquero"},
["plo"] = {"Oluta Popoluca"},
["plq"] = {"Palaic"},
["plr"] = {"Palaka Senoufo"},
["pls"] = {"San Marcos Tlacoyalco Popoloca", "San Marcos Tlalcoyalco Popoloca"},
["plt"] = {"Plateau Malagasy"},
["plu"] = {"Palikúr"},
["plv"] = {"Southwest Palawano"},
["plw"] = {"Brooke's Point Palawano"},
["ply"] = {"Bolyu"},
["plz"] = {"Paluan"},
["pma"] = {"Paama"},
["pmb"] = {"Pambia"},
["pmd"] = {"Pallanganmiddang"},
["pme"] = {"Pwaamei"},
["pmf"] = {"Pamona"},
["pmh"] = {"Māhārāṣṭri Prākrit"},
["pmi"] = {"Northern Pumi"},
["pmj"] = {"Southern Pumi"},
["pml"] = {"Lingua Franca"},
["pmm"] = {"Pomo"},
["pmn"] = {"Pam"},
["pmo"] = {"Pom"},
["pmq"] = {"Northern Pame"},
["pmr"] = {"Paynamar"},
["pms"] = {"Piemontese"},
["pmt"] = {"Tuamotuan"},
["pmw"] = {"Plains Miwok"},
["pmx"] = {"Poumei Naga"},
["pmy"] = {"Papuan Malay"},
["pmz"] = {"Southern Pame"},
["pna"] = {"Punan Bah-Biau"},
["pnb"] = {"Western Panjabi"},
["pnc"] = {"Pannei"},
["pnd"] = {"Mpinda"},
["pne"] = {"Western Penan"},
["png"] = {"Pangu", "Pongu"},
["pnh"] = {"Penrhyn"},
["pni"] = {"Aoheng"},
["pnj"] = {"Pinjarup"},
["pnk"] = {"Paunaka"},
["pnl"] = {"Paleni"},
["pnm"] = {"Punan Batu 1"},
["pnn"] = {"Pinai-Hagahai"},
["pno"] = {"Panobo"},
["pnp"] = {"Pancana"},
["pnq"] = {"Pana (Burkina Faso)"},
["pnr"] = {"Panim"},
["pns"] = {"Ponosakan"},
["pnt"] = {"Pontic"},
["pnu"] = {"Jiongnai Bunu"},
["pnv"] = {"Pinigura"},
["pnw"] = {"Banyjima", "Panytyima"},
["pnx"] = {"Phong-Kniang"},
["pny"] = {"Pinyin"},
["pnz"] = {"Pana (Central African Republic)"},
["poc"] = {"Poqomam"},
["poe"] = {"San Juan Atzingo Popoloca"},
["pof"] = {"Poke"},
["pog"] = {"Potiguára"},
["poh"] = {"Poqomchi'"},
["poi"] = {"Highland Popoluca"},
["pok"] = {"Pokangá"},
["pom"] = {"Southeastern Pomo"},
["pon"] = {"Pohnpeian"},
["poo"] = {"Central Pomo"},
["pop"] = {"Pwapwâ"},
["poq"] = {"Texistepec Popoluca"},
["pos"] = {"Sayula Popoluca"},
["pot"] = {"Potawatomi"},
["pov"] = {"Upper Guinea Crioulo"},
["pow"] = {"San Felipe Otlaltepec Popoloca"},
["pox"] = {"Polabian"},
["poy"] = {"Pogolo"},
["poz"] = {"Malayo-Polynesian languages"},
["ppe"] = {"Papi"},
["ppi"] = {"Paipai"},
["ppk"] = {"Uma"},
["ppl"] = {"Pipil", "Nicarao"},
["ppm"] = {"Papuma"},
["ppn"] = {"Papapana"},
["ppo"] = {"Folopa"},
["ppp"] = {"Pelende"},
["ppq"] = {"Pei"},
["pps"] = {"San Luís Temalacayuca Popoloca"},
["ppt"] = {"Pare"},
["ppu"] = {"Papora"},
["pqa"] = {"Pa'a"},
["pqe"] = {"Eastern Malayo-Polynesian languages"},
["pqm"] = {"Malecite-Passamaquoddy"},
["pqw"] = {"Western Malayo-Polynesian languages"},
["pra"] = {"Prakrit languages"},
["prc"] = {"Parachi"},
["prd"] = {"Parsi-Dari"},
["pre"] = {"Principense"},
["prf"] = {"Paranan"},
["prg"] = {"Prussian"},
["prh"] = {"Porohanon"},
["pri"] = {"Paicî"},
["prk"] = {"Parauk"},
["prl"] = {"Peruvian Sign Language"},
["prm"] = {"Kibiri"},
["prn"] = {"Prasuni"},
["pro"] = {"Old Provençal (to 1500)", "Old Occitan (to 1500)"},
["prq"] = {"Ashéninka Perené"},
["prr"] = {"Puri"},
["prs"] = {"Dari", "Afghan Persian"},
["prt"] = {"Phai"},
["pru"] = {"Puragi"},
["prw"] = {"Parawen"},
["prx"] = {"Purik"},
["prz"] = {"Providencia Sign Language"},
["psa"] = {"Asue Awyu"},
["psc"] = {"Iranian Sign Language", "Persian Sign Language"},
["psd"] = {"Plains Indian Sign Language"},
["pse"] = {"Central Malay"},
["psg"] = {"Penang Sign Language"},
["psh"] = {"Southwest Pashai", "Southwest Pashayi"},
["psi"] = {"Southeast Pashai", "Southeast Pashayi"},
["psl"] = {"Puerto Rican Sign Language"},
["psm"] = {"Pauserna"},
["psn"] = {"Panasuan"},
["pso"] = {"Polish Sign Language"},
["psp"] = {"Philippine Sign Language"},
["psq"] = {"Pasi"},
["psr"] = {"Portuguese Sign Language"},
["pss"] = {"Kaulong"},
["pst"] = {"Central Pashto"},
["psu"] = {"Sauraseni Prākrit"},
["psw"] = {"Port Sandwich"},
["psy"] = {"Piscataway"},
["pta"] = {"Pai Tavytera"},
["pth"] = {"Pataxó Hã-Ha-Hãe"},
["pti"] = {"Pindiini", "Wangkatha"},
["ptn"] = {"Patani"},
["pto"] = {"Zo'é"},
["ptp"] = {"Patep"},
["ptq"] = {"Pattapu"},
["ptr"] = {"Piamatsina"},
["ptt"] = {"Enrekang"},
["ptu"] = {"Bambam"},
["ptv"] = {"Port Vato"},
["ptw"] = {"Pentlatch"},
["pty"] = {"Pathiya"},
["pua"] = {"Western Highland Purepecha"},
["pub"] = {"Purum"},
["puc"] = {"Punan Merap"},
["pud"] = {"Punan Aput"},
["pue"] = {"Puelche"},
["puf"] = {"Punan Merah"},
["pug"] = {"Phuie"},
["pui"] = {"Puinave"},
["puj"] = {"Punan Tubu"},
["pum"] = {"Puma"},
["puo"] = {"Puoc"},
["pup"] = {"Pulabu"},
["puq"] = {"Puquina"},
["pur"] = {"Puruborá"},
["put"] = {"Putoh"},
["puu"] = {"Punu"},
["puw"] = {"Puluwatese"},
["pux"] = {"Puare"},
["puy"] = {"Purisimeño"},
["pwa"] = {"Pawaia"},
["pwb"] = {"Panawa"},
["pwg"] = {"Gapapaiwa"},
["pwi"] = {"Patwin"},
["pwm"] = {"Molbog"},
["pwn"] = {"Paiwan"},
["pwo"] = {"Pwo Western Karen"},
["pwr"] = {"Powari"},
["pww"] = {"Pwo Northern Karen"},
["pxm"] = {"Quetzaltepec Mixe"},
["pye"] = {"Pye Krumen"},
["pym"] = {"Fyam"},
["pyn"] = {"Poyanáwa"},
["pys"] = {"Paraguayan Sign Language", "Lengua de Señas del Paraguay"},
["pyu"] = {"Puyuma"},
["pyx"] = {"Pyu (Myanmar)"},
["pyy"] = {"Pyen"},
["pze"] = {"Pesse"},
["pzh"] = {"Pazeh"},
["pzn"] = {"Jejara Naga", "Para Naga"},
["qua"] = {"Quapaw"},
["qub"] = {"Huallaga Huánuco Quechua"},
["quc"] = {"K'iche'", "Quiché"},
["qud"] = {"Calderón Highland Quichua"},
["quf"] = {"Lambayeque Quechua"},
["qug"] = {"Chimborazo Highland Quichua"},
["quh"] = {"South Bolivian Quechua"},
["qui"] = {"Quileute"},
["quk"] = {"Chachapoyas Quechua"},
["qul"] = {"North Bolivian Quechua"},
["qum"] = {"Sipacapense"},
["qun"] = {"Quinault"},
["qup"] = {"Southern Pastaza Quechua"},
["quq"] = {"Quinqui"},
["qur"] = {"Yanahuanca Pasco Quechua"},
["qus"] = {"Santiago del Estero Quichua"},
["quv"] = {"Sacapulteco"},
["quw"] = {"Tena Lowland Quichua"},
["qux"] = {"Yauyos Quechua"},
["quy"] = {"Ayacucho Quechua"},
["quz"] = {"Cusco Quechua"},
["qva"] = {"Ambo-Pasco Quechua"},
["qvc"] = {"Cajamarca Quechua"},
["qve"] = {"Eastern Apurímac Quechua"},
["qvh"] = {"Huamalíes-Dos de Mayo Huánuco Quechua"},
["qvi"] = {"Imbabura Highland Quichua"},
["qvj"] = {"Loja Highland Quichua"},
["qvl"] = {"Cajatambo North Lima Quechua"},
["qvm"] = {"Margos-Yarowilca-Lauricocha Quechua"},
["qvn"] = {"North Junín Quechua"},
["qvo"] = {"Napo Lowland Quechua"},
["qvp"] = {"Pacaraos Quechua"},
["qvs"] = {"San Martín Quechua"},
["qvw"] = {"Huaylla Wanca Quechua"},
["qvy"] = {"Queyu"},
["qvz"] = {"Northern Pastaza Quichua"},
["qwa"] = {"Corongo Ancash Quechua"},
["qwc"] = {"Classical Quechua"},
["qwe"] = {"Quechuan (family)"},
["qwh"] = {"Huaylas Ancash Quechua"},
["qwm"] = {"Kuman (Russia)"},
["qws"] = {"Sihuas Ancash Quechua"},
["qwt"] = {"Kwalhioqua-Tlatskanai"},
["qxa"] = {"Chiquián Ancash Quechua"},
["qxc"] = {"Chincha Quechua"},
["qxh"] = {"Panao Huánuco Quechua"},
["qxl"] = {"Salasaca Highland Quichua"},
["qxn"] = {"Northern Conchucos Ancash Quechua"},
["qxo"] = {"Southern Conchucos Ancash Quechua"},
["qxp"] = {"Puno Quechua"},
["qxq"] = {"Qashqa'i"},
["qxr"] = {"Cañar Highland Quichua"},
["qxs"] = {"Southern Qiang"},
["qxt"] = {"Santa Ana de Tusi Pasco Quechua"},
["qxu"] = {"Arequipa-La Unión Quechua"},
["qxw"] = {"Jauja Wanca Quechua"},
["qya"] = {"Quenya"},
["qyp"] = {"Quiripi"},
["raa"] = {"Dungmali"},
["rab"] = {"Camling"},
["rac"] = {"Rasawa"},
["rad"] = {"Rade"},
["raf"] = {"Western Meohang"},
["rag"] = {"Logooli", "Lulogooli"},
["rah"] = {"Rabha"},
["rai"] = {"Ramoaaina"},
["raj"] = {"Rajasthani"},
["rak"] = {"Tulu-Bohuai"},
["ral"] = {"Ralte"},
["ram"] = {"Canela"},
["ran"] = {"Riantana"},
["rao"] = {"Rao"},
["rap"] = {"Rapanui"},
["raq"] = {"Saam"},
["rar"] = {"Rarotongan", "Cook Islands Maori"},
["ras"] = {"Tegali"},
["rat"] = {"Razajerdi"},
["rau"] = {"Raute"},
["rav"] = {"Sampang"},
["raw"] = {"Rawang"},
["rax"] = {"Rang"},
["ray"] = {"Rapa"},
["raz"] = {"Rahambuu"},
["rbb"] = {"Rumai Palaung"},
["rbk"] = {"Northern Bontok"},
["rbl"] = {"Miraya Bikol"},
["rbp"] = {"Barababaraba"},
["rcf"] = {"Réunion Creole French"},
["rdb"] = {"Rudbari"},
["rea"] = {"Rerau"},
["reb"] = {"Rembong"},
["ree"] = {"Rejang Kayan"},
["reg"] = {"Kara (Tanzania)"},
["rei"] = {"Reli"},
["rej"] = {"Rejang"},
["rel"] = {"Rendille"},
["rem"] = {"Remo"},
["ren"] = {"Rengao"},
["rer"] = {"Rer Bare"},
["res"] = {"Reshe"},
["ret"] = {"Retta"},
["rey"] = {"Reyesano"},
["rga"] = {"Roria"},
["rge"] = {"Romano-Greek"},
["rgk"] = {"Rangkas"},
["rgn"] = {"Romagnol"},
["rgr"] = {"Resígaro"},
["rgs"] = {"Southern Roglai"},
["rgu"] = {"Ringgou"},
["rhg"] = {"Rohingya"},
["rhp"] = {"Yahang"},
["ria"] = {"Riang (India)"},
["rib"] = {"Bribri Sign Language"},
["rif"] = {"Tarifit"},
["ril"] = {"Riang Lang", "Riang (Myanmar)"},
["rim"] = {"Nyaturu"},
["rin"] = {"Nungu"},
["rir"] = {"Ribun"},
["rit"] = {"Ritharrngu"},
["riu"] = {"Riung"},
["rjg"] = {"Rajong"},
["rji"] = {"Raji"},
["rjs"] = {"Rajbanshi"},
["rka"] = {"Kraol"},
["rkb"] = {"Rikbaktsa"},
["rkh"] = {"Rakahanga-Manihiki"},
["rki"] = {"Rakhine"},
["rkm"] = {"Marka"},
["rkt"] = {"Rangpuri", "Kamta"},
["rkw"] = {"Arakwal"},
["rma"] = {"Rama"},
["rmb"] = {"Rembarrnga"},
["rmc"] = {"Carpathian Romani"},
["rmd"] = {"Traveller Danish"},
["rme"] = {"Angloromani"},
["rmf"] = {"Kalo Finnish Romani"},
["rmg"] = {"Traveller Norwegian"},
["rmh"] = {"Murkim"},
["rmi"] = {"Lomavren"},
["rmk"] = {"Romkun"},
["rml"] = {"Baltic Romani"},
["rmm"] = {"Roma"},
["rmn"] = {"Balkan Romani"},
["rmo"] = {"Sinte Romani"},
["rmp"] = {"Rempi"},
["rmq"] = {"Caló"},
["rms"] = {"Romanian Sign Language"},
["rmt"] = {"Domari"},
["rmu"] = {"Tavringer Romani"},
["rmv"] = {"Romanova"},
["rmw"] = {"Welsh Romani"},
["rmx"] = {"Romam"},
["rmy"] = {"Vlax Romani"},
["rmz"] = {"Marma"},
["rnb"] = {"Brunca Sign Language"},
["rnd"] = {"Ruund"},
["rng"] = {"Ronga"},
["rnl"] = {"Ranglong"},
["rnn"] = {"Roon"},
["rnp"] = {"Rongpo"},
["rnr"] = {"Nari Nari"},
["rnw"] = {"Rungwa"},
["roa"] = {"Romance languages"},
["rob"] = {"Tae'"},
["roc"] = {"Cacgia Roglai"},
["rod"] = {"Rogo"},
["roe"] = {"Ronji"},
["rof"] = {"Rombo"},
["rog"] = {"Northern Roglai"},
["rol"] = {"Romblomanon"},
["rom"] = {"Romany"},
["roo"] = {"Rotokas"},
["rop"] = {"Kriol"},
["ror"] = {"Rongga"},
["rou"] = {"Runga"},
["row"] = {"Dela-Oenale"},
["rpn"] = {"Repanbitip"},
["rpt"] = {"Rapting"},
["rri"] = {"Ririo"},
["rro"] = {"Waima"},
["rrt"] = {"Arritinngithigh"},
["rsb"] = {"Romano-Serbian"},
["rsk"] = {"Ruthenian", "Rusnak"},
["rsl"] = {"Russian Sign Language"},
["rsm"] = {"Miriwoong Sign Language"},
["rsn"] = {"Rwandan Sign Language"},
["rsw"] = {"Rishiwa"},
["rtc"] = {"Rungtu Chin"},
["rth"] = {"Ratahan"},
["rtm"] = {"Rotuman"},
["rts"] = {"Yurats"},
["rtw"] = {"Rathawi"},
["rub"] = {"Gungu"},
["ruc"] = {"Ruuli"},
["rue"] = {"Rusyn"},
["ruf"] = {"Luguru"},
["rug"] = {"Roviana"},
["ruh"] = {"Ruga"},
["rui"] = {"Rufiji"},
["ruk"] = {"Che"},
["ruo"] = {"Istro Romanian"},
["rup"] = {"Macedo-Romanian", "Aromanian", "Arumanian"},
["ruq"] = {"Megleno Romanian"},
["rut"] = {"Rutul"},
["ruu"] = {"Lanas Lobu"},
["ruy"] = {"Mala (Nigeria)"},
["ruz"] = {"Ruma"},
["rwa"] = {"Rawo"},
["rwk"] = {"Rwa"},
["rwl"] = {"Ruwila"},
["rwm"] = {"Amba (Uganda)"},
["rwo"] = {"Rawa"},
["rwr"] = {"Marwari (India)"},
["rxd"] = {"Ngardi"},
["rxw"] = {"Karuwali", "Garuwali"},
["ryn"] = {"Northern Amami-Oshima"},
["rys"] = {"Yaeyama"},
["ryu"] = {"Central Okinawan"},
["rzh"] = {"Rāziḥī"},
["saa"] = {"Saba"},
["sab"] = {"Buglere"},
["sac"] = {"Meskwaki"},
["sad"] = {"Sandawe"},
["sae"] = {"Sabanê"},
["saf"] = {"Safaliba"},
["sah"] = {"Yakut"},
["sai"] = {"South American Indian languages"},
["saj"] = {"Sahu"},
["sak"] = {"Sake"},
["sal"] = {"Salishan languages"},
["sam"] = {"Samaritan Aramaic"},
["sao"] = {"Sause"},
["saq"] = {"Samburu"},
["sar"] = {"Saraveca"},
["sas"] = {"Sasak"},
["sat"] = {"Santali"},
["sau"] = {"Saleman"},
["sav"] = {"Saafi-Saafi"},
["saw"] = {"Sawi"},
["sax"] = {"Sa"},
["say"] = {"Saya"},
["saz"] = {"Saurashtra"},
["sba"] = {"Ngambay"},
["sbb"] = {"Simbo"},
["sbc"] = {"Kele (Papua New Guinea)"},
["sbd"] = {"Southern Samo"},
["sbe"] = {"Saliba"},
["sbf"] = {"Chabu", "Shabo"},
["sbg"] = {"Seget"},
["sbh"] = {"Sori-Harengan"},
["sbi"] = {"Seti"},
["sbj"] = {"Surbakhal"},
["sbk"] = {"Safwa"},
["sbl"] = {"Botolan Sambal"},
["sbm"] = {"Sagala"},
["sbn"] = {"Sindhi Bhil"},
["sbo"] = {"Sabüm"},
["sbp"] = {"Sangu (Tanzania)"},
["sbq"] = {"Sileibi"},
["sbr"] = {"Sembakung Murut"},
["sbs"] = {"Subiya"},
["sbt"] = {"Kimki"},
["sbu"] = {"Stod Bhoti"},
["sbv"] = {"Sabine"},
["sbw"] = {"Simba"},
["sbx"] = {"Seberuang"},
["sby"] = {"Soli"},
["sbz"] = {"Sara Kaba"},
["scb"] = {"Chut"},
["sce"] = {"Dongxiang"},
["scf"] = {"San Miguel Creole French"},
["scg"] = {"Sanggau"},
["sch"] = {"Sakachep"},
["sci"] = {"Sri Lankan Creole Malay"},
["sck"] = {"Sadri"},
["scl"] = {"Shina"},
["scn"] = {"Sicilian"},
["sco"] = {"Scots"},
["scp"] = {"Hyolmo", "Helambu Sherpa"},
["scq"] = {"Sa'och"},
["scs"] = {"North Slavey"},
["sct"] = {"Southern Katang"},
["scu"] = {"Shumcho"},
["scv"] = {"Sheni"},
["scw"] = {"Sha"},
["scx"] = {"Sicel"},
["sda"] = {"Toraja-Sa'dan"},
["sdb"] = {"Shabak"},
["sdc"] = {"Sassarese Sardinian"},
["sde"] = {"Surubu"},
["sdf"] = {"Sarli"},
["sdg"] = {"Savi"},
["sdh"] = {"Southern Kurdish"},
["sdj"] = {"Suundi"},
["sdk"] = {"Sos Kundi"},
["sdl"] = {"Saudi Arabian Sign Language"},
["sdn"] = {"Gallurese Sardinian"},
["sdo"] = {"Bukar-Sadung Bidayuh"},
["sdp"] = {"Sherdukpen"},
["sdq"] = {"Semandang"},
["sdr"] = {"Oraon Sadri"},
["sds"] = {"Sened"},
["sdt"] = {"Shuadit"},
["sdu"] = {"Sarudu"},
["sdv"] = {"Eastern Sudanic languages"},
["sdx"] = {"Sibu Melanau"},
["sdz"] = {"Sallands"},
["sea"] = {"Semai"},
["seb"] = {"Shempire Senoufo"},
["sec"] = {"Sechelt"},
["sed"] = {"Sedang"},
["see"] = {"Seneca"},
["sef"] = {"Cebaara Senoufo"},
["seg"] = {"Segeju"},
["seh"] = {"Sena"},
["sei"] = {"Seri"},
["sej"] = {"Sene"},
["sek"] = {"Sekani"},
["sel"] = {"Selkup"},
["sem"] = {"Semitic languages"},
["sen"] = {"Nanerigé Sénoufo"},
["seo"] = {"Suarmin"},
["sep"] = {"Sìcìté Sénoufo"},
["seq"] = {"Senara Sénoufo"},
["ser"] = {"Serrano"},
["ses"] = {"Koyraboro Senni Songhai"},
["set"] = {"Sentani"},
["seu"] = {"Serui-Laut"},
["sev"] = {"Nyarafolo Senoufo"},
["sew"] = {"Sewa Bay"},
["sey"] = {"Secoya"},
["sez"] = {"Senthang Chin"},
["sfb"] = {"Langue des signes de Belgique Francophone", "French Belgian Sign Language"},
["sfe"] = {"Eastern Subanen"},
["sfm"] = {"Small Flowery Miao"},
["sfs"] = {"South African Sign Language"},
["sfw"] = {"Sehwi"},
["sga"] = {"Old Irish (to 900)"},
["sgb"] = {"Mag-antsi Ayta"},
["sgc"] = {"Kipsigis"},
["sgd"] = {"Surigaonon"},
["sge"] = {"Segai"},
["sgg"] = {"Swiss-German Sign Language"},
["sgh"] = {"Shughni"},
["sgi"] = {"Suga"},
["sgj"] = {"Surgujia"},
["sgk"] = {"Sangkong"},
["sgm"] = {"Singa"},
["sgn"] = {"Sign languages"},
["sgp"] = {"Singpho"},
["sgr"] = {"Sangisari"},
["sgs"] = {"Samogitian"},
["sgt"] = {"Brokpake"},
["sgu"] = {"Salas"},
["sgw"] = {"Sebat Bet Gurage"},
["sgx"] = {"Sierra Leone Sign Language"},
["sgy"] = {"Sanglechi"},
["sgz"] = {"Sursurunga"},
["sha"] = {"Shall-Zwall"},
["shb"] = {"Ninam"},
["shc"] = {"Sonde"},
["shd"] = {"Kundal Shahi"},
["she"] = {"Sheko"},
["shg"] = {"Shua"},
["shh"] = {"Shoshoni"},
["shi"] = {"Tachelhit"},
["shj"] = {"Shatt"},
["shk"] = {"Shilluk"},
["shl"] = {"Shendu"},
["shm"] = {"Shahrudi"},
["shn"] = {"Shan"},
["sho"] = {"Shanga"},
["shp"] = {"Shipibo-Conibo"},
["shq"] = {"Sala"},
["shr"] = {"Shi"},
["shs"] = {"Shuswap"},
["sht"] = {"Shasta"},
["shu"] = {"Chadian Arabic"},
["shv"] = {"Shehri"},
["shw"] = {"Shwai"},
["shx"] = {"She"},
["shy"] = {"Tachawit"},
["shz"] = {"Syenara Senoufo"},
["sia"] = {"Akkala Sami"},
["sib"] = {"Sebop"},
["sid"] = {"Sidamo"},
["sie"] = {"Simaa"},
["sif"] = {"Siamou"},
["sig"] = {"Paasaal"},
["sih"] = {"Zire", "Sîshëë"},
["sii"] = {"Shom Peng"},
["sij"] = {"Numbami"},
["sik"] = {"Sikiana"},
["sil"] = {"Tumulung Sisaala"},
["sim"] = {"Mende (Papua New Guinea)"},
["sio"] = {"Siouan languages"},
["sip"] = {"Sikkimese"},
["siq"] = {"Sonia"},
["sir"] = {"Siri"},
["sis"] = {"Siuslaw"},
["sit"] = {"Sino-Tibetan languages"},
["siu"] = {"Sinagen"},
["siv"] = {"Sumariup"},
["siw"] = {"Siwai"},
["six"] = {"Sumau"},
["siy"] = {"Sivandi"},
["siz"] = {"Siwi"},
["sja"] = {"Epena"},
["sjb"] = {"Sajau Basap"},
["sjd"] = {"Kildin Sami"},
["sje"] = {"Pite Sami"},
["sjg"] = {"Assangori"},
["sjk"] = {"Kemi Sami"},
["sjl"] = {"Sajalong", "Miji"},
["sjm"] = {"Mapun"},
["sjn"] = {"Sindarin"},
["sjo"] = {"Xibe"},
["sjp"] = {"Surjapuri"},
["sjr"] = {"Siar-Lak"},
["sjs"] = {"Senhaja De Srair"},
["sjt"] = {"Ter Sami"},
["sju"] = {"Ume Sami"},
["sjw"] = {"Shawnee"},
["ska"] = {"Skagit"},
["skb"] = {"Saek"},
["skc"] = {"Ma Manda"},
["skd"] = {"Southern Sierra Miwok"},
["ske"] = {"Seke (Vanuatu)"},
["skf"] = {"Sakirabiá"},
["skg"] = {"Sakalava Malagasy"},
["skh"] = {"Sikule"},
["ski"] = {"Sika"},
["skj"] = {"Seke (Nepal)"},
["skm"] = {"Kutong"},
["skn"] = {"Kolibugan Subanon"},
["sko"] = {"Seko Tengah"},
["skp"] = {"Sekapan"},
["skq"] = {"Sininkere"},
["skr"] = {"Saraiki", "Seraiki"},
["sks"] = {"Maia"},
["skt"] = {"Sakata"},
["sku"] = {"Sakao"},
["skv"] = {"Skou"},
["skw"] = {"Skepi Creole Dutch"},
["skx"] = {"Seko Padang"},
["sky"] = {"Sikaiana"},
["skz"] = {"Sekar"},
["sla"] = {"Slavic languages"},
["slc"] = {"Sáliba"},
["sld"] = {"Sissala"},
["sle"] = {"Sholaga"},
["slf"] = {"Swiss-Italian Sign Language"},
["slg"] = {"Selungai Murut"},
["slh"] = {"Southern Puget Sound Salish"},
["sli"] = {"Lower Silesian"},
["slj"] = {"Salumá"},
["sll"] = {"Salt-Yui"},
["slm"] = {"Pangutaran Sama"},
["sln"] = {"Salinan"},
["slp"] = {"Lamaholot"},
["slr"] = {"Salar"},
["sls"] = {"Singapore Sign Language"},
["slt"] = {"Sila"},
["slu"] = {"Selaru"},
["slw"] = {"Sialum"},
["slx"] = {"Salampasu"},
["sly"] = {"Selayar"},
["slz"] = {"Ma'ya"},
["sma"] = {"Southern Sami"},
["smb"] = {"Simbari"},
["smc"] = {"Som"},
["smf"] = {"Auwe"},
["smg"] = {"Simbali"},
["smh"] = {"Samei"},
["smi"] = {"Sami languages"},
["smj"] = {"Lule Sami"},
["smk"] = {"Bolinao"},
["sml"] = {"Central Sama"},
["smm"] = {"Musasa"},
["smn"] = {"Inari Sami"},
["smp"] = {"Samaritan"},
["smq"] = {"Samo"},
["smr"] = {"Simeulue"},
["sms"] = {"Skolt Sami"},
["smt"] = {"Simte"},
["smu"] = {"Somray"},
["smv"] = {"Samvedi"},
["smw"] = {"Sumbawa"},
["smx"] = {"Samba"},
["smy"] = {"Semnani"},
["smz"] = {"Simeku"},
["snc"] = {"Sinaugoro"},
["sne"] = {"Bau Bidayuh"},
["snf"] = {"Noon"},
["sng"] = {"Sanga (Democratic Republic of Congo)"},
["sni"] = {"Sensi"},
["snj"] = {"Riverain Sango"},
["snk"] = {"Soninke"},
["snl"] = {"Sangil"},
["snm"] = {"Southern Ma'di"},
["snn"] = {"Siona"},
["sno"] = {"Snohomish"},
["snp"] = {"Siane"},
["snq"] = {"Sangu (Gabon)"},
["snr"] = {"Sihan"},
["sns"] = {"South West Bay", "Nahavaq"},
["snu"] = {"Senggi", "Viid"},
["snv"] = {"Sa'ban"},
["snw"] = {"Selee"},
["snx"] = {"Sam"},
["sny"] = {"Saniyo-Hiyewe"},
["snz"] = {"Kou"},
["soa"] = {"Thai Song"},
["sob"] = {"Sobei"},
["soc"] = {"So (Democratic Republic of Congo)"},
["sod"] = {"Songoora"},
["soe"] = {"Songomeno"},
["sog"] = {"Sogdian"},
["soh"] = {"Aka"},
["soi"] = {"Sonha"},
["soj"] = {"Soi"},
["sok"] = {"Sokoro"},
["sol"] = {"Solos"},
["son"] = {"Songhai languages"},
["soo"] = {"Songo"},
["sop"] = {"Songe"},
["soq"] = {"Kanasi"},
["sor"] = {"Somrai"},
["sos"] = {"Seeku"},
["sou"] = {"Southern Thai"},
["sov"] = {"Sonsorol"},
["sow"] = {"Sowanda"},
["sox"] = {"Swo"},
["soy"] = {"Miyobe"},
["soz"] = {"Temi"},
["spb"] = {"Sepa (Indonesia)"},
["spc"] = {"Sapé"},
["spd"] = {"Saep"},
["spe"] = {"Sepa (Papua New Guinea)"},
["spg"] = {"Sian"},
["spi"] = {"Saponi"},
["spk"] = {"Sengo"},
["spl"] = {"Selepet"},
["spm"] = {"Akukem"},
["spn"] = {"Sanapaná"},
["spo"] = {"Spokane"},
["spp"] = {"Supyire Senoufo"},
["spq"] = {"Loreto-Ucayali Spanish"},
["spr"] = {"Saparua"},
["sps"] = {"Saposa"},
["spt"] = {"Spiti Bhoti"},
["spu"] = {"Sapuan"},
["spv"] = {"Sambalpuri", "Kosli"},
["spx"] = {"South Picene"},
["spy"] = {"Sabaot"},
["sqa"] = {"Shama-Sambuga"},
["sqh"] = {"Shau"},
["sqj"] = {"Albanian languages"},
["sqk"] = {"Albanian Sign Language"},
["sqm"] = {"Suma"},
["sqn"] = {"Susquehannock"},
["sqo"] = {"Sorkhei"},
["sqq"] = {"Sou"},
["sqr"] = {"Siculo Arabic"},
["sqs"] = {"Sri Lankan Sign Language"},
["sqt"] = {"Soqotri"},
["squ"] = {"Squamish"},
["sqx"] = {"Kufr Qassem Sign Language (KQSL)"},
["sra"] = {"Saruga"},
["srb"] = {"Sora"},
["src"] = {"Logudorese Sardinian"},
["sre"] = {"Sara"},
["srf"] = {"Nafi"},
["srg"] = {"Sulod"},
["srh"] = {"Sarikoli"},
["sri"] = {"Siriano"},
["srk"] = {"Serudung Murut"},
["srl"] = {"Isirawa"},
["srm"] = {"Saramaccan"},
["srn"] = {"Sranan Tongo"},
["sro"] = {"Campidanese Sardinian"},
["srq"] = {"Sirionó"},
["srr"] = {"Serer"},
["srs"] = {"Sarsi"},
["srt"] = {"Sauri"},
["sru"] = {"Suruí"},
["srv"] = {"Southern Sorsoganon"},
["srw"] = {"Serua"},
["srx"] = {"Sirmauri"},
["sry"] = {"Sera"},
["srz"] = {"Shahmirzadi"},
["ssa"] = {"Nilo-Saharan languages"},
["ssb"] = {"Southern Sama"},
["ssc"] = {"Suba-Simbiti"},
["ssd"] = {"Siroi"},
["sse"] = {"Balangingi", "Bangingih Sama"},
["ssf"] = {"Thao"},
["ssg"] = {"Seimat"},
["ssh"] = {"Shihhi Arabic"},
["ssi"] = {"Sansi"},
["ssj"] = {"Sausi"},
["ssk"] = {"Sunam"},
["ssl"] = {"Western Sisaala"},
["ssm"] = {"Semnam"},
["ssn"] = {"Waata"},
["sso"] = {"Sissano"},
["ssp"] = {"Spanish Sign Language"},
["ssq"] = {"So'a"},
["ssr"] = {"Swiss-French Sign Language"},
["sss"] = {"Sô"},
["sst"] = {"Sinasina"},
["ssu"] = {"Susuami"},
["ssv"] = {"Shark Bay"},
["ssx"] = {"Samberigi"},
["ssy"] = {"Saho"},
["ssz"] = {"Sengseng"},
["sta"] = {"Settla"},
["stb"] = {"Northern Subanen"},
["std"] = {"Sentinel"},
["ste"] = {"Liana-Seti"},
["stf"] = {"Seta"},
["stg"] = {"Trieng"},
["sth"] = {"Shelta"},
["sti"] = {"Bulo Stieng"},
["stj"] = {"Matya Samo"},
["stk"] = {"Arammba"},
["stl"] = {"Stellingwerfs"},
["stm"] = {"Setaman"},
["stn"] = {"Owa"},
["sto"] = {"Stoney"},
["stp"] = {"Southeastern Tepehuan"},
["stq"] = {"Saterfriesisch"},
["str"] = {"Straits Salish"},
["sts"] = {"Shumashti"},
["stt"] = {"Budeh Stieng"},
["stu"] = {"Samtao"},
["stv"] = {"Silt'e"},
["stw"] = {"Satawalese"},
["sty"] = {"Siberian Tatar"},
["sua"] = {"Sulka"},
["sub"] = {"Suku"},
["suc"] = {"Western Subanon"},
["sue"] = {"Suena"},
["sug"] = {"Suganga"},
["sui"] = {"Suki"},
["suj"] = {"Shubi"},
["suk"] = {"Sukuma"},
["suo"] = {"Bouni"},
["suq"] = {"Tirmaga-Chai Suri", "Suri"},
["sur"] = {"Mwaghavul"},
["sus"] = {"Susu"},
["sut"] = {"Subtiaba"},
["suv"] = {"Puroik"},
["suw"] = {"Sumbwa"},
["sux"] = {"Sumerian"},
["suy"] = {"Suyá"},
["suz"] = {"Sunwar"},
["sva"] = {"Svan"},
["svb"] = {"Ulau-Suain"},
["svc"] = {"Vincentian Creole English"},
["sve"] = {"Serili"},
["svk"] = {"Slovakian Sign Language"},
["svm"] = {"Slavomolisano"},
["svs"] = {"Savosavo"},
["svx"] = {"Skalvian"},
["swb"] = {"Maore Comorian"},
["swc"] = {"Congo Swahili"},
["swf"] = {"Sere"},
["swg"] = {"Swabian"},
["swh"] = {"Swahili (individual language)", "Kiswahili"},
["swi"] = {"Sui"},
["swj"] = {"Sira"},
["swk"] = {"Malawi Sena"},
["swl"] = {"Swedish Sign Language"},
["swm"] = {"Samosa"},
["swn"] = {"Sawknah"},
["swo"] = {"Shanenawa"},
["swp"] = {"Suau"},
["swq"] = {"Sharwa"},
["swr"] = {"Saweru"},
["sws"] = {"Seluwasan"},
["swt"] = {"Sawila"},
["swu"] = {"Suwawa"},
["swv"] = {"Shekhawati"},
["sww"] = {"Sowa"},
["swx"] = {"Suruahá"},
["swy"] = {"Sarua"},
["sxb"] = {"Suba"},
["sxc"] = {"Sicanian"},
["sxe"] = {"Sighu"},
["sxg"] = {"Shuhi", "Shixing"},
["sxk"] = {"Southern Kalapuya"},
["sxl"] = {"Selian"},
["sxm"] = {"Samre"},
["sxn"] = {"Sangir"},
["sxo"] = {"Sorothaptic"},
["sxr"] = {"Saaroa"},
["sxs"] = {"Sasaru"},
["sxu"] = {"Upper Saxon"},
["sxw"] = {"Saxwe Gbe"},
["sya"] = {"Siang"},
["syb"] = {"Central Subanen"},
["syc"] = {"Classical Syriac"},
["syd"] = {"Samoyedic languages"},
["syi"] = {"Seki"},
["syk"] = {"Sukur"},
["syl"] = {"Sylheti"},
["sym"] = {"Maya Samo"},
["syn"] = {"Senaya"},
["syo"] = {"Suoy"},
["syr"] = {"Syriac"},
["sys"] = {"Sinyar"},
["syw"] = {"Kagate"},
["syx"] = {"Samay"},
["syy"] = {"Al-Sayyid Bedouin Sign Language"},
["sza"] = {"Semelai"},
["szb"] = {"Ngalum"},
["szc"] = {"Semaq Beri"},
["sze"] = {"Seze"},
["szg"] = {"Sengele"},
["szl"] = {"Silesian"},
["szn"] = {"Sula"},
["szp"] = {"Suabo"},
["szs"] = {"Solomon Islands Sign Language"},
["szv"] = {"Isu (Fako Division)"},
["szw"] = {"Sawai"},
["szy"] = {"Sakizaya"},
["taa"] = {"Lower Tanana"},
["tab"] = {"Tabassaran"},
["tac"] = {"Lowland Tarahumara"},
["tad"] = {"Tause"},
["tae"] = {"Tariana"},
["taf"] = {"Tapirapé"},
["tag"] = {"Tagoi"},
["tai"] = {"Tai languages"},
["taj"] = {"Eastern Tamang"},
["tak"] = {"Tala"},
["tal"] = {"Tal"},
["tan"] = {"Tangale"},
["tao"] = {"Yami"},
["tap"] = {"Taabwa"},
["taq"] = {"Tamasheq"},
["tar"] = {"Central Tarahumara"},
["tas"] = {"Tay Boi"},
["tau"] = {"Upper Tanana"},
["tav"] = {"Tatuyo"},
["taw"] = {"Tai"},
["tax"] = {"Tamki"},
["tay"] = {"Atayal"},
["taz"] = {"Tocho"},
["tba"] = {"Aikanã"},
["tbc"] = {"Takia"},
["tbd"] = {"Kaki Ae"},
["tbe"] = {"Tanimbili"},
["tbf"] = {"Mandara"},
["tbg"] = {"North Tairora"},
["tbh"] = {"Dharawal", "Thurawal"},
["tbi"] = {"Gaam"},
["tbj"] = {"Tiang"},
["tbk"] = {"Calamian Tagbanwa"},
["tbl"] = {"Tboli"},
["tbm"] = {"Tagbu"},
["tbn"] = {"Barro Negro Tunebo"},
["tbo"] = {"Tawala"},
["tbp"] = {"Taworta", "Diebroud"},
["tbq"] = {"Tibeto-Burman languages"},
["tbr"] = {"Tumtum"},
["tbs"] = {"Tanguat"},
["tbt"] = {"Tembo (Kitembo)"},
["tbu"] = {"Tubar"},
["tbv"] = {"Tobo"},
["tbw"] = {"Tagbanwa"},
["tbx"] = {"Kapin"},
["tby"] = {"Tabaru"},
["tbz"] = {"Ditammari"},
["tca"] = {"Ticuna"},
["tcb"] = {"Tanacross"},
["tcc"] = {"Datooga"},
["tcd"] = {"Tafi"},
["tce"] = {"Southern Tutchone"},
["tcf"] = {"Malinaltepec Me'phaa", "Malinaltepec Tlapanec"},
["tcg"] = {"Tamagario"},
["tch"] = {"Turks And Caicos Creole English"},
["tci"] = {"Wára"},
["tck"] = {"Tchitchege"},
["tcl"] = {"Taman (Myanmar)"},
["tcm"] = {"Tanahmerah"},
["tcn"] = {"Tichurong"},
["tco"] = {"Taungyo"},
["tcp"] = {"Tawr Chin"},
["tcq"] = {"Kaiy"},
["tcs"] = {"Torres Strait Creole", "Yumplatok"},
["tct"] = {"T'en"},
["tcu"] = {"Southeastern Tarahumara"},
["tcw"] = {"Tecpatlán Totonac"},
["tcx"] = {"Toda"},
["tcy"] = {"Tulu"},
["tcz"] = {"Thado Chin"},
["tda"] = {"Tagdal"},
["tdb"] = {"Panchpargania"},
["tdc"] = {"Emberá-Tadó"},
["tdd"] = {"Tai Nüa"},
["tde"] = {"Tiranige Diga Dogon"},
["tdf"] = {"Talieng"},
["tdg"] = {"Western Tamang"},
["tdh"] = {"Thulung"},
["tdi"] = {"Tomadino"},
["tdj"] = {"Tajio"},
["tdk"] = {"Tambas"},
["tdl"] = {"Sur"},
["tdm"] = {"Taruma"},
["tdn"] = {"Tondano"},
["tdo"] = {"Teme"},
["tdq"] = {"Tita"},
["tdr"] = {"Todrah"},
["tds"] = {"Doutai"},
["tdt"] = {"Tetun Dili"},
["tdv"] = {"Toro"},
["tdx"] = {"Tandroy-Mahafaly Malagasy"},
["tdy"] = {"Tadyawan"},
["tea"] = {"Temiar"},
["teb"] = {"Tetete"},
["tec"] = {"Terik"},
["ted"] = {"Tepo Krumen"},
["tee"] = {"Huehuetla Tepehua"},
["tef"] = {"Teressa"},
["teg"] = {"Teke-Tege"},
["teh"] = {"Tehuelche"},
["tei"] = {"Torricelli"},
["tek"] = {"Ibali Teke"},
["tem"] = {"Timne"},
["ten"] = {"Tama (Colombia)"},
["teo"] = {"Teso"},
["tep"] = {"Tepecano"},
["teq"] = {"Temein"},
["ter"] = {"Tereno"},
["tes"] = {"Tengger"},
["tet"] = {"Tetum"},
["teu"] = {"Soo"},
["tev"] = {"Teor"},
["tew"] = {"Tewa (USA)"},
["tex"] = {"Tennet"},
["tey"] = {"Tulishi"},
["tez"] = {"Tetserret"},
["tfi"] = {"Tofin Gbe"},
["tfn"] = {"Tanaina"},
["tfo"] = {"Tefaro"},
["tfr"] = {"Teribe"},
["tft"] = {"Ternate"},
["tga"] = {"Sagalla"},
["tgb"] = {"Tobilung"},
["tgc"] = {"Tigak"},
["tgd"] = {"Ciwogai"},
["tge"] = {"Eastern Gorkha Tamang"},
["tgf"] = {"Chalikha"},
["tgh"] = {"Tobagonian Creole English"},
["tgi"] = {"Lawunuia"},
["tgj"] = {"Tagin"},
["tgn"] = {"Tandaganon"},
["tgo"] = {"Sudest"},
["tgp"] = {"Tangoa"},
["tgq"] = {"Tring"},
["tgr"] = {"Tareng"},
["tgs"] = {"Nume"},
["tgt"] = {"Central Tagbanwa"},
["tgu"] = {"Tanggu"},
["tgv"] = {"Tingui-Boto"},
["tgw"] = {"Tagwana Senoufo"},
["tgx"] = {"Tagish"},
["tgy"] = {"Togoyo"},
["tgz"] = {"Tagalaka"},
["thd"] = {"Kuuk Thaayorre", "Thayore"},
["the"] = {"Chitwania Tharu"},
["thf"] = {"Thangmi"},
["thh"] = {"Northern Tarahumara"},
["thi"] = {"Tai Long"},
["thk"] = {"Tharaka", "Kitharaka"},
["thl"] = {"Dangaura Tharu"},
["thm"] = {"Aheu"},
["thn"] = {"Thachanadan"},
["thp"] = {"Thompson"},
["thq"] = {"Kochila Tharu"},
["thr"] = {"Rana Tharu"},
["ths"] = {"Thakali"},
["tht"] = {"Tahltan"},
["thu"] = {"Thuri"},
["thv"] = {"Tahaggart Tamahaq"},
["thy"] = {"Tha"},
["thz"] = {"Tayart Tamajeq"},
["tia"] = {"Tidikelt Tamazight"},
["tic"] = {"Tira"},
["tif"] = {"Tifal"},
["tig"] = {"Tigre"},
["tih"] = {"Timugon Murut"},
["tii"] = {"Tiene"},
["tij"] = {"Tilung"},
["tik"] = {"Tikar"},
["til"] = {"Tillamook"},
["tim"] = {"Timbe"},
["tin"] = {"Tindi"},
["tio"] = {"Teop"},
["tip"] = {"Trimuris"},
["tiq"] = {"Tiéfo"},
["tis"] = {"Masadiit Itneg"},
["tit"] = {"Tinigua"},
["tiu"] = {"Adasen"},
["tiv"] = {"Tiv"},
["tiw"] = {"Tiwi"},
["tix"] = {"Southern Tiwa"},
["tiy"] = {"Tiruray"},
["tiz"] = {"Tai Hongjin"},
["tja"] = {"Tajuasohn"},
["tjg"] = {"Tunjung"},
["tji"] = {"Northern Tujia"},
["tjj"] = {"Tjungundji"},
["tjl"] = {"Tai Laing"},
["tjm"] = {"Timucua"},
["tjn"] = {"Tonjon"},
["tjo"] = {"Temacine Tamazight"},
["tjp"] = {"Tjupany"},
["tjs"] = {"Southern Tujia"},
["tju"] = {"Tjurruru"},
["tjw"] = {"Djabwurrung"},
["tka"] = {"Truká"},
["tkb"] = {"Buksa"},
["tkd"] = {"Tukudede"},
["tke"] = {"Takwane"},
["tkf"] = {"Tukumanféd"},
["tkg"] = {"Tesaka Malagasy"},
["tkl"] = {"Tokelau"},
["tkm"] = {"Takelma"},
["tkn"] = {"Toku-No-Shima"},
["tkp"] = {"Tikopia"},
["tkq"] = {"Tee"},
["tkr"] = {"Tsakhur"},
["tks"] = {"Takestani"},
["tkt"] = {"Kathoriya Tharu"},
["tku"] = {"Upper Necaxa Totonac"},
["tkv"] = {"Mur Pano"},
["tkw"] = {"Teanu"},
["tkx"] = {"Tangko"},
["tkz"] = {"Takua"},
["tla"] = {"Southwestern Tepehuan"},
["tlb"] = {"Tobelo"},
["tlc"] = {"Yecuatla Totonac"},
["tld"] = {"Talaud"},
["tlf"] = {"Telefol"},
["tlg"] = {"Tofanma"},
["tlh"] = {"Klingon", "tlhIngan Hol"},
["tli"] = {"Tlingit"},
["tlj"] = {"Talinga-Bwisi"},
["tlk"] = {"Taloki"},
["tll"] = {"Tetela"},
["tlm"] = {"Tolomako"},
["tln"] = {"Talondo'"},
["tlo"] = {"Talodi"},
["tlp"] = {"Filomena Mata-Coahuitlán Totonac"},
["tlq"] = {"Tai Loi"},
["tlr"] = {"Talise"},
["tls"] = {"Tambotalo"},
["tlt"] = {"Sou Nama", "Teluti"},
["tlu"] = {"Tulehu"},
["tlv"] = {"Taliabu"},
["tlx"] = {"Khehek"},
["tly"] = {"Talysh"},
["tma"] = {"Tama (Chad)"},
["tmb"] = {"Katbol", "Avava"},
["tmc"] = {"Tumak"},
["tmd"] = {"Haruai"},
["tme"] = {"Tremembé"},
["tmf"] = {"Toba-Maskoy"},
["tmg"] = {"Ternateño"},
["tmh"] = {"Tamashek"},
["tmi"] = {"Tutuba"},
["tmj"] = {"Samarokena"},
["tml"] = {"Tamnim Citak"},
["tmm"] = {"Tai Thanh"},
["tmn"] = {"Taman (Indonesia)"},
["tmo"] = {"Temoq"},
["tmq"] = {"Tumleo"},
["tmr"] = {"Jewish Babylonian Aramaic (ca. 200-1200 CE)"},
["tms"] = {"Tima"},
["tmt"] = {"Tasmate"},
["tmu"] = {"Iau"},
["tmv"] = {"Tembo (Motembo)"},
["tmw"] = {"Temuan"},
["tmy"] = {"Tami"},
["tmz"] = {"Tamanaku"},
["tna"] = {"Tacana"},
["tnb"] = {"Western Tunebo"},
["tnc"] = {"Tanimuca-Retuarã"},
["tnd"] = {"Angosturas Tunebo"},
["tng"] = {"Tobanga"},
["tnh"] = {"Maiani"},
["tni"] = {"Tandia"},
["tnk"] = {"Kwamera"},
["tnl"] = {"Lenakel"},
["tnm"] = {"Tabla"},
["tnn"] = {"North Tanna"},
["tno"] = {"Toromono"},
["tnp"] = {"Whitesands"},
["tnq"] = {"Taino"},
["tnr"] = {"Ménik"},
["tns"] = {"Tenis"},
["tnt"] = {"Tontemboan"},
["tnu"] = {"Tay Khang"},
["tnv"] = {"Tangchangya"},
["tnw"] = {"Tonsawang"},
["tnx"] = {"Tanema"},
["tny"] = {"Tongwe"},
["tnz"] = {"Ten'edn"},
["tob"] = {"Toba"},
["toc"] = {"Coyutla Totonac"},
["tod"] = {"Toma"},
["tof"] = {"Gizrra"},
["tog"] = {"Tonga (Nyasa)"},
["toh"] = {"Gitonga"},
["toi"] = {"Tonga (Zambia)"},
["toj"] = {"Tojolabal"},
["tok"] = {"Toki Pona"},
["tol"] = {"Tolowa"},
["tom"] = {"Tombulu"},
["too"] = {"Xicotepec De Juárez Totonac"},
["top"] = {"Papantla Totonac"},
["toq"] = {"Toposa"},
["tor"] = {"Togbo-Vara Banda"},
["tos"] = {"Highland Totonac"},
["tou"] = {"Tho"},
["tov"] = {"Upper Taromi"},
["tow"] = {"Jemez"},
["tox"] = {"Tobian"},
["toy"] = {"Topoiyo"},
["toz"] = {"To"},
["tpa"] = {"Taupota"},
["tpc"] = {"Azoyú Me'phaa", "Azoyú Tlapanec"},
["tpe"] = {"Tippera"},
["tpf"] = {"Tarpia"},
["tpg"] = {"Kula"},
["tpi"] = {"Tok Pisin"},
["tpj"] = {"Tapieté"},
["tpk"] = {"Tupinikin"},
["tpl"] = {"Tlacoapa Me'phaa", "Tlacoapa Tlapanec"},
["tpm"] = {"Tampulma"},
["tpn"] = {"Tupinambá"},
["tpo"] = {"Tai Pao"},
["tpp"] = {"Pisaflores Tepehua"},
["tpq"] = {"Tukpa"},
["tpr"] = {"Tuparí"},
["tpt"] = {"Tlachichilco Tepehua"},
["tpu"] = {"Tampuan"},
["tpv"] = {"Tanapag"},
["tpx"] = {"Acatepec Me'phaa", "Acatepec Tlapanec"},
["tpy"] = {"Trumai"},
["tpz"] = {"Tinputz"},
["tqb"] = {"Tembé"},
["tql"] = {"Lehali"},
["tqm"] = {"Turumsa"},
["tqn"] = {"Tenino"},
["tqo"] = {"Toaripi"},
["tqp"] = {"Tomoip"},
["tqq"] = {"Tunni"},
["tqr"] = {"Torona"},
["tqt"] = {"Western Totonac"},
["tqu"] = {"Touo"},
["tqw"] = {"Tonkawa"},
["tra"] = {"Tirahi"},
["trb"] = {"Terebu"},
["trc"] = {"Copala Triqui"},
["trd"] = {"Turi"},
["tre"] = {"East Tarangan"},
["trf"] = {"Trinidadian Creole English"},
["trg"] = {"Lishán Didán"},
["trh"] = {"Turaka"},
["tri"] = {"Trió"},
["trj"] = {"Toram"},
["trk"] = {"Turkic languages"},
["trl"] = {"Traveller Scottish"},
["trm"] = {"Tregami"},
["trn"] = {"Trinitario"},
["tro"] = {"Tarao Naga"},
["trp"] = {"Kok Borok"},
["trq"] = {"San Martín Itunyoso Triqui"},
["trr"] = {"Taushiro"},
["trs"] = {"Chicahuaxtla Triqui"},
["trt"] = {"Tunggare"},
["tru"] = {"Turoyo", "Surayt"},
["trv"] = {"Sediq", "Seediq", "Taroko"},
["trw"] = {"Torwali"},
["trx"] = {"Tringgus-Sembaan Bidayuh"},
["try"] = {"Turung"},
["trz"] = {"Torá"},
["tsa"] = {"Tsaangi"},
["tsb"] = {"Tsamai"},
["tsc"] = {"Tswa"},
["tsd"] = {"Tsakonian"},
["tse"] = {"Tunisian Sign Language"},
["tsg"] = {"Tausug"},
["tsh"] = {"Tsuvan"},
["tsi"] = {"Tsimshian"},
["tsj"] = {"Tshangla"},
["tsk"] = {"Tseku"},
["tsl"] = {"Ts'ün-Lao"},
["tsm"] = {"Turkish Sign Language", "Türk İşaret Dili"},
["tsp"] = {"Northern Toussian"},
["tsq"] = {"Thai Sign Language"},
["tsr"] = {"Akei"},
["tss"] = {"Taiwan Sign Language"},
["tst"] = {"Tondi Songway Kiini"},
["tsu"] = {"Tsou"},
["tsv"] = {"Tsogo"},
["tsw"] = {"Tsishingini"},
["tsx"] = {"Mubami"},
["tsy"] = {"Tebul Sign Language"},
["tsz"] = {"Purepecha"},
["tta"] = {"Tutelo"},
["ttb"] = {"Gaa"},
["ttc"] = {"Tektiteko"},
["ttd"] = {"Tauade"},
["tte"] = {"Bwanabwana"},
["ttf"] = {"Tuotomb"},
["ttg"] = {"Tutong"},
["tth"] = {"Upper Ta'oih"},
["tti"] = {"Tobati"},
["ttj"] = {"Tooro"},
["ttk"] = {"Totoro"},
["ttl"] = {"Totela"},
["ttm"] = {"Northern Tutchone"},
["ttn"] = {"Towei"},
["tto"] = {"Lower Ta'oih"},
["ttp"] = {"Tombelala"},
["ttq"] = {"Tawallammat Tamajaq"},
["ttr"] = {"Tera"},
["tts"] = {"Northeastern Thai"},
["ttt"] = {"Muslim Tat"},
["ttu"] = {"Torau"},
["ttv"] = {"Titan"},
["ttw"] = {"Long Wat"},
["tty"] = {"Sikaritai"},
["ttz"] = {"Tsum"},
["tua"] = {"Wiarumus"},
["tub"] = {"Tübatulabal"},
["tuc"] = {"Mutu"},
["tud"] = {"Tuxá"},
["tue"] = {"Tuyuca"},
["tuf"] = {"Central Tunebo"},
["tug"] = {"Tunia"},
["tuh"] = {"Taulil"},
["tui"] = {"Tupuri"},
["tuj"] = {"Tugutil"},
["tul"] = {"Tula"},
["tum"] = {"Tumbuka"},
["tun"] = {"Tunica"},
["tuo"] = {"Tucano"},
["tup"] = {"Tupi languages"},
["tuq"] = {"Tedaga"},
["tus"] = {"Tuscarora"},
["tut"] = {"Altaic languages"},
["tuu"] = {"Tututni"},
["tuv"] = {"Turkana"},
["tuw"] = {"Tungus languages"},
["tux"] = {"Tuxináwa"},
["tuy"] = {"Tugen"},
["tuz"] = {"Turka"},
["tva"] = {"Vaghua"},
["tvd"] = {"Tsuvadi"},
["tve"] = {"Te'un"},
["tvi"] = {"Tulai"},
["tvk"] = {"Southeast Ambrym"},
["tvl"] = {"Tuvalu"},
["tvm"] = {"Tela-Masbuar"},
["tvn"] = {"Tavoyan"},
["tvo"] = {"Tidore"},
["tvs"] = {"Taveta"},
["tvt"] = {"Tutsa Naga"},
["tvu"] = {"Tunen"},
["tvw"] = {"Sedoa"},
["tvx"] = {"Taivoan"},
["tvy"] = {"Timor Pidgin"},
["twa"] = {"Twana"},
["twb"] = {"Western Tawbuid"},
["twc"] = {"Teshenawa"},
["twd"] = {"Twents"},
["twe"] = {"Tewa (Indonesia)"},
["twf"] = {"Northern Tiwa"},
["twg"] = {"Tereweng"},
["twh"] = {"Tai Dón"},
["twl"] = {"Tawara"},
["twm"] = {"Tawang Monpa"},
["twn"] = {"Twendi"},
["two"] = {"Tswapong"},
["twp"] = {"Ere"},
["twq"] = {"Tasawaq"},
["twr"] = {"Southwestern Tarahumara"},
["twt"] = {"Turiwára"},
["twu"] = {"Termanu"},
["tww"] = {"Tuwari"},
["twx"] = {"Tewe"},
["twy"] = {"Tawoyan"},
["txa"] = {"Tombonuo"},
["txb"] = {"Tokharian B"},
["txc"] = {"Tsetsaut"},
["txe"] = {"Totoli"},
["txg"] = {"Tangut"},
["txh"] = {"Thracian"},
["txi"] = {"Ikpeng"},
["txj"] = {"Tarjumo"},
["txm"] = {"Tomini"},
["txn"] = {"West Tarangan"},
["txo"] = {"Toto"},
["txq"] = {"Tii"},
["txr"] = {"Tartessian"},
["txs"] = {"Tonsea"},
["txt"] = {"Citak"},
["txu"] = {"Kayapó"},
["txx"] = {"Tatana"},
["txy"] = {"Tanosy Malagasy"},
["tya"] = {"Tauya"},
["tye"] = {"Kyanga"},
["tyh"] = {"O'du"},
["tyi"] = {"Teke-Tsaayi"},
["tyj"] = {"Tai Do", "Tai Yo"},
["tyl"] = {"Thu Lao"},
["tyn"] = {"Kombai"},
["typ"] = {"Thaypan"},
["tyr"] = {"Tai Daeng"},
["tys"] = {"Tày Sa Pa"},
["tyt"] = {"Tày Tac"},
["tyu"] = {"Kua"},
["tyv"] = {"Tuvinian"},
["tyx"] = {"Teke-Tyee"},
["tyy"] = {"Tiyaa"},
["tyz"] = {"Tày"},
["tza"] = {"Tanzanian Sign Language"},
["tzh"] = {"Tzeltal"},
["tzj"] = {"Tz'utujil"},
["tzl"] = {"Talossan"},
["tzm"] = {"Central Atlas Tamazight"},
["tzn"] = {"Tugun"},
["tzo"] = {"Tzotzil"},
["tzx"] = {"Tabriak"},
["uam"] = {"Uamué"},
["uan"] = {"Kuan"},
["uar"] = {"Tairuma"},
["uba"] = {"Ubang"},
["ubi"] = {"Ubi"},
["ubl"] = {"Buhi'non Bikol"},
["ubr"] = {"Ubir"},
["ubu"] = {"Umbu-Ungu"},
["uby"] = {"Ubykh"},
["uda"] = {"Uda"},
["ude"] = {"Udihe"},
["udg"] = {"Muduga"},
["udi"] = {"Udi"},
["udj"] = {"Ujir"},
["udl"] = {"Wuzlam"},
["udm"] = {"Udmurt"},
["udu"] = {"Uduk"},
["ues"] = {"Kioko"},
["ufi"] = {"Ufim"},
["uga"] = {"Ugaritic"},
["ugb"] = {"Kuku-Ugbanh"},
["uge"] = {"Ughele"},
["ugh"] = {"Kubachi"},
["ugn"] = {"Ugandan Sign Language"},
["ugo"] = {"Ugong"},
["ugy"] = {"Uruguayan Sign Language"},
["uha"] = {"Uhami"},
["uhn"] = {"Damal"},
["uis"] = {"Uisai"},
["uiv"] = {"Iyive"},
["uji"] = {"Tanjijili"},
["uka"] = {"Kaburi"},
["ukg"] = {"Ukuriguma"},
["ukh"] = {"Ukhwejo"},
["uki"] = {"Kui (India)"},
["ukk"] = {"Muak Sa-aak"},
["ukl"] = {"Ukrainian Sign Language"},
["ukp"] = {"Ukpe-Bayobiri"},
["ukq"] = {"Ukwa"},
["uks"] = {"Urubú-Kaapor Sign Language", "Kaapor Sign Language"},
["uku"] = {"Ukue"},
["ukv"] = {"Kuku"},
["ukw"] = {"Ukwuani-Aboh-Ndoni"},
["uky"] = {"Kuuk-Yak"},
["ula"] = {"Fungwa"},
["ulb"] = {"Ulukwumi"},
["ulc"] = {"Ulch"},
["ule"] = {"Lule"},
["ulf"] = {"Usku", "Afra"},
["uli"] = {"Ulithian"},
["ulk"] = {"Meriam Mir"},
["ull"] = {"Ullatan"},
["ulm"] = {"Ulumanda'"},
["uln"] = {"Unserdeutsch"},
["ulu"] = {"Uma' Lung"},
["ulw"] = {"Ulwa"},
["uly"] = {"Buli"},
["uma"] = {"Umatilla"},
["umb"] = {"Umbundu"},
["umc"] = {"Marrucinian"},
["umd"] = {"Umbindhamu"},
["umg"] = {"Morrobalama", "Umbuygamu"},
["umi"] = {"Ukit"},
["umm"] = {"Umon"},
["umn"] = {"Makyan Naga"},
["umo"] = {"Umotína"},
["ump"] = {"Umpila"},
["umr"] = {"Umbugarla"},
["ums"] = {"Pendau"},
["umu"] = {"Munsee"},
["una"] = {"North Watut"},
["und"] = {"Undetermined"},
["une"] = {"Uneme"},
["ung"] = {"Ngarinyin"},
["uni"] = {"Uni"},
["unk"] = {"Enawené-Nawé"},
["unm"] = {"Unami"},
["unn"] = {"Kurnai"},
["unr"] = {"Mundari"},
["unu"] = {"Unubahe"},
["unx"] = {"Munda"},
["unz"] = {"Unde Kaili"},
["uon"] = {"Kulon"},
["upi"] = {"Umeda"},
["upv"] = {"Uripiv-Wala-Rano-Atchin"},
["ura"] = {"Urarina"},
["urb"] = {"Urubú-Kaapor", "Kaapor"},
["urc"] = {"Urningangg"},
["ure"] = {"Uru"},
["urf"] = {"Uradhi"},
["urg"] = {"Urigina"},
["urh"] = {"Urhobo"},
["uri"] = {"Urim"},
["urj"] = {"Uralic languages"},
["urk"] = {"Urak Lawoi'"},
["url"] = {"Urali"},
["urm"] = {"Urapmin"},
["urn"] = {"Uruangnirin"},
["uro"] = {"Ura (Papua New Guinea)"},
["urp"] = {"Uru-Pa-In"},
["urr"] = {"Lehalurup", "Löyöp"},
["urt"] = {"Urat"},
["uru"] = {"Urumi"},
["urv"] = {"Uruava"},
["urw"] = {"Sop"},
["urx"] = {"Urimo"},
["ury"] = {"Orya"},
["urz"] = {"Uru-Eu-Wau-Wau"},
["usa"] = {"Usarufa"},
["ush"] = {"Ushojo"},
["usi"] = {"Usui"},
["usk"] = {"Usaghade"},
["usp"] = {"Uspanteco"},
["uss"] = {"us-Saare"},
["usu"] = {"Uya"},
["uta"] = {"Otank"},
["ute"] = {"Ute-Southern Paiute"},
["uth"] = {"ut-Hun"},
["utp"] = {"Amba (Solomon Islands)"},
["utr"] = {"Etulo"},
["utu"] = {"Utu"},
["uum"] = {"Urum"},
["uur"] = {"Ura (Vanuatu)"},
["uuu"] = {"U"},
["uve"] = {"West Uvean", "Fagauvea"},
["uvh"] = {"Uri"},
["uvl"] = {"Lote"},
["uwa"] = {"Kuku-Uwanh"},
["uya"] = {"Doko-Uyanga"},
["uzn"] = {"Northern Uzbek"},
["uzs"] = {"Southern Uzbek"},
["vaa"] = {"Vaagri Booli"},
["vae"] = {"Vale"},
["vaf"] = {"Vafsi"},
["vag"] = {"Vagla"},
["vah"] = {"Varhadi-Nagpuri"},
["vai"] = {"Vai"},
["vaj"] = {"Sekele", "Northwestern ǃKung", "Vasekele"},
["val"] = {"Vehes"},
["vam"] = {"Vanimo"},
["van"] = {"Valman"},
["vao"] = {"Vao"},
["vap"] = {"Vaiphei"},
["var"] = {"Huarijio"},
["vas"] = {"Vasavi"},
["vau"] = {"Vanuma"},
["vav"] = {"Varli"},
["vay"] = {"Wayu"},
["vbb"] = {"Southeast Babar"},
["vbk"] = {"Southwestern Bontok"},
["vec"] = {"Venetian"},
["ved"] = {"Veddah"},
["vel"] = {"Veluws"},
["vem"] = {"Vemgo-Mabas"},
["veo"] = {"Ventureño"},
["vep"] = {"Veps"},
["ver"] = {"Mom Jango"},
["vgr"] = {"Vaghri"},
["vgt"] = {"Vlaamse Gebarentaal", "Flemish Sign Language"},
["vic"] = {"Virgin Islands Creole English"},
["vid"] = {"Vidunda"},
["vif"] = {"Vili"},
["vig"] = {"Viemo"},
["vil"] = {"Vilela"},
["vin"] = {"Vinza"},
["vis"] = {"Vishavan"},
["vit"] = {"Viti"},
["viv"] = {"Iduna"},
["vjk"] = {"Bajjika"},
["vka"] = {"Kariyarra"},
["vkj"] = {"Kujarge"},
["vkk"] = {"Kaur"},
["vkl"] = {"Kulisusu"},
["vkm"] = {"Kamakan"},
["vkn"] = {"Koro Nulu"},
["vko"] = {"Kodeoha"},
["vkp"] = {"Korlai Creole Portuguese"},
["vkt"] = {"Tenggarong Kutai Malay"},
["vku"] = {"Kurrama"},
["vkz"] = {"Koro Zuba"},
["vlp"] = {"Valpei"},
["vls"] = {"Vlaams"},
["vma"] = {"Martuyhunira"},
["vmb"] = {"Barbaram"},
["vmc"] = {"Juxtlahuaca Mixtec"},
["vmd"] = {"Mudu Koraga"},
["vme"] = {"East Masela"},
["vmf"] = {"Mainfränkisch"},
["vmg"] = {"Lungalunga"},
["vmh"] = {"Maraghei"},
["vmi"] = {"Miwa"},
["vmj"] = {"Ixtayutla Mixtec"},
["vmk"] = {"Makhuwa-Shirima"},
["vml"] = {"Malgana"},
["vmm"] = {"Mitlatongo Mixtec"},
["vmp"] = {"Soyaltepec Mazatec"},
["vmq"] = {"Soyaltepec Mixtec"},
["vmr"] = {"Marenje"},
["vms"] = {"Moksela"},
["vmu"] = {"Muluridyi"},
["vmv"] = {"Valley Maidu"},
["vmw"] = {"Makhuwa"},
["vmx"] = {"Tamazola Mixtec"},
["vmy"] = {"Ayautla Mazatec"},
["vmz"] = {"Mazatlán Mazatec"},
["vnk"] = {"Vano", "Lovono"},
["vnm"] = {"Vinmavis", "Neve'ei"},
["vnp"] = {"Vunapu"},
["vor"] = {"Voro"},
["vot"] = {"Votic"},
["vra"] = {"Vera'a"},
["vro"] = {"Võro"},
["vrs"] = {"Varisi"},
["vrt"] = {"Burmbar", "Banam Bay"},
["vsi"] = {"Moldova Sign Language"},
["vsl"] = {"Venezuelan Sign Language"},
["vsv"] = {"Valencian Sign Language", "Llengua de signes valenciana"},
["vto"] = {"Vitou"},
["vum"] = {"Vumbu"},
["vun"] = {"Vunjo"},
["vut"] = {"Vute"},
["vwa"] = {"Awa (China)"},
["waa"] = {"Walla Walla"},
["wab"] = {"Wab"},
["wac"] = {"Wasco-Wishram"},
["wad"] = {"Wamesa", "Wondama"},
["wae"] = {"Walser"},
["waf"] = {"Wakoná"},
["wag"] = {"Wa'ema"},
["wah"] = {"Watubela"},
["wai"] = {"Wares"},
["waj"] = {"Waffa"},
["wak"] = {"Wakashan languages"},
["wal"] = {"Wolaytta", "Wolaitta"},
["wam"] = {"Wampanoag"},
["wan"] = {"Wan"},
["wao"] = {"Wappo"},
["wap"] = {"Wapishana"},
["waq"] = {"Wagiman"},
["war"] = {"Waray (Philippines)"},
["was"] = {"Washo"},
["wat"] = {"Kaninuwa"},
["wau"] = {"Waurá"},
["wav"] = {"Waka"},
["waw"] = {"Waiwai"},
["wax"] = {"Watam", "Marangis"},
["way"] = {"Wayana"},
["waz"] = {"Wampur"},
["wba"] = {"Warao"},
["wbb"] = {"Wabo"},
["wbe"] = {"Waritai"},
["wbf"] = {"Wara"},
["wbh"] = {"Wanda"},
["wbi"] = {"Vwanji"},
["wbj"] = {"Alagwa"},
["wbk"] = {"Waigali"},
["wbl"] = {"Wakhi"},
["wbm"] = {"Wa"},
["wbp"] = {"Warlpiri"},
["wbq"] = {"Waddar"},
["wbr"] = {"Wagdi"},
["wbs"] = {"West Bengal Sign Language"},
["wbt"] = {"Warnman"},
["wbv"] = {"Wajarri"},
["wbw"] = {"Woi"},
["wca"] = {"Yanomámi"},
["wci"] = {"Waci Gbe"},
["wdd"] = {"Wandji"},
["wdg"] = {"Wadaginam"},
["wdj"] = {"Wadjiginy"},
["wdk"] = {"Wadikali"},
["wdt"] = {"Wendat"},
["wdu"] = {"Wadjigu"},
["wdy"] = {"Wadjabangayi"},
["wea"] = {"Wewaw"},
["wec"] = {"Wè Western"},
["wed"] = {"Wedau"},
["weg"] = {"Wergaia"},
["weh"] = {"Weh"},
["wei"] = {"Kiunum"},
["wem"] = {"Weme Gbe"},
["wen"] = {"Sorbian languages"},
["weo"] = {"Wemale"},
["wep"] = {"Westphalien"},
["wer"] = {"Weri"},
["wes"] = {"Cameroon Pidgin"},
["wet"] = {"Perai"},
["weu"] = {"Rawngtu Chin"},
["wew"] = {"Wejewa"},
["wfg"] = {"Yafi", "Zorop"},
["wga"] = {"Wagaya"},
["wgb"] = {"Wagawaga"},
["wgg"] = {"Wangkangurru", "Wangganguru"},
["wgi"] = {"Wahgi"},
["wgo"] = {"Waigeo"},
["wgu"] = {"Wirangu"},
["wgy"] = {"Warrgamay"},
["wha"] = {"Sou Upaa", "Manusela"},
["whg"] = {"North Wahgi"},
["whk"] = {"Wahau Kenyah"},
["whu"] = {"Wahau Kayan"},
["wib"] = {"Southern Toussian"},
["wic"] = {"Wichita"},
["wie"] = {"Wik-Epa"},
["wif"] = {"Wik-Keyangan"},
["wig"] = {"Wik Ngathan"},
["wih"] = {"Wik-Me'anha"},
["wii"] = {"Minidien"},
["wij"] = {"Wik-Iiyanh"},
["wik"] = {"Wikalkan"},
["wil"] = {"Wilawila"},
["wim"] = {"Wik-Mungkan"},
["win"] = {"Ho-Chunk"},
["wir"] = {"Wiraféd"},
["wiu"] = {"Wiru"},
["wiv"] = {"Vitu"},
["wiy"] = {"Wiyot"},
["wja"] = {"Waja"},
["wji"] = {"Warji"},
["wka"] = {"Kw'adza"},
["wkb"] = {"Kumbaran"},
["wkd"] = {"Wakde", "Mo"},
["wkl"] = {"Kalanadi"},
["wkr"] = {"Keerray-Woorroong"},
["wku"] = {"Kunduvadi"},
["wkw"] = {"Wakawaka"},
["wky"] = {"Wangkayutyuru"},
["wla"] = {"Walio"},
["wlc"] = {"Mwali Comorian"},
["wle"] = {"Wolane"},
["wlg"] = {"Kunbarlang"},
["wlh"] = {"Welaun"},
["wli"] = {"Waioli"},
["wlk"] = {"Wailaki"},
["wll"] = {"Wali (Sudan)"},
["wlm"] = {"Middle Welsh"},
["wlo"] = {"Wolio"},
["wlr"] = {"Wailapa"},
["wls"] = {"Wallisian"},
["wlu"] = {"Wuliwuli"},
["wlv"] = {"Wichí Lhamtés Vejoz"},
["wlw"] = {"Walak"},
["wlx"] = {"Wali (Ghana)"},
["wly"] = {"Waling"},
["wma"] = {"Mawa (Nigeria)"},
["wmb"] = {"Wambaya"},
["wmc"] = {"Wamas"},
["wmd"] = {"Mamaindé"},
["wme"] = {"Wambule"},
["wmg"] = {"Western Minyag"},
["wmh"] = {"Waima'a"},
["wmi"] = {"Wamin"},
["wmm"] = {"Maiwa (Indonesia)"},
["wmn"] = {"Waamwang"},
["wmo"] = {"Wom (Papua New Guinea)"},
["wms"] = {"Wambon"},
["wmt"] = {"Walmajarri"},
["wmw"] = {"Mwani"},
["wmx"] = {"Womo"},
["wnb"] = {"Mokati"},
["wnc"] = {"Wantoat"},
["wnd"] = {"Wandarang"},
["wne"] = {"Waneci"},
["wng"] = {"Wanggom"},
["wni"] = {"Ndzwani Comorian"},
["wnk"] = {"Wanukaka"},
["wnm"] = {"Wanggamala"},
["wnn"] = {"Wunumara"},
["wno"] = {"Wano"},
["wnp"] = {"Wanap"},
["wnu"] = {"Usan"},
["wnw"] = {"Wintu"},
["wny"] = {"Wanyi", "Waanyi"},
["woa"] = {"Kuwema", "Tyaraity"},
["wob"] = {"Wè Northern"},
["woc"] = {"Wogeo"},
["wod"] = {"Wolani"},
["woe"] = {"Woleaian"},
["wof"] = {"Gambian Wolof"},
["wog"] = {"Wogamusin"},
["woi"] = {"Kamang"},
["wok"] = {"Longto"},
["wom"] = {"Wom (Nigeria)"},
["won"] = {"Wongo"},
["woo"] = {"Manombai"},
["wor"] = {"Woria"},
["wos"] = {"Hanga Hundi"},
["wow"] = {"Wawonii"},
["woy"] = {"Weyto"},
["wpc"] = {"Maco"},
["wrb"] = {"Waluwarra", "Warluwara"},
["wrg"] = {"Warungu", "Gudjal"},
["wrh"] = {"Wiradjuri"},
["wri"] = {"Wariyangga"},
["wrk"] = {"Garrwa"},
["wrl"] = {"Warlmanpa"},
["wrm"] = {"Warumungu"},
["wrn"] = {"Warnang"},
["wro"] = {"Worrorra"},
["wrp"] = {"Waropen"},
["wrr"] = {"Wardaman"},
["wrs"] = {"Waris"},
["wru"] = {"Waru"},
["wrv"] = {"Waruna"},
["wrw"] = {"Gugu Warra"},
["wrx"] = {"Wae Rana"},
["wry"] = {"Merwari"},
["wrz"] = {"Waray (Australia)"},
["wsa"] = {"Warembori"},
["wsg"] = {"Adilabad Gondi"},
["wsi"] = {"Wusi"},
["wsk"] = {"Waskia"},
["wsr"] = {"Owenia"},
["wss"] = {"Wasa"},
["wsu"] = {"Wasu"},
["wsv"] = {"Wotapuri-Katarqalai"},
["wtb"] = {"Matambwe"},
["wtf"] = {"Watiwa"},
["wth"] = {"Wathawurrung"},
["wti"] = {"Berta"},
["wtk"] = {"Watakataui"},
["wtm"] = {"Mewati"},
["wtw"] = {"Wotu"},
["wua"] = {"Wikngenchera"},
["wub"] = {"Wunambal"},
["wud"] = {"Wudu"},
["wuh"] = {"Wutunhua"},
["wul"] = {"Silimo"},
["wum"] = {"Wumbvu"},
["wun"] = {"Bungu"},
["wur"] = {"Wurrugu"},
["wut"] = {"Wutung"},
["wuu"] = {"Wu Chinese"},
["wuv"] = {"Wuvulu-Aua"},
["wux"] = {"Wulna"},
["wuy"] = {"Wauyai"},
["wwa"] = {"Waama"},
["wwb"] = {"Wakabunga"},
["wwo"] = {"Wetamut", "Dorig"},
["wwr"] = {"Warrwa"},
["www"] = {"Wawa"},
["wxa"] = {"Waxianghua"},
["wxw"] = {"Wardandi"},
["wyb"] = {"Wangaaybuwan-Ngiyambaa"},
["wyi"] = {"Woiwurrung"},
["wym"] = {"Wymysorys"},
["wyn"] = {"Wyandot"},
["wyr"] = {"Wayoró"},
["wyy"] = {"Western Fijian"},
["xaa"] = {"Andalusian Arabic"},
["xab"] = {"Sambe"},
["xac"] = {"Kachari"},
["xad"] = {"Adai"},
["xae"] = {"Aequian"},
["xag"] = {"Aghwan"},
["xai"] = {"Kaimbé"},
["xaj"] = {"Ararandewára"},
["xak"] = {"Máku"},
["xal"] = {"Kalmyk", "Oirat"},
["xam"] = {"ǀXam"},
["xan"] = {"Xamtanga"},
["xao"] = {"Khao"},
["xap"] = {"Apalachee"},
["xaq"] = {"Aquitanian"},
["xar"] = {"Karami"},
["xas"] = {"Kamas"},
["xat"] = {"Katawixi"},
["xau"] = {"Kauwera"},
["xav"] = {"Xavánte"},
["xaw"] = {"Kawaiisu"},
["xay"] = {"Kayan Mahakam"},
["xbb"] = {"Lower Burdekin"},
["xbc"] = {"Bactrian"},
["xbd"] = {"Bindal"},
["xbe"] = {"Bigambal"},
["xbg"] = {"Bunganditj"},
["xbi"] = {"Kombio"},
["xbj"] = {"Birrpayi"},
["xbm"] = {"Middle Breton"},
["xbn"] = {"Kenaboi"},
["xbo"] = {"Bolgarian"},
["xbp"] = {"Bibbulman"},
["xbr"] = {"Kambera"},
["xbw"] = {"Kambiwá"},
["xby"] = {"Batjala", "Batyala"},
["xcb"] = {"Cumbric"},
["xcc"] = {"Camunic"},
["xce"] = {"Celtiberian"},
["xcg"] = {"Cisalpine Gaulish"},
["xch"] = {"Chemakum", "Chimakum"},
["xcl"] = {"Classical Armenian"},
["xcm"] = {"Comecrudo"},
["xcn"] = {"Cotoname"},
["xco"] = {"Chorasmian"},
["xcr"] = {"Carian"},
["xct"] = {"Classical Tibetan"},
["xcu"] = {"Curonian"},
["xcv"] = {"Chuvantsy"},
["xcw"] = {"Coahuilteco"},
["xcy"] = {"Cayuse"},
["xda"] = {"Darkinyung"},
["xdc"] = {"Dacian"},
["xdk"] = {"Dharuk"},
["xdm"] = {"Edomite"},
["xdo"] = {"Kwandu"},
["xdq"] = {"Kaitag"},
["xdy"] = {"Malayic Dayak"},
["xeb"] = {"Eblan"},
["xed"] = {"Hdi"},
["xeg"] = {"ǁXegwi"},
["xel"] = {"Kelo"},
["xem"] = {"Kembayan"},
["xep"] = {"Epi-Olmec"},
["xer"] = {"Xerénte"},
["xes"] = {"Kesawai"},
["xet"] = {"Xetá"},
["xeu"] = {"Keoru-Ahia"},
["xfa"] = {"Faliscan"},
["xga"] = {"Galatian"},
["xgb"] = {"Gbin"},
["xgd"] = {"Gudang"},
["xgf"] = {"Gabrielino-Fernandeño"},
["xgg"] = {"Goreng"},
["xgi"] = {"Garingbal"},
["xgl"] = {"Galindan"},
["xgm"] = {"Dharumbal", "Guwinmal"},
["xgn"] = {"Mongolian languages"},
["xgr"] = {"Garza"},
["xgu"] = {"Unggumi"},
["xgw"] = {"Guwa"},
["xha"] = {"Harami"},
["xhc"] = {"Hunnic"},
["xhd"] = {"Hadrami"},
["xhe"] = {"Khetrani"},
["xhm"] = {"Middle Khmer (1400 to 1850 CE)"},
["xhr"] = {"Hernican"},
["xht"] = {"Hattic"},
["xhu"] = {"Hurrian"},
["xhv"] = {"Khua"},
["xib"] = {"Iberian"},
["xii"] = {"Xiri"},
["xil"] = {"Illyrian"},
["xin"] = {"Xinca"},
["xir"] = {"Xiriâna"},
["xis"] = {"Kisan"},
["xiv"] = {"Indus Valley Language"},
["xiy"] = {"Xipaya"},
["xjb"] = {"Minjungbal"},
["xjt"] = {"Jaitmatang"},
["xka"] = {"Kalkoti"},
["xkb"] = {"Northern Nago"},
["xkc"] = {"Kho'ini"},
["xkd"] = {"Mendalam Kayan"},
["xke"] = {"Kereho"},
["xkf"] = {"Khengkha"},
["xkg"] = {"Kagoro"},
["xki"] = {"Kenyan Sign Language"},
["xkj"] = {"Kajali"},
["xkk"] = {"Kachok", "Kaco'"},
["xkl"] = {"Mainstream Kenyah"},
["xkn"] = {"Kayan River Kayan"},
["xko"] = {"Kiorr"},
["xkp"] = {"Kabatei"},
["xkq"] = {"Koroni"},
["xkr"] = {"Xakriabá"},
["xks"] = {"Kumbewaha"},
["xkt"] = {"Kantosi"},
["xku"] = {"Kaamba"},
["xkv"] = {"Kgalagadi"},
["xkw"] = {"Kembra"},
["xkx"] = {"Karore"},
["xky"] = {"Uma' Lasan"},
["xkz"] = {"Kurtokha"},
["xla"] = {"Kamula"},
["xlb"] = {"Loup B"},
["xlc"] = {"Lycian"},
["xld"] = {"Lydian"},
["xle"] = {"Lemnian"},
["xlg"] = {"Ligurian (Ancient)"},
["xli"] = {"Liburnian"},
["xln"] = {"Alanic"},
["xlo"] = {"Loup A"},
["xlp"] = {"Lepontic"},
["xls"] = {"Lusitanian"},
["xlu"] = {"Cuneiform Luwian"},
["xly"] = {"Elymian"},
["xma"] = {"Mushungulu"},
["xmb"] = {"Mbonga"},
["xmc"] = {"Makhuwa-Marrevone"},
["xmd"] = {"Mbudum"},
["xme"] = {"Median"},
["xmf"] = {"Mingrelian"},
["xmg"] = {"Mengaka"},
["xmh"] = {"Kugu-Muminh"},
["xmj"] = {"Majera"},
["xmk"] = {"Ancient Macedonian"},
["xml"] = {"Malaysian Sign Language"},
["xmm"] = {"Manado Malay"},
["xmn"] = {"Manichaean Middle Persian"},
["xmo"] = {"Morerebi"},
["xmp"] = {"Kuku-Mu'inh"},
["xmq"] = {"Kuku-Mangk"},
["xmr"] = {"Meroitic"},
["xms"] = {"Moroccan Sign Language"},
["xmt"] = {"Matbat"},
["xmu"] = {"Kamu"},
["xmv"] = {"Antankarana Malagasy", "Tankarana Malagasy"},
["xmw"] = {"Tsimihety Malagasy"},
["xmx"] = {"Salawati", "Maden"},
["xmy"] = {"Mayaguduna"},
["xmz"] = {"Mori Bawah"},
["xna"] = {"Ancient North Arabian"},
["xnb"] = {"Kanakanabu"},
["xnd"] = {"Na-Dene languages"},
["xng"] = {"Middle Mongolian"},
["xnh"] = {"Kuanhua"},
["xni"] = {"Ngarigu"},
["xnj"] = {"Ngoni (Tanzania)"},
["xnk"] = {"Nganakarti"},
["xnm"] = {"Ngumbarl"},
["xnn"] = {"Northern Kankanay"},
["xno"] = {"Anglo-Norman"},
["xnq"] = {"Ngoni (Mozambique)"},
["xnr"] = {"Kangri"},
["xns"] = {"Kanashi"},
["xnt"] = {"Narragansett"},
["xnu"] = {"Nukunul"},
["xny"] = {"Nyiyaparli"},
["xnz"] = {"Kenzi", "Mattoki"},
["xoc"] = {"O'chi'chi'"},
["xod"] = {"Kokoda"},
["xog"] = {"Soga"},
["xoi"] = {"Kominimung"},
["xok"] = {"Xokleng"},
["xom"] = {"Komo (Sudan)"},
["xon"] = {"Konkomba"},
["xoo"] = {"Xukurú"},
["xop"] = {"Kopar"},
["xor"] = {"Korubo"},
["xow"] = {"Kowaki"},
["xpa"] = {"Pirriya"},
["xpb"] = {"Northeastern Tasmanian", "Pyemmairrener"},
["xpc"] = {"Pecheneg"},
["xpd"] = {"Oyster Bay Tasmanian"},
["xpe"] = {"Liberia Kpelle"},
["xpf"] = {"Southeast Tasmanian", "Nuenonne"},
["xpg"] = {"Phrygian"},
["xph"] = {"North Midlands Tasmanian", "Tyerrenoterpanner"},
["xpi"] = {"Pictish"},
["xpj"] = {"Mpalitjanh"},
["xpk"] = {"Kulina Pano"},
["xpl"] = {"Port Sorell Tasmanian"},
["xpm"] = {"Pumpokol"},
["xpn"] = {"Kapinawá"},
["xpo"] = {"Pochutec"},
["xpp"] = {"Puyo-Paekche"},
["xpq"] = {"Mohegan-Pequot"},
["xpr"] = {"Parthian"},
["xps"] = {"Pisidian"},
["xpt"] = {"Punthamara"},
["xpu"] = {"Punic"},
["xpv"] = {"Northern Tasmanian", "Tommeginne"},
["xpw"] = {"Northwestern Tasmanian", "Peerapper"},
["xpx"] = {"Southwestern Tasmanian", "Toogee"},
["xpy"] = {"Puyo"},
["xpz"] = {"Bruny Island Tasmanian"},
["xqa"] = {"Karakhanid"},
["xqt"] = {"Qatabanian"},
["xra"] = {"Krahô"},
["xrb"] = {"Eastern Karaboro"},
["xrd"] = {"Gundungurra"},
["xre"] = {"Kreye"},
["xrg"] = {"Minang"},
["xri"] = {"Krikati-Timbira"},
["xrm"] = {"Armazic"},
["xrn"] = {"Arin"},
["xrr"] = {"Raetic"},
["xrt"] = {"Aranama-Tamique"},
["xru"] = {"Marriammu"},
["xrw"] = {"Karawa"},
["xsa"] = {"Sabaean"},
["xsb"] = {"Sambal"},
["xsc"] = {"Scythian"},
["xsd"] = {"Sidetic"},
["xse"] = {"Sempan"},
["xsh"] = {"Shamang"},
["xsi"] = {"Sio"},
["xsj"] = {"Subi"},
["xsl"] = {"South Slavey"},
["xsm"] = {"Kasem"},
["xsn"] = {"Sanga (Nigeria)"},
["xso"] = {"Solano"},
["xsp"] = {"Silopi"},
["xsq"] = {"Makhuwa-Saka"},
["xsr"] = {"Sherpa"},
["xsu"] = {"Sanumá"},
["xsv"] = {"Sudovian"},
["xsy"] = {"Saisiyat"},
["xta"] = {"Alcozauca Mixtec"},
["xtb"] = {"Chazumba Mixtec"},
["xtc"] = {"Katcha-Kadugli-Miri"},
["xtd"] = {"Diuxi-Tilantongo Mixtec"},
["xte"] = {"Ketengban"},
["xtg"] = {"Transalpine Gaulish"},
["xth"] = {"Yitha Yitha"},
["xti"] = {"Sinicahua Mixtec"},
["xtj"] = {"San Juan Teita Mixtec"},
["xtl"] = {"Tijaltepec Mixtec"},
["xtm"] = {"Magdalena Peñasco Mixtec"},
["xtn"] = {"Northern Tlaxiaco Mixtec"},
["xto"] = {"Tokharian A"},
["xtp"] = {"San Miguel Piedras Mixtec"},
["xtq"] = {"Tumshuqese"},
["xtr"] = {"Early Tripuri"},
["xts"] = {"Sindihui Mixtec"},
["xtt"] = {"Tacahua Mixtec"},
["xtu"] = {"Cuyamecalco Mixtec"},
["xtv"] = {"Thawa"},
["xtw"] = {"Tawandê"},
["xty"] = {"Yoloxochitl Mixtec"},
["xua"] = {"Alu Kurumba"},
["xub"] = {"Betta Kurumba"},
["xud"] = {"Umiida"},
["xug"] = {"Kunigami"},
["xuj"] = {"Jennu Kurumba"},
["xul"] = {"Ngunawal", "Nunukul"},
["xum"] = {"Umbrian"},
["xun"] = {"Unggaranggu"},
["xuo"] = {"Kuo"},
["xup"] = {"Upper Umpqua"},
["xur"] = {"Urartian"},
["xut"] = {"Kuthant"},
["xuu"] = {"Kxoe", "Khwedam"},
["xve"] = {"Venetic"},
["xvi"] = {"Kamviri"},
["xvn"] = {"Vandalic"},
["xvo"] = {"Volscian"},
["xvs"] = {"Vestinian"},
["xwa"] = {"Kwaza"},
["xwc"] = {"Woccon"},
["xwd"] = {"Wadi Wadi"},
["xwe"] = {"Xwela Gbe"},
["xwg"] = {"Kwegu"},
["xwj"] = {"Wajuk"},
["xwk"] = {"Wangkumara"},
["xwl"] = {"Western Xwla Gbe"},
["xwo"] = {"Written Oirat"},
["xwr"] = {"Kwerba Mamberamo"},
["xwt"] = {"Wotjobaluk"},
["xww"] = {"Wemba Wemba"},
["xxb"] = {"Boro (Ghana)"},
["xxk"] = {"Ke'o"},
["xxm"] = {"Minkin"},
["xxr"] = {"Koropó"},
["xxt"] = {"Tambora"},
["xya"] = {"Yaygir"},
["xyb"] = {"Yandjibara"},
["xyj"] = {"Mayi-Yapi"},
["xyk"] = {"Mayi-Kulan"},
["xyl"] = {"Yalakalore"},
["xyt"] = {"Mayi-Thakurti"},
["xyy"] = {"Yorta Yorta"},
["xzh"] = {"Zhang-Zhung"},
["xzm"] = {"Zemgalian"},
["xzp"] = {"Ancient Zapotec"},
["yaa"] = {"Yaminahua"},
["yab"] = {"Yuhup"},
["yac"] = {"Pass Valley Yali"},
["yad"] = {"Yagua"},
["yae"] = {"Pumé"},
["yaf"] = {"Yaka (Democratic Republic of Congo)"},
["yag"] = {"Yámana"},
["yah"] = {"Yazgulyam"},
["yai"] = {"Yagnobi"},
["yaj"] = {"Banda-Yangere"},
["yak"] = {"Yakama"},
["yal"] = {"Yalunka"},
["yam"] = {"Yamba"},
["yan"] = {"Mayangna"},
["yao"] = {"Yao"},
["yap"] = {"Yapese"},
["yaq"] = {"Yaqui"},
["yar"] = {"Yabarana"},
["yas"] = {"Nugunu (Cameroon)"},
["yat"] = {"Yambeta"},
["yau"] = {"Yuwana"},
["yav"] = {"Yangben"},
["yaw"] = {"Yawalapití"},
["yax"] = {"Yauma"},
["yay"] = {"Agwagwune"},
["yaz"] = {"Lokaa"},
["yba"] = {"Yala"},
["ybb"] = {"Yemba"},
["ybe"] = {"West Yugur"},
["ybh"] = {"Yakha"},
["ybi"] = {"Yamphu"},
["ybj"] = {"Hasha"},
["ybk"] = {"Bokha"},
["ybl"] = {"Yukuben"},
["ybm"] = {"Yaben"},
["ybn"] = {"Yabaâna"},
["ybo"] = {"Yabong"},
["ybx"] = {"Yawiyo"},
["yby"] = {"Yaweyuha"},
["ych"] = {"Chesu"},
["ycl"] = {"Lolopo"},
["ycn"] = {"Yucuna"},
["ycp"] = {"Chepya"},
["ycr"] = {"Yilan Creole"},
["yda"] = {"Yanda"},
["ydd"] = {"Eastern Yiddish"},
["yde"] = {"Yangum Dey"},
["ydg"] = {"Yidgha"},
["ydk"] = {"Yoidik"},
["yea"] = {"Ravula"},
["yec"] = {"Yeniche"},
["yee"] = {"Yimas"},
["yei"] = {"Yeni"},
["yej"] = {"Yevanic"},
["yel"] = {"Yela"},
["yer"] = {"Tarok"},
["yes"] = {"Nyankpa"},
["yet"] = {"Yetfa"},
["yeu"] = {"Yerukula"},
["yev"] = {"Yapunda"},
["yey"] = {"Yeyi"},
["yga"] = {"Malyangapa"},
["ygi"] = {"Yiningayi"},
["ygl"] = {"Yangum Gel"},
["ygm"] = {"Yagomi"},
["ygp"] = {"Gepo"},
["ygr"] = {"Yagaria"},
["ygs"] = {"Yolŋu Sign Language"},
["ygu"] = {"Yugul"},
["ygw"] = {"Yagwoia"},
["yha"] = {"Baha Buyang"},
["yhd"] = {"Judeo-Iraqi Arabic"},
["yhl"] = {"Hlepho Phowa"},
["yhs"] = {"Yan-nhaŋu Sign Language"},
["yia"] = {"Yinggarda"},
["yif"] = {"Ache"},
["yig"] = {"Wusa Nasu"},
["yih"] = {"Western Yiddish"},
["yii"] = {"Yidiny"},
["yij"] = {"Yindjibarndi"},
["yik"] = {"Dongshanba Lalo"},
["yil"] = {"Yindjilandji"},
["yim"] = {"Yimchungru Naga"},
["yin"] = {"Riang Lai", "Yinchia"},
["yip"] = {"Pholo"},
["yiq"] = {"Miqie"},
["yir"] = {"North Awyu"},
["yis"] = {"Yis"},
["yit"] = {"Eastern Lalu"},
["yiu"] = {"Awu"},
["yiv"] = {"Northern Nisu"},
["yix"] = {"Axi Yi"},
["yiz"] = {"Azhe"},
["yka"] = {"Yakan"},
["ykg"] = {"Northern Yukaghir"},
["ykh"] = {"Khamnigan Mongol"},
["yki"] = {"Yoke"},
["ykk"] = {"Yakaikeke"},
["ykl"] = {"Khlula"},
["ykm"] = {"Kap"},
["ykn"] = {"Kua-nsi"},
["yko"] = {"Yasa"},
["ykr"] = {"Yekora"},
["ykt"] = {"Kathu"},
["yku"] = {"Kuamasi"},
["yky"] = {"Yakoma"},
["yla"] = {"Yaul"},
["ylb"] = {"Yaleba"},
["yle"] = {"Yele"},
["ylg"] = {"Yelogu"},
["yli"] = {"Angguruk Yali"},
["yll"] = {"Yil"},
["ylm"] = {"Limi"},
["yln"] = {"Langnian Buyang"},
["ylo"] = {"Naluo Yi"},
["ylr"] = {"Yalarnnga"},
["ylu"] = {"Aribwaung"},
["yly"] = {"Nyâlayu", "Nyelâyu"},
["ymb"] = {"Yambes"},
["ymc"] = {"Southern Muji"},
["ymd"] = {"Muda"},
["yme"] = {"Yameo"},
["ymg"] = {"Yamongeri"},
["ymh"] = {"Mili"},
["ymi"] = {"Moji"},
["ymk"] = {"Makwe"},
["yml"] = {"Iamalele"},
["ymm"] = {"Maay"},
["ymn"] = {"Yamna", "Sunum"},
["ymo"] = {"Yangum Mon"},
["ymp"] = {"Yamap"},
["ymq"] = {"Qila Muji"},
["ymr"] = {"Malasar"},
["yms"] = {"Mysian"},
["ymx"] = {"Northern Muji"},
["ymz"] = {"Muzi"},
["yna"] = {"Aluo"},
["ynd"] = {"Yandruwandha"},
["yne"] = {"Lang'e"},
["yng"] = {"Yango"},
["ynk"] = {"Naukan Yupik"},
["ynl"] = {"Yangulam"},
["ynn"] = {"Yana"},
["yno"] = {"Yong"},
["ynq"] = {"Yendang"},
["yns"] = {"Yansi"},
["ynu"] = {"Yahuna"},
["yob"] = {"Yoba"},
["yog"] = {"Yogad"},
["yoi"] = {"Yonaguni"},
["yok"] = {"Yokuts"},
["yol"] = {"Yola"},
["yom"] = {"Yombe"},
["yon"] = {"Yongkom"},
["yot"] = {"Yotti"},
["yox"] = {"Yoron"},
["yoy"] = {"Yoy"},
["ypa"] = {"Phala"},
["ypb"] = {"Labo Phowa"},
["ypg"] = {"Phola"},
["yph"] = {"Phupha"},
["ypk"] = {"Yupik languages"},
["ypm"] = {"Phuma"},
["ypn"] = {"Ani Phowa"},
["ypo"] = {"Alo Phola"},
["ypp"] = {"Phupa"},
["ypz"] = {"Phuza"},
["yra"] = {"Yerakai"},
["yrb"] = {"Yareba"},
["yre"] = {"Yaouré"},
["yrk"] = {"Nenets"},
["yrl"] = {"Nhengatu"},
["yrm"] = {"Yirrk-Mel"},
["yrn"] = {"Yerong"},
["yro"] = {"Yaroamë"},
["yrs"] = {"Yarsun"},
["yrw"] = {"Yarawata"},
["yry"] = {"Yarluyandi"},
["ysc"] = {"Yassic"},
["ysd"] = {"Samatao"},
["ysg"] = {"Sonaga"},
["ysl"] = {"Yugoslavian Sign Language"},
["ysm"] = {"Myanmar Sign Language"},
["ysn"] = {"Sani"},
["yso"] = {"Nisi (China)"},
["ysp"] = {"Southern Lolopo"},
["ysr"] = {"Sirenik Yupik"},
["yss"] = {"Yessan-Mayo"},
["ysy"] = {"Sanie"},
["yta"] = {"Talu"},
["ytl"] = {"Tanglang"},
["ytp"] = {"Thopho"},
["ytw"] = {"Yout Wam"},
["yty"] = {"Yatay"},
["yua"] = {"Yucateco", "Yucatec Maya"},
["yub"] = {"Yugambal"},
["yuc"] = {"Yuchi"},
["yud"] = {"Judeo-Tripolitanian Arabic"},
["yue"] = {"Yue Chinese", "Cantonese"},
["yuf"] = {"Havasupai-Walapai-Yavapai"},
["yug"] = {"Yug"},
["yui"] = {"Yurutí"},
["yuj"] = {"Karkar-Yuri"},
["yuk"] = {"Yuki"},
["yul"] = {"Yulu"},
["yum"] = {"Quechan"},
["yun"] = {"Bena (Nigeria)"},
["yup"] = {"Yukpa"},
["yuq"] = {"Yuqui"},
["yur"] = {"Yurok"},
["yut"] = {"Yopno"},
["yuw"] = {"Yau (Morobe Province)"},
["yux"] = {"Southern Yukaghir"},
["yuy"] = {"East Yugur"},
["yuz"] = {"Yuracare"},
["yva"] = {"Yawa"},
["yvt"] = {"Yavitero"},
["ywa"] = {"Kalou"},
["ywg"] = {"Yinhawangka"},
["ywl"] = {"Western Lalu"},
["ywn"] = {"Yawanawa"},
["ywq"] = {"Wuding-Luquan Yi"},
["ywr"] = {"Yawuru"},
["ywt"] = {"Xishanba Lalo", "Central Lalo"},
["ywu"] = {"Wumeng Nasu"},
["yww"] = {"Yawarawarga"},
["yxa"] = {"Mayawali"},
["yxg"] = {"Yagara"},
["yxl"] = {"Yardliyawarra"},
["yxm"] = {"Yinwum"},
["yxu"] = {"Yuyu"},
["yxy"] = {"Yabula Yabula"},
["yyr"] = {"Yir Yoront"},
["yyu"] = {"Yau (Sandaun Province)"},
["yyz"] = {"Ayizi"},
["yzg"] = {"E'ma Buyang"},
["yzk"] = {"Zokhuo"},
["zaa"] = {"Sierra de Juárez Zapotec"},
["zab"] = {"Western Tlacolula Valley Zapotec", "San Juan Guelavía Zapotec"},
["zac"] = {"Ocotlán Zapotec"},
["zad"] = {"Cajonos Zapotec"},
["zae"] = {"Yareni Zapotec"},
["zaf"] = {"Ayoquesco Zapotec"},
["zag"] = {"Zaghawa"},
["zah"] = {"Zangwal"},
["zai"] = {"Isthmus Zapotec"},
["zaj"] = {"Zaramo"},
["zak"] = {"Zanaki"},
["zal"] = {"Zauzou"},
["zam"] = {"Miahuatlán Zapotec"},
["zao"] = {"Ozolotepec Zapotec"},
["zap"] = {"Zapotec"},
["zaq"] = {"Aloápam Zapotec"},
["zar"] = {"Rincón Zapotec"},
["zas"] = {"Santo Domingo Albarradas Zapotec"},
["zat"] = {"Tabaa Zapotec"},
["zau"] = {"Zangskari"},
["zav"] = {"Yatzachi Zapotec"},
["zaw"] = {"Mitla Zapotec"},
["zax"] = {"Xadani Zapotec"},
["zay"] = {"Zayse-Zergulla", "Zaysete"},
["zaz"] = {"Zari"},
["zba"] = {"Balaibalan"},
["zbc"] = {"Central Berawan"},
["zbe"] = {"East Berawan"},
["zbl"] = {"Blissymbols", "Bliss", "Blissymbolics"},
["zbt"] = {"Batui"},
["zbu"] = {"Bu (Bauchi State)"},
["zbw"] = {"West Berawan"},
["zca"] = {"Coatecas Altas Zapotec"},
["zcd"] = {"Las Delicias Zapotec"},
["zch"] = {"Central Hongshuihe Zhuang"},
["zdj"] = {"Ngazidja Comorian"},
["zea"] = {"Zeeuws"},
["zeg"] = {"Zenag"},
["zeh"] = {"Eastern Hongshuihe Zhuang"},
["zem"] = {"Zeem"},
["zen"] = {"Zenaga"},
["zga"] = {"Kinga"},
["zgb"] = {"Guibei Zhuang"},
["zgh"] = {"Standard Moroccan Tamazight"},
["zgm"] = {"Minz Zhuang"},
["zgn"] = {"Guibian Zhuang"},
["zgr"] = {"Magori"},
["zhb"] = {"Zhaba"},
["zhd"] = {"Dai Zhuang"},
["zhi"] = {"Zhire"},
["zhn"] = {"Nong Zhuang"},
["zhw"] = {"Zhoa"},
["zhx"] = {"Chinese (family)"},
["zia"] = {"Zia"},
["zib"] = {"Zimbabwe Sign Language"},
["zik"] = {"Zimakani"},
["zil"] = {"Zialo"},
["zim"] = {"Mesme"},
["zin"] = {"Zinza"},
["ziw"] = {"Zigula"},
["ziz"] = {"Zizilivakan"},
["zka"] = {"Kaimbulawa"},
["zkd"] = {"Kadu"},
["zkg"] = {"Koguryo"},
["zkh"] = {"Khorezmian"},
["zkk"] = {"Karankawa"},
["zkn"] = {"Kanan"},
["zko"] = {"Kott"},
["zkp"] = {"São Paulo Kaingáng"},
["zkr"] = {"Zakhring"},
["zkt"] = {"Kitan"},
["zku"] = {"Kaurna"},
["zkv"] = {"Krevinian"},
["zkz"] = {"Khazar"},
["zla"] = {"Zula"},
["zle"] = {"East Slavic languages"},
["zlj"] = {"Liujiang Zhuang"},
["zlm"] = {"Malay (individual language)"},
["zln"] = {"Lianshan Zhuang"},
["zlq"] = {"Liuqian Zhuang"},
["zls"] = {"South Slavic languages"},
["zlu"] = {"Zul"},
["zlw"] = {"West Slavic languages"},
["zma"] = {"Manda (Australia)"},
["zmb"] = {"Zimba"},
["zmc"] = {"Margany"},
["zmd"] = {"Maridan"},
["zme"] = {"Mangerr"},
["zmf"] = {"Mfinu"},
["zmg"] = {"Marti Ke"},
["zmh"] = {"Makolkol"},
["zmi"] = {"Negeri Sembilan Malay"},
["zmj"] = {"Maridjabin"},
["zmk"] = {"Mandandanyi"},
["zml"] = {"Matngala"},
["zmm"] = {"Marimanindji", "Marramaninyshi"},
["zmn"] = {"Mbangwe"},
["zmo"] = {"Molo"},
["zmp"] = {"Mpuono"},
["zmq"] = {"Mituku"},
["zmr"] = {"Maranunggu"},
["zms"] = {"Mbesa"},
["zmt"] = {"Maringarr"},
["zmu"] = {"Muruwari"},
["zmv"] = {"Mbariman-Gudhinma"},
["zmw"] = {"Mbo (Democratic Republic of Congo)"},
["zmx"] = {"Bomitaba"},
["zmy"] = {"Mariyedi"},
["zmz"] = {"Mbandja"},
["zna"] = {"Zan Gula"},
["znd"] = {"Zande languages"},
["zne"] = {"Zande (individual language)"},
["zng"] = {"Mang"},
["znk"] = {"Manangkari"},
["zns"] = {"Mangas"},
["zoc"] = {"Copainalá Zoque"},
["zoh"] = {"Chimalapa Zoque"},
["zom"] = {"Zou"},
["zoo"] = {"Asunción Mixtepec Zapotec"},
["zoq"] = {"Tabasco Zoque"},
["zor"] = {"Rayón Zoque"},
["zos"] = {"Francisco León Zoque"},
["zpa"] = {"Lachiguiri Zapotec"},
["zpb"] = {"Yautepec Zapotec"},
["zpc"] = {"Choapan Zapotec"},
["zpd"] = {"Southeastern Ixtlán Zapotec"},
["zpe"] = {"Petapa Zapotec"},
["zpf"] = {"San Pedro Quiatoni Zapotec"},
["zpg"] = {"Guevea De Humboldt Zapotec"},
["zph"] = {"Totomachapan Zapotec"},
["zpi"] = {"Santa María Quiegolani Zapotec"},
["zpj"] = {"Quiavicuzas Zapotec"},
["zpk"] = {"Tlacolulita Zapotec"},
["zpl"] = {"Lachixío Zapotec"},
["zpm"] = {"Mixtepec Zapotec"},
["zpn"] = {"Santa Inés Yatzechi Zapotec"},
["zpo"] = {"Amatlán Zapotec"},
["zpp"] = {"El Alto Zapotec"},
["zpq"] = {"Zoogocho Zapotec"},
["zpr"] = {"Santiago Xanica Zapotec"},
["zps"] = {"Coatlán Zapotec"},
["zpt"] = {"San Vicente Coatlán Zapotec"},
["zpu"] = {"Yalálag Zapotec"},
["zpv"] = {"Chichicapan Zapotec"},
["zpw"] = {"Zaniza Zapotec"},
["zpx"] = {"San Baltazar Loxicha Zapotec"},
["zpy"] = {"Mazaltepec Zapotec"},
["zpz"] = {"Texmelucan Zapotec"},
["zqe"] = {"Qiubei Zhuang"},
["zra"] = {"Kara (Korea)"},
["zrg"] = {"Mirgan"},
["zrn"] = {"Zerenkel"},
["zro"] = {"Záparo"},
["zrp"] = {"Zarphatic"},
["zrs"] = {"Mairasi"},
["zsa"] = {"Sarasira"},
["zsk"] = {"Kaskean"},
["zsl"] = {"Zambian Sign Language"},
["zsm"] = {"Standard Malay"},
["zsr"] = {"Southern Rincon Zapotec"},
["zsu"] = {"Sukurum"},
["zte"] = {"Elotepec Zapotec"},
["ztg"] = {"Xanaguía Zapotec"},
["ztl"] = {"Lapaguía-Guivini Zapotec"},
["ztm"] = {"San Agustín Mixtepec Zapotec"},
["ztn"] = {"Santa Catarina Albarradas Zapotec"},
["ztp"] = {"Loxicha Zapotec"},
["ztq"] = {"Quioquitani-Quierí Zapotec"},
["zts"] = {"Tilquiapan Zapotec"},
["ztt"] = {"Tejalapan Zapotec"},
["ztu"] = {"Güilá Zapotec"},
["ztx"] = {"Zaachila Zapotec"},
["zty"] = {"Yatee Zapotec"},
["zuh"] = {"Tokano"},
["zum"] = {"Kumzari"},
["zun"] = {"Zuni"},
["zuy"] = {"Zumaya"},
["zwa"] = {"Zay"},
["zxx"] = {"No linguistic content", "Not applicable"},
["zyb"] = {"Yongbei Zhuang"},
["zyg"] = {"Yang Zhuang"},
["zyj"] = {"Youjiang Zhuang"},
["zyn"] = {"Yongnan Zhuang"},
["zyp"] = {"Zyphe Chin"},
["zza"] = {"Zaza", "Dimili", "Dimli (macrolanguage)", "Kirdki", "Kirmanjki (macrolanguage)", "Zazaki"},
["zzj"] = {"Zuojiang Zhuang"}
}
local deprecated = {
["in"] = {"Indonesian"},
["iw"] = {"Hebrew"},
["ji"] = {"Yiddish"},
["jw"] = {"Javanese"},
["mo"] = {"Moldavian", "Moldovan"},
["aam"] = {"Aramanik"},
["adp"] = {"Adap"},
["agp"] = {"Paranan"},
["ais"] = {"Nataoran Amis"},
["ajp"] = {"South Levantine Arabic"},
["ajt"] = {"Judeo-Tunisian Arabic"},
["aoh"] = {"Arma"},
["asd"] = {"Asas"},
["aue"] = {"ǂKxʼauǁʼein"},
["ayx"] = {"Ayi (China)"},
["ayy"] = {"Tayabas Ayta"},
["baz"] = {"Tunen"},
["bbz"] = {"Babalia Creole Arabic"},
["bgm"] = {"Baga Mboteni"},
["bhk"] = {"Albay Bicolano"},
["bic"] = {"Bikaru"},
["bij"] = {"Vaghat-Ya-Bijim-Legeri"},
["bjd"] = {"Bandjigali"},
["bjq"] = {"Southern Betsimisaraka Malagasy"},
["bkb"] = {"Finallig"},
["blg"] = {"Balau"},
["bmy"] = {"Bemba (Democratic Republic of Congo)"},
["bpb"] = {"Barbacoas"},
["btb"] = {"Beti (Cameroon)"},
["btl"] = {"Bhatola"},
["bxx"] = {"Borna (Democratic Republic of Congo)"},
["byy"] = {"Buya"},
["cbe"] = {"Chipiajes"},
["cbh"] = {"Cagua"},
["cca"] = {"Cauca"},
["ccq"] = {"Chaungtha"},
["cdg"] = {"Chamari"},
["cjr"] = {"Chorotega"},
["cka"] = {"Khumi Awa Chin"},
["cmk"] = {"Chimakum"},
["coy"] = {"Coyaima"},
["cqu"] = {"Chilean Quechua"},
["cug"] = {"Chungmboko", "Cung"},
["cum"] = {"Cumeral"},
["daf"] = {"Dan"},
["dap"] = {"Nisi (India)"},
["dgu"] = {"Degaru"},
["dha"] = {"Dhanwar (India)"},
["dit"] = {"Dirari"},
["djl"] = {"Djiwarli"},
["dkl"] = {"Kolum So Dogon"},
["drh"] = {"Darkhat"},
["drr"] = {"Dororo"},
["drw"] = {"Darwazi"},
["dud"] = {"Hun-Saare"},
["duj"] = {"Dhuwal"},
["dwl"] = {"Walo Kumbe Dogon"},
["ekc"] = {"Eastern Karnic"},
["elp"] = {"Elpaputih"},
["emo"] = {"Emok"},
["gav"] = {"Gabutamon"},
["gbc"] = {"Garawa"},
["gfx"] = {"Mangetti Dune ǃXung"},
["ggn"] = {"Eastern Gurung"},
["ggo"] = {"Southern Gondi"},
["ggr"] = {"Aghu Tharnggalu"},
["gio"] = {"Gelao"},
["gji"] = {"Geji"},
["gli"] = {"Guliguli"},
["gti"] = {"Gbati-ri"},
["guv"] = {"Gey"},
["hrr"] = {"Horuru"},
["iap"] = {"Iapama"},
["ibi"] = {"Ibilo"},
["ill"] = {"Iranun"},
["ilw"] = {"Talur"},
["ime"] = {"Imeraguen"},
["izi"] = {"Izi-Ezaa-Ikwo-Mgbo"},
["jar"] = {"Jarawa (Nigeria)"},
["jeg"] = {"Jeng"},
["kbf"] = {"Kakauhua"},
["kdv"] = {"Kado"},
["kgc"] = {"Kasseng"},
["kgd"] = {"Kataang"},
["kgh"] = {"Upper Tanudan Kalinga"},
["kgm"] = {"Karipúna"},
["kjf"] = {"Khalaj [Indo-Iranian]"},
["koj"] = {"Sara Dunjo"},
["kox"] = {"Coxima"},
["kpp"] = {"Paku Karen"},
["krm"] = {"Krim"},
["ksa"] = {"Shuwa-Zamani"},
["ktr"] = {"Kota Marudu Tinagas"},
["kvs"] = {"Kunggara"},
["kwq"] = {"Kwak"},
["kxe"] = {"Kakihum"},
["kxl"] = {"Nepali Kurux"},
["kxu"] = {"Kui (India)"},
["kzh"] = {"Kenuzi-Dongola"},
["kzj"] = {"Coastal Kadazan"},
["kzt"] = {"Tambunan Dusun"},
["lak"] = {"Laka (Nigeria)"},
["lba"] = {"Lui"},
["leg"] = {"Lengua"},
["lii"] = {"Lingkhim"},
["llo"] = {"Khlor"},
["lmm"] = {"Lamam"},
["lmz"] = {"Lumbee"},
["lno"] = {"Lango (South Sudan)"},
["lsg"] = {"Lyons Sign Language"},
["meg"] = {"Mea"},
["mgx"] = {"Omati"},
["mhh"] = {"Maskoy Pidgin"},
["mja"] = {"Mahei"},
["mld"] = {"Malakhel"},
["mnt"] = {"Maykulan"},
["mof"] = {"Mohegan-Montauk-Narragansett"},
["mst"] = {"Cataelano Mandaya"},
["mvm"] = {"Muya"},
["mwd"] = {"Mudbura"},
["mwj"] = {"Maligo"},
["mwx"] = {"Mediak"},
["mwy"] = {"Mosiro"},
["myd"] = {"Maramba"},
["myi"] = {"Mina (India)"},
["myq"] = {"Forest Maninka"},
["myt"] = {"Sangab Mandaya"},
["nad"] = {"Nijadali"},
["nbf"] = {"Naxi"},
["nbx"] = {"Ngura"},
["ncp"] = {"Ndaktup"},
["ngo"] = {"Ngoni"},
["nln"] = {"Durango Nahuatl"},
["nlr"] = {"Ngarla"},
["nns"] = {"Ningye"},
["nnx"] = {"Ngong"},
["nom"] = {"Nocamán"},
["noo"] = {"Nootka"},
["nts"] = {"Natagaimas"},
["nxu"] = {"Narau"},
["ome"] = {"Omejes"},
["oun"] = {"ǃOǃung"},
["pat"] = {"Papitalai"},
["pbz"] = {"Palu"},
["pcr"] = {"Panang"},
["pgy"] = {"Pongyong"},
["pii"] = {"Pini"},
["plj"] = {"Polci"},
["plp"] = {"Palpa"},
["pmc"] = {"Palumata"},
["pmk"] = {"Pamlico"},
["pmu"] = {"Mirpur Panjabi"},
["pod"] = {"Ponares"},
["ppa"] = {"Pao"},
["ppr"] = {"Piru"},
["prb"] = {"Lua'"},
["prp"] = {"Parsi"},
["pry"] = {"Pray 3"},
["puk"] = {"Pu Ko"},
["puz"] = {"Purum Naga"},
["rie"] = {"Rien"},
["rmr"] = {"Caló"},
["rna"] = {"Runa"},
["rsi"] = {"Rennellese Sign Language"},
["sap"] = {"Sanapaná"},
["sca"] = {"Sansu"},
["sdm"] = {"Semandang"},
["sgl"] = {"Sanglechi-Ishkashimi"},
["sgo"] = {"Songa"},
["skk"] = {"Sok"},
["slq"] = {"Salchuq"},
["smd"] = {"Sama"},
["snb"] = {"Sebuyau"},
["snh"] = {"Shinabo"},
["sul"] = {"Surigaonon"},
["sum"] = {"Sumo-Mayangna"},
["svr"] = {"Savara"},
["szd"] = {"Seru"},
["tbb"] = {"Tapeba"},
["tdu"] = {"Tempasuk Dusun"},
["tgg"] = {"Tangga"},
["thc"] = {"Tai Hang Tong"},
["thw"] = {"Thudam"},
["thx"] = {"The"},
["tid"] = {"Tidong"},
["tie"] = {"Tingal"},
["tkk"] = {"Takpa"},
["tlw"] = {"South Wemale"},
["tmk"] = {"Northwestern Tamang"},
["tmp"] = {"Tai Mène"},
["tne"] = {"Tinoc Kallahan"},
["tnf"] = {"Tangshewi"},
["toe"] = {"Tomedes"},
["tpw"] = {"Tupí"},
["tsf"] = {"Southwestern Tamang"},
["unp"] = {"Worora"},
["uok"] = {"Uokha"},
["uun"] = {"Kulon-Pazeh"},
["vki"] = {"Ija-Zuba"},
["wgw"] = {"Wagawaga"},
["wit"] = {"Wintu"},
["wiw"] = {"Wirangu"},
["wra"] = {"Warapu"},
["wrd"] = {"Warduji"},
["wya"] = {"Wyandot"},
["xba"] = {"Kamba (Brazil)"},
["xbx"] = {"Kabixí"},
["xia"] = {"Xiandao"},
["xip"] = {"Xipináwa"},
["xkh"] = {"Karahawyana"},
["xrq"] = {"Karranga"},
["xss"] = {"Assan"},
["xtz"] = {"Tasmanian"},
["ybd"] = {"Yangbye"},
["yds"] = {"Yiddish Sign Language"},
["yen"] = {"Yendang"},
["yiy"] = {"Yir Yoront"},
["yma"] = {"Yamphe"},
["ymt"] = {"Mator-Taygi-Karagas"},
["ynh"] = {"Yangho"},
["yos"] = {"Yos"},
["yri"] = {"Yarí"},
["yuu"] = {"Yugh"},
["zir"] = {"Ziriya"},
["zkb"] = {"Koibal"},
["zua"] = {"Zeem"}
}
return {
active = active,
deprecated = deprecated,
}
d2b8387b798a45d93230d1c1b7b22a80714751a1
Module:Language/data/iana scripts
828
185
375
2023-08-21T15:41:24Z
[[w>Trappist the monk
0
update to 2023-08-02 data;
Scribunto
text/plain
-- File-Date: 2023-08-02
return {
["Adlm"] = {"Adlam"},
["Afak"] = {"Afaka"},
["Aghb"] = {"Caucasian Albanian"},
["Ahom"] = {"Ahom", "Tai Ahom"},
["Arab"] = {"Arabic"},
["Aran"] = {"Arabic (Nastaliq variant)"},
["Armi"] = {"Imperial Aramaic"},
["Armn"] = {"Armenian"},
["Avst"] = {"Avestan"},
["Bali"] = {"Balinese"},
["Bamu"] = {"Bamum"},
["Bass"] = {"Bassa Vah"},
["Batk"] = {"Batak"},
["Beng"] = {"Bengali", "Bangla"},
["Bhks"] = {"Bhaiksuki"},
["Blis"] = {"Blissymbols"},
["Bopo"] = {"Bopomofo"},
["Brah"] = {"Brahmi"},
["Brai"] = {"Braille"},
["Bugi"] = {"Buginese"},
["Buhd"] = {"Buhid"},
["Cakm"] = {"Chakma"},
["Cans"] = {"Unified Canadian Aboriginal Syllabics"},
["Cari"] = {"Carian"},
["Cham"] = {"Cham"},
["Cher"] = {"Cherokee"},
["Chrs"] = {"Chorasmian"},
["Cirt"] = {"Cirth"},
["Copt"] = {"Coptic"},
["Cpmn"] = {"Cypro-Minoan"},
["Cprt"] = {"Cypriot syllabary"},
["Cyrl"] = {"Cyrillic"},
["Cyrs"] = {"Cyrillic (Old Church Slavonic variant)"},
["Deva"] = {"Devanagari", "Nagari"},
["Diak"] = {"Dives Akuru"},
["Dogr"] = {"Dogra"},
["Dsrt"] = {"Deseret", "Mormon"},
["Dupl"] = {"Duployan shorthand", "Duployan stenography"},
["Egyd"] = {"Egyptian demotic"},
["Egyh"] = {"Egyptian hieratic"},
["Egyp"] = {"Egyptian hieroglyphs"},
["Elba"] = {"Elbasan"},
["Elym"] = {"Elymaic"},
["Ethi"] = {"Ethiopic", "Geʻez", "Ge'ez"},
["Geok"] = {"Khutsuri (Asomtavruli and Nuskhuri)"},
["Geor"] = {"Georgian (Mkhedruli and Mtavruli)"},
["Glag"] = {"Glagolitic"},
["Gong"] = {"Gunjala Gondi"},
["Gonm"] = {"Masaram Gondi"},
["Goth"] = {"Gothic"},
["Gran"] = {"Grantha"},
["Grek"] = {"Greek"},
["Gujr"] = {"Gujarati"},
["Guru"] = {"Gurmukhi"},
["Hanb"] = {"Han with Bopomofo (alias for Han + Bopomofo)"},
["Hang"] = {"Hangul", "Hangŭl", "Hangeul"},
["Hani"] = {"Han", "Hanzi", "Kanji", "Hanja"},
["Hano"] = {"Hanunoo", "Hanunóo"},
["Hans"] = {"Han (Simplified variant)"},
["Hant"] = {"Han (Traditional variant)"},
["Hatr"] = {"Hatran"},
["Hebr"] = {"Hebrew"},
["Hira"] = {"Hiragana"},
["Hluw"] = {"Anatolian Hieroglyphs", "Luwian Hieroglyphs", "Hittite Hieroglyphs"},
["Hmng"] = {"Pahawh Hmong"},
["Hmnp"] = {"Nyiakeng Puachue Hmong"},
["Hrkt"] = {"Japanese syllabaries (alias for Hiragana + Katakana)"},
["Hung"] = {"Old Hungarian", "Hungarian Runic"},
["Inds"] = {"Indus", "Harappan"},
["Ital"] = {"Old Italic (Etruscan, Oscan, etc.)"},
["Jamo"] = {"Jamo (alias for Jamo subset of Hangul)"},
["Java"] = {"Javanese"},
["Jpan"] = {"Japanese (alias for Han + Hiragana + Katakana)"},
["Jurc"] = {"Jurchen"},
["Kali"] = {"Kayah Li"},
["Kana"] = {"Katakana"},
["Kawi"] = {"Kawi"},
["Khar"] = {"Kharoshthi"},
["Khmr"] = {"Khmer"},
["Khoj"] = {"Khojki"},
["Kitl"] = {"Khitan large script"},
["Kits"] = {"Khitan small script"},
["Knda"] = {"Kannada"},
["Kore"] = {"Korean (alias for Hangul + Han)"},
["Kpel"] = {"Kpelle"},
["Kthi"] = {"Kaithi"},
["Lana"] = {"Tai Tham", "Lanna"},
["Laoo"] = {"Lao"},
["Latf"] = {"Latin (Fraktur variant)"},
["Latg"] = {"Latin (Gaelic variant)"},
["Latn"] = {"Latin"},
["Leke"] = {"Leke"},
["Lepc"] = {"Lepcha", "Róng"},
["Limb"] = {"Limbu"},
["Lina"] = {"Linear A"},
["Linb"] = {"Linear B"},
["Lisu"] = {"Lisu", "Fraser"},
["Loma"] = {"Loma"},
["Lyci"] = {"Lycian"},
["Lydi"] = {"Lydian"},
["Mahj"] = {"Mahajani"},
["Maka"] = {"Makasar"},
["Mand"] = {"Mandaic", "Mandaean"},
["Mani"] = {"Manichaean"},
["Marc"] = {"Marchen"},
["Maya"] = {"Mayan hieroglyphs"},
["Medf"] = {"Medefaidrin", "Oberi Okaime", "Oberi Ɔkaimɛ"},
["Mend"] = {"Mende Kikakui"},
["Merc"] = {"Meroitic Cursive"},
["Mero"] = {"Meroitic Hieroglyphs"},
["Mlym"] = {"Malayalam"},
["Modi"] = {"Modi", "Moḍī"},
["Mong"] = {"Mongolian"},
["Moon"] = {"Moon", "Moon code", "Moon script", "Moon type"},
["Mroo"] = {"Mro", "Mru"},
["Mtei"] = {"Meitei Mayek", "Meithei", "Meetei"},
["Mult"] = {"Multani"},
["Mymr"] = {"Myanmar", "Burmese"},
["Nagm"] = {"Nag Mundari"},
["Nand"] = {"Nandinagari"},
["Narb"] = {"Old North Arabian", "Ancient North Arabian"},
["Nbat"] = {"Nabataean"},
["Newa"] = {"Newa", "Newar", "Newari", "Nepāla lipi"},
["Nkdb"] = {"Naxi Dongba", "na²¹ɕi³³ to³³ba²¹", "Nakhi Tomba"},
["Nkgb"] = {"Naxi Geba", "na²¹ɕi³³ gʌ²¹ba²¹", "'Na-'Khi ²Ggŏ-¹baw", "Nakhi Geba"},
["Nkoo"] = {"N’Ko", "N'Ko"},
["Nshu"] = {"Nüshu"},
["Ogam"] = {"Ogham"},
["Olck"] = {"Ol Chiki", "Ol Cemet'", "Ol", "Santali"},
["Orkh"] = {"Old Turkic", "Orkhon Runic"},
["Orya"] = {"Oriya", "Odia"},
["Osge"] = {"Osage"},
["Osma"] = {"Osmanya"},
["Ougr"] = {"Old Uyghur"},
["Palm"] = {"Palmyrene"},
["Pauc"] = {"Pau Cin Hau"},
["Pcun"] = {"Proto-Cuneiform"},
["Pelm"] = {"Proto-Elamite"},
["Perm"] = {"Old Permic"},
["Phag"] = {"Phags-pa"},
["Phli"] = {"Inscriptional Pahlavi"},
["Phlp"] = {"Psalter Pahlavi"},
["Phlv"] = {"Book Pahlavi"},
["Phnx"] = {"Phoenician"},
["Piqd"] = {"Klingon (KLI pIqaD)"},
["Plrd"] = {"Miao", "Pollard"},
["Prti"] = {"Inscriptional Parthian"},
["Psin"] = {"Proto-Sinaitic"},
["Ranj"] = {"Ranjana"},
["Rjng"] = {"Rejang", "Redjang", "Kaganga"},
["Rohg"] = {"Hanifi Rohingya"},
["Roro"] = {"Rongorongo"},
["Runr"] = {"Runic"},
["Samr"] = {"Samaritan"},
["Sara"] = {"Sarati"},
["Sarb"] = {"Old South Arabian"},
["Saur"] = {"Saurashtra"},
["Sgnw"] = {"SignWriting"},
["Shaw"] = {"Shavian", "Shaw"},
["Shrd"] = {"Sharada", "Śāradā"},
["Shui"] = {"Shuishu"},
["Sidd"] = {"Siddham", "Siddhaṃ", "Siddhamātṛkā"},
["Sind"] = {"Khudawadi", "Sindhi"},
["Sinh"] = {"Sinhala"},
["Sogd"] = {"Sogdian"},
["Sogo"] = {"Old Sogdian"},
["Sora"] = {"Sora Sompeng"},
["Soyo"] = {"Soyombo"},
["Sund"] = {"Sundanese"},
["Sunu"] = {"Sunuwar"},
["Sylo"] = {"Syloti Nagri"},
["Syrc"] = {"Syriac"},
["Syre"] = {"Syriac (Estrangelo variant)"},
["Syrj"] = {"Syriac (Western variant)"},
["Syrn"] = {"Syriac (Eastern variant)"},
["Tagb"] = {"Tagbanwa"},
["Takr"] = {"Takri", "Ṭākrī", "Ṭāṅkrī"},
["Tale"] = {"Tai Le"},
["Talu"] = {"New Tai Lue"},
["Taml"] = {"Tamil"},
["Tang"] = {"Tangut"},
["Tavt"] = {"Tai Viet"},
["Telu"] = {"Telugu"},
["Teng"] = {"Tengwar"},
["Tfng"] = {"Tifinagh", "Berber"},
["Tglg"] = {"Tagalog", "Baybayin", "Alibata"},
["Thaa"] = {"Thaana"},
["Thai"] = {"Thai"},
["Tibt"] = {"Tibetan"},
["Tirh"] = {"Tirhuta"},
["Tnsa"] = {"Tangsa"},
["Toto"] = {"Toto"},
["Ugar"] = {"Ugaritic"},
["Vaii"] = {"Vai"},
["Visp"] = {"Visible Speech"},
["Vith"] = {"Vithkuqi"},
["Wara"] = {"Warang Citi", "Varang Kshiti"},
["Wcho"] = {"Wancho"},
["Wole"] = {"Woleai"},
["Xpeo"] = {"Old Persian"},
["Xsux"] = {"Sumero-Akkadian cuneiform"},
["Yezi"] = {"Yezidi"},
["Yiii"] = {"Yi"},
["Zanb"] = {"Zanabazar Square", "Zanabazarin Dörböljin Useg", "Xewtee Dörböljin Bicig", "Horizontal Square Script"},
["Zinh"] = {"Code for inherited script"},
["Zmth"] = {"Mathematical notation"},
["Zsye"] = {"Symbols (Emoji variant)"},
["Zsym"] = {"Symbols"},
["Zxxx"] = {"Code for unwritten documents"},
["Zyyy"] = {"Code for undetermined script"},
["Zzzz"] = {"Code for uncoded script"}
}
441e9d6e54b88bea137b8945819732a90106bd4d
Module:Language/data/iana regions
828
186
377
2023-08-21T15:41:26Z
[[w>Trappist the monk
0
update to 2023-08-02 data;
Scribunto
text/plain
-- File-Date: 2023-08-02
return {
["AC"] = {"Ascension Island"},
["AD"] = {"Andorra"},
["AE"] = {"United Arab Emirates"},
["AF"] = {"Afghanistan"},
["AG"] = {"Antigua and Barbuda"},
["AI"] = {"Anguilla"},
["AL"] = {"Albania"},
["AM"] = {"Armenia"},
["AO"] = {"Angola"},
["AQ"] = {"Antarctica"},
["AR"] = {"Argentina"},
["AS"] = {"American Samoa"},
["AT"] = {"Austria"},
["AU"] = {"Australia"},
["AW"] = {"Aruba"},
["AX"] = {"Åland Islands"},
["AZ"] = {"Azerbaijan"},
["BA"] = {"Bosnia and Herzegovina"},
["BB"] = {"Barbados"},
["BD"] = {"Bangladesh"},
["BE"] = {"Belgium"},
["BF"] = {"Burkina Faso"},
["BG"] = {"Bulgaria"},
["BH"] = {"Bahrain"},
["BI"] = {"Burundi"},
["BJ"] = {"Benin"},
["BL"] = {"Saint Barthélemy"},
["BM"] = {"Bermuda"},
["BN"] = {"Brunei Darussalam"},
["BO"] = {"Bolivia"},
["BQ"] = {"Bonaire, Sint Eustatius and Saba"},
["BR"] = {"Brazil"},
["BS"] = {"Bahamas"},
["BT"] = {"Bhutan"},
["BV"] = {"Bouvet Island"},
["BW"] = {"Botswana"},
["BY"] = {"Belarus"},
["BZ"] = {"Belize"},
["CA"] = {"Canada"},
["CC"] = {"Cocos (Keeling) Islands"},
["CD"] = {"The Democratic Republic of the Congo"},
["CF"] = {"Central African Republic"},
["CG"] = {"Congo"},
["CH"] = {"Switzerland"},
["CI"] = {"Côte d'Ivoire"},
["CK"] = {"Cook Islands"},
["CL"] = {"Chile"},
["CM"] = {"Cameroon"},
["CN"] = {"China"},
["CO"] = {"Colombia"},
["CP"] = {"Clipperton Island"},
["CQ"] = {"Sark"},
["CR"] = {"Costa Rica"},
["CU"] = {"Cuba"},
["CV"] = {"Cabo Verde", "Cape Verde"},
["CW"] = {"Curaçao"},
["CX"] = {"Christmas Island"},
["CY"] = {"Cyprus"},
["CZ"] = {"Czechia", "Czech Republic"},
["DE"] = {"Germany"},
["DG"] = {"Diego Garcia"},
["DJ"] = {"Djibouti"},
["DK"] = {"Denmark"},
["DM"] = {"Dominica"},
["DO"] = {"Dominican Republic"},
["DZ"] = {"Algeria"},
["EA"] = {"Ceuta, Melilla"},
["EC"] = {"Ecuador"},
["EE"] = {"Estonia"},
["EG"] = {"Egypt"},
["EH"] = {"Western Sahara"},
["ER"] = {"Eritrea"},
["ES"] = {"Spain"},
["ET"] = {"Ethiopia"},
["EU"] = {"European Union"},
["EZ"] = {"Eurozone"},
["FI"] = {"Finland"},
["FJ"] = {"Fiji"},
["FK"] = {"Falkland Islands (Malvinas)"},
["FM"] = {"Federated States of Micronesia"},
["FO"] = {"Faroe Islands"},
["FR"] = {"France"},
["GA"] = {"Gabon"},
["GB"] = {"United Kingdom"},
["GD"] = {"Grenada"},
["GE"] = {"Georgia"},
["GF"] = {"French Guiana"},
["GG"] = {"Guernsey"},
["GH"] = {"Ghana"},
["GI"] = {"Gibraltar"},
["GL"] = {"Greenland"},
["GM"] = {"Gambia"},
["GN"] = {"Guinea"},
["GP"] = {"Guadeloupe"},
["GQ"] = {"Equatorial Guinea"},
["GR"] = {"Greece"},
["GS"] = {"South Georgia and the South Sandwich Islands"},
["GT"] = {"Guatemala"},
["GU"] = {"Guam"},
["GW"] = {"Guinea-Bissau"},
["GY"] = {"Guyana"},
["HK"] = {"Hong Kong"},
["HM"] = {"Heard Island and McDonald Islands"},
["HN"] = {"Honduras"},
["HR"] = {"Croatia"},
["HT"] = {"Haiti"},
["HU"] = {"Hungary"},
["IC"] = {"Canary Islands"},
["ID"] = {"Indonesia"},
["IE"] = {"Ireland"},
["IL"] = {"Israel"},
["IM"] = {"Isle of Man"},
["IN"] = {"India"},
["IO"] = {"British Indian Ocean Territory"},
["IQ"] = {"Iraq"},
["IR"] = {"Islamic Republic of Iran"},
["IS"] = {"Iceland"},
["IT"] = {"Italy"},
["JE"] = {"Jersey"},
["JM"] = {"Jamaica"},
["JO"] = {"Jordan"},
["JP"] = {"Japan"},
["KE"] = {"Kenya"},
["KG"] = {"Kyrgyzstan"},
["KH"] = {"Cambodia"},
["KI"] = {"Kiribati"},
["KM"] = {"Comoros"},
["KN"] = {"Saint Kitts and Nevis"},
["KP"] = {"Democratic People's Republic of Korea"},
["KR"] = {"Republic of Korea"},
["KW"] = {"Kuwait"},
["KY"] = {"Cayman Islands"},
["KZ"] = {"Kazakhstan"},
["LA"] = {"Lao People's Democratic Republic"},
["LB"] = {"Lebanon"},
["LC"] = {"Saint Lucia"},
["LI"] = {"Liechtenstein"},
["LK"] = {"Sri Lanka"},
["LR"] = {"Liberia"},
["LS"] = {"Lesotho"},
["LT"] = {"Lithuania"},
["LU"] = {"Luxembourg"},
["LV"] = {"Latvia"},
["LY"] = {"Libya"},
["MA"] = {"Morocco"},
["MC"] = {"Monaco"},
["MD"] = {"Moldova"},
["ME"] = {"Montenegro"},
["MF"] = {"Saint Martin (French part)"},
["MG"] = {"Madagascar"},
["MH"] = {"Marshall Islands"},
["MK"] = {"North Macedonia"},
["ML"] = {"Mali"},
["MM"] = {"Myanmar"},
["MN"] = {"Mongolia"},
["MO"] = {"Macao"},
["MP"] = {"Northern Mariana Islands"},
["MQ"] = {"Martinique"},
["MR"] = {"Mauritania"},
["MS"] = {"Montserrat"},
["MT"] = {"Malta"},
["MU"] = {"Mauritius"},
["MV"] = {"Maldives"},
["MW"] = {"Malawi"},
["MX"] = {"Mexico"},
["MY"] = {"Malaysia"},
["MZ"] = {"Mozambique"},
["NA"] = {"Namibia"},
["NC"] = {"New Caledonia"},
["NE"] = {"Niger"},
["NF"] = {"Norfolk Island"},
["NG"] = {"Nigeria"},
["NI"] = {"Nicaragua"},
["NL"] = {"Netherlands"},
["NO"] = {"Norway"},
["NP"] = {"Nepal"},
["NR"] = {"Nauru"},
["NU"] = {"Niue"},
["NZ"] = {"New Zealand"},
["OM"] = {"Oman"},
["PA"] = {"Panama"},
["PE"] = {"Peru"},
["PF"] = {"French Polynesia"},
["PG"] = {"Papua New Guinea"},
["PH"] = {"Philippines"},
["PK"] = {"Pakistan"},
["PL"] = {"Poland"},
["PM"] = {"Saint Pierre and Miquelon"},
["PN"] = {"Pitcairn"},
["PR"] = {"Puerto Rico"},
["PS"] = {"State of Palestine"},
["PT"] = {"Portugal"},
["PW"] = {"Palau"},
["PY"] = {"Paraguay"},
["QA"] = {"Qatar"},
["RE"] = {"Réunion"},
["RO"] = {"Romania"},
["RS"] = {"Serbia"},
["RU"] = {"Russian Federation"},
["RW"] = {"Rwanda"},
["SA"] = {"Saudi Arabia"},
["SB"] = {"Solomon Islands"},
["SC"] = {"Seychelles"},
["SD"] = {"Sudan"},
["SE"] = {"Sweden"},
["SG"] = {"Singapore"},
["SH"] = {"Saint Helena, Ascension and Tristan da Cunha"},
["SI"] = {"Slovenia"},
["SJ"] = {"Svalbard and Jan Mayen"},
["SK"] = {"Slovakia"},
["SL"] = {"Sierra Leone"},
["SM"] = {"San Marino"},
["SN"] = {"Senegal"},
["SO"] = {"Somalia"},
["SR"] = {"Suriname"},
["SS"] = {"South Sudan"},
["ST"] = {"Sao Tome and Principe"},
["SV"] = {"El Salvador"},
["SX"] = {"Sint Maarten (Dutch part)"},
["SY"] = {"Syrian Arab Republic"},
["SZ"] = {"Eswatini", "eSwatini", "Swaziland"},
["TA"] = {"Tristan da Cunha"},
["TC"] = {"Turks and Caicos Islands"},
["TD"] = {"Chad"},
["TF"] = {"French Southern Territories"},
["TG"] = {"Togo"},
["TH"] = {"Thailand"},
["TJ"] = {"Tajikistan"},
["TK"] = {"Tokelau"},
["TL"] = {"Timor-Leste"},
["TM"] = {"Turkmenistan"},
["TN"] = {"Tunisia"},
["TO"] = {"Tonga"},
["TR"] = {"Türkiye", "Turkey"},
["TT"] = {"Trinidad and Tobago"},
["TV"] = {"Tuvalu"},
["TW"] = {"Taiwan, Province of China"},
["TZ"] = {"United Republic of Tanzania"},
["UA"] = {"Ukraine"},
["UG"] = {"Uganda"},
["UM"] = {"United States Minor Outlying Islands"},
["UN"] = {"United Nations"},
["US"] = {"United States"},
["UY"] = {"Uruguay"},
["UZ"] = {"Uzbekistan"},
["VA"] = {"Holy See (Vatican City State)"},
["VC"] = {"Saint Vincent and the Grenadines"},
["VE"] = {"Venezuela"},
["VG"] = {"British Virgin Islands"},
["VI"] = {"U.S. Virgin Islands"},
["VN"] = {"Viet Nam"},
["VU"] = {"Vanuatu"},
["WF"] = {"Wallis and Futuna"},
["WS"] = {"Samoa"},
["YE"] = {"Yemen"},
["YT"] = {"Mayotte"},
["ZA"] = {"South Africa"},
["ZM"] = {"Zambia"},
["ZW"] = {"Zimbabwe"},
["001"] = {"World"},
["002"] = {"Africa"},
["003"] = {"North America"},
["005"] = {"South America"},
["009"] = {"Oceania"},
["011"] = {"Western Africa"},
["013"] = {"Central America"},
["014"] = {"Eastern Africa"},
["015"] = {"Northern Africa"},
["017"] = {"Middle Africa"},
["018"] = {"Southern Africa"},
["019"] = {"Americas"},
["021"] = {"Northern America"},
["029"] = {"Caribbean"},
["030"] = {"Eastern Asia"},
["034"] = {"Southern Asia"},
["035"] = {"South-Eastern Asia"},
["039"] = {"Southern Europe"},
["053"] = {"Australia and New Zealand"},
["054"] = {"Melanesia"},
["057"] = {"Micronesia"},
["061"] = {"Polynesia"},
["142"] = {"Asia"},
["143"] = {"Central Asia"},
["145"] = {"Western Asia"},
["150"] = {"Europe"},
["151"] = {"Eastern Europe"},
["154"] = {"Northern Europe"},
["155"] = {"Western Europe"},
["202"] = {"Sub-Saharan Africa"},
["419"] = {"Latin America and the Caribbean"}
}
08de6963e81994fd00a9f7b5a76b5ed63c543989
Module:Language/data/iana variants
828
187
379
2023-08-21T15:41:29Z
[[w>Trappist the monk
0
update to 2023-08-02 data;
Scribunto
text/plain
-- File-Date: 2023-08-02
return {
["1606nict"] = {
["descriptions"] = {"Late Middle French (to 1606)"},
["prefixes"] = {"frm"},
},
["1694acad"] = {
["descriptions"] = {"Early Modern French"},
["prefixes"] = {"fr"},
},
["1901"] = {
["descriptions"] = {"Traditional German orthography"},
["prefixes"] = {"de"},
},
["1959acad"] = {
["descriptions"] = {"\"Academic\" (\"governmental\") variant of Belarusian as codified in 1959"},
["prefixes"] = {"be"},
},
["1994"] = {
["descriptions"] = {"Standardized Resian orthography"},
["prefixes"] = {"sl-rozaj", "sl-rozaj-biske", "sl-rozaj-njiva", "sl-rozaj-osojs", "sl-rozaj-solba"},
},
["1996"] = {
["descriptions"] = {"German orthography of 1996"},
["prefixes"] = {"de"},
},
["abl1943"] = {
["descriptions"] = {"Orthographic formulation of 1943 - Official in Brazil (Formulário Ortográfico de 1943 - Oficial no Brasil)"},
["prefixes"] = {"pt-br"},
},
["akuapem"] = {
["descriptions"] = {"Akuapem Twi"},
["prefixes"] = {"tw"},
},
["alalc97"] = {
["descriptions"] = {"ALA-LC Romanization, 1997 edition"},
["prefixes"] = {},
},
["aluku"] = {
["descriptions"] = {"Aluku dialect", "Boni dialect"},
["prefixes"] = {"djk"},
},
["ao1990"] = {
["descriptions"] = {"Portuguese Language Orthographic Agreement of 1990 (Acordo Ortográfico da Língua Portuguesa de 1990)"},
["prefixes"] = {"pt", "gl"},
},
["aranes"] = {
["descriptions"] = {"Aranese"},
["prefixes"] = {"oc"},
},
["arkaika"] = {
["descriptions"] = {"Arcaicam Esperantom", "Arkaika Esperanto"},
["prefixes"] = {"eo"},
},
["asante"] = {
["descriptions"] = {"Asante Twi", "Ashanti Twi"},
["prefixes"] = {"tw"},
},
["auvern"] = {
["descriptions"] = {"Auvergnat"},
["prefixes"] = {"oc"},
},
["baku1926"] = {
["descriptions"] = {"Unified Turkic Latin Alphabet (Historical)"},
["prefixes"] = {"az", "ba", "crh", "kk", "krc", "ky", "sah", "tk", "tt", "uz"},
},
["balanka"] = {
["descriptions"] = {"The Balanka dialect of Anii"},
["prefixes"] = {"blo"},
},
["barla"] = {
["descriptions"] = {"The Barlavento dialect group of Kabuverdianu"},
["prefixes"] = {"kea"},
},
["basiceng"] = {
["descriptions"] = {"Basic English"},
["prefixes"] = {"en"},
},
["bauddha"] = {
["descriptions"] = {"Buddhist Hybrid Sanskrit"},
["prefixes"] = {"sa"},
},
["bciav"] = {
["descriptions"] = {"BCI Blissymbolics AV"},
["prefixes"] = {"zbl"},
},
["bcizbl"] = {
["descriptions"] = {"BCI Blissymbolics"},
["prefixes"] = {"zbl"},
},
["biscayan"] = {
["descriptions"] = {"Biscayan dialect of Basque"},
["prefixes"] = {"eu"},
},
["biske"] = {
["descriptions"] = {"The San Giorgio dialect of Resian", "The Bila dialect of Resian"},
["prefixes"] = {"sl-rozaj"},
},
["blasl"] = {
["descriptions"] = {"Black American Sign Language dialect"},
["prefixes"] = {"ase", "sgn-ase"},
},
["bohoric"] = {
["descriptions"] = {"Slovene in Bohorič alphabet"},
["prefixes"] = {"sl"},
},
["boont"] = {
["descriptions"] = {"Boontling"},
["prefixes"] = {"en"},
},
["bornholm"] = {
["descriptions"] = {"Bornholmsk"},
["prefixes"] = {"da"},
},
["cisaup"] = {
["descriptions"] = {"Cisalpine"},
["prefixes"] = {"oc"},
},
["colb1945"] = {
["descriptions"] = {"Portuguese-Brazilian Orthographic Convention of 1945 (Convenção Ortográfica Luso-Brasileira de 1945)"},
["prefixes"] = {"pt"},
},
["cornu"] = {
["descriptions"] = {"Cornu-English", "Cornish English", "Anglo-Cornish"},
["prefixes"] = {"en"},
},
["creiss"] = {
["descriptions"] = {"Occitan variants of the Croissant area"},
["prefixes"] = {"oc"},
},
["dajnko"] = {
["descriptions"] = {"Slovene in Dajnko alphabet"},
["prefixes"] = {"sl"},
},
["ekavsk"] = {
["descriptions"] = {"Serbian with Ekavian pronunciation"},
["prefixes"] = {"sr", "sr-latn", "sr-cyrl"},
},
["emodeng"] = {
["descriptions"] = {"Early Modern English (1500-1700)"},
["prefixes"] = {"en"},
},
["fonipa"] = {
["descriptions"] = {"International Phonetic Alphabet"},
["prefixes"] = {},
},
["fonkirsh"] = {
["descriptions"] = {"Kirshenbaum Phonetic Alphabet"},
["prefixes"] = {},
},
["fonnapa"] = {
["descriptions"] = {"North American Phonetic Alphabet", "Americanist Phonetic Notation"},
["prefixes"] = {},
},
["fonupa"] = {
["descriptions"] = {"Uralic Phonetic Alphabet"},
["prefixes"] = {},
},
["fonxsamp"] = {
["descriptions"] = {"X-SAMPA transcription"},
["prefixes"] = {},
},
["gallo"] = {
["descriptions"] = {"Gallo"},
["prefixes"] = {"fr"},
},
["gascon"] = {
["descriptions"] = {"Gascon"},
["prefixes"] = {"oc"},
},
["grclass"] = {
["descriptions"] = {"Classical Occitan orthography"},
["prefixes"] = {"oc", "oc-aranes", "oc-auvern", "oc-cisaup", "oc-creiss", "oc-gascon", "oc-lemosin", "oc-lengadoc", "oc-nicard", "oc-provenc", "oc-vivaraup"},
},
["grital"] = {
["descriptions"] = {"Italian-inspired Occitan orthography"},
["prefixes"] = {"oc", "oc-cisaup", "oc-nicard", "oc-provenc"},
},
["grmistr"] = {
["descriptions"] = {"Mistralian or Mistralian-inspired Occitan orthography"},
["prefixes"] = {"oc", "oc-aranes", "oc-auvern", "oc-cisaup", "oc-creiss", "oc-gascon", "oc-lemosin", "oc-lengadoc", "oc-nicard", "oc-provenc", "oc-vivaraup"},
},
["hepburn"] = {
["descriptions"] = {"Hepburn romanization"},
["prefixes"] = {"ja-latn"},
},
["hognorsk"] = {
["descriptions"] = {"Norwegian in Høgnorsk (High Norwegian) orthography"},
["prefixes"] = {"nn"},
},
["hsistemo"] = {
["descriptions"] = {"Standard H-system orthographic fallback for spelling Esperanto"},
["prefixes"] = {"eo"},
},
["ijekavsk"] = {
["descriptions"] = {"Serbian with Ijekavian pronunciation"},
["prefixes"] = {"sr", "sr-latn", "sr-cyrl"},
},
["itihasa"] = {
["descriptions"] = {"Epic Sanskrit"},
["prefixes"] = {"sa"},
},
["ivanchov"] = {
["descriptions"] = {"Bulgarian in 1899 orthography"},
["prefixes"] = {"bg"},
},
["jauer"] = {
["descriptions"] = {"Jauer dialect of Romansh"},
["prefixes"] = {"rm"},
},
["jyutping"] = {
["descriptions"] = {"Jyutping Cantonese Romanization"},
["prefixes"] = {"yue"},
},
["kkcor"] = {
["descriptions"] = {"Common Cornish orthography of Revived Cornish"},
["prefixes"] = {"kw"},
},
["kociewie"] = {
["descriptions"] = {"The Kociewie dialect of Polish"},
["prefixes"] = {"pl"},
},
["kscor"] = {
["descriptions"] = {"Standard Cornish orthography of Revived Cornish", "Kernowek Standard"},
["prefixes"] = {"kw"},
},
["laukika"] = {
["descriptions"] = {"Classical Sanskrit"},
["prefixes"] = {"sa"},
},
["lemosin"] = {
["descriptions"] = {"Limousin"},
["prefixes"] = {"oc"},
},
["lengadoc"] = {
["descriptions"] = {"Languedocien"},
["prefixes"] = {"oc"},
},
["lipaw"] = {
["descriptions"] = {"The Lipovaz dialect of Resian", "The Lipovec dialect of Resian"},
["prefixes"] = {"sl-rozaj"},
},
["ltg1929"] = {
["descriptions"] = {"The Latgalian language orthography codified in 1929"},
["prefixes"] = {"ltg"},
},
["ltg2007"] = {
["descriptions"] = {"The Latgalian language orthography codified in the language law in 2007"},
["prefixes"] = {"ltg"},
},
["luna1918"] = {
["descriptions"] = {"Post-1917 Russian orthography"},
["prefixes"] = {"ru"},
},
["metelko"] = {
["descriptions"] = {"Slovene in Metelko alphabet"},
["prefixes"] = {"sl"},
},
["monoton"] = {
["descriptions"] = {"Monotonic Greek"},
["prefixes"] = {"el"},
},
["ndyuka"] = {
["descriptions"] = {"Ndyuka dialect", "Aukan dialect"},
["prefixes"] = {"djk"},
},
["nedis"] = {
["descriptions"] = {"Natisone dialect", "Nadiza dialect"},
["prefixes"] = {"sl"},
},
["newfound"] = {
["descriptions"] = {"Newfoundland English"},
["prefixes"] = {"en-ca"},
},
["nicard"] = {
["descriptions"] = {"Niçard"},
["prefixes"] = {"oc"},
},
["njiva"] = {
["descriptions"] = {"The Gniva dialect of Resian", "The Njiva dialect of Resian"},
["prefixes"] = {"sl-rozaj"},
},
["nulik"] = {
["descriptions"] = {"Volapük nulik", "Volapük perevidöl", "Volapük nulädik", "de Jong's Volapük", "New Volapük", "Revised Volapük", "Modern Volapük"},
["prefixes"] = {"vo"},
},
["osojs"] = {
["descriptions"] = {"The Oseacco dialect of Resian", "The Osojane dialect of Resian"},
["prefixes"] = {"sl-rozaj"},
},
["oxendict"] = {
["descriptions"] = {"Oxford English Dictionary spelling"},
["prefixes"] = {"en"},
},
["pahawh2"] = {
["descriptions"] = {"Pahawh Hmong Second Stage Reduced orthography"},
["prefixes"] = {"mww", "hnj"},
},
["pahawh3"] = {
["descriptions"] = {"Pahawh Hmong Third Stage Reduced orthography"},
["prefixes"] = {"mww", "hnj"},
},
["pahawh4"] = {
["descriptions"] = {"Pahawh Hmong Final Version orthography"},
["prefixes"] = {"mww", "hnj"},
},
["pamaka"] = {
["descriptions"] = {"Pamaka dialect"},
["prefixes"] = {"djk"},
},
["peano"] = {
["descriptions"] = {"Latino Sine Flexione", "Interlingua de API", "Interlingua de Peano"},
["prefixes"] = {"la"},
},
["petr1708"] = {
["descriptions"] = {"Petrine orthography"},
["prefixes"] = {"ru"},
},
["pinyin"] = {
["descriptions"] = {"Pinyin romanization"},
["prefixes"] = {"zh-latn", "bo-latn"},
},
["polyton"] = {
["descriptions"] = {"Polytonic Greek"},
["prefixes"] = {"el"},
},
["provenc"] = {
["descriptions"] = {"Provençal"},
["prefixes"] = {"oc"},
},
["puter"] = {
["descriptions"] = {"Puter idiom of Romansh"},
["prefixes"] = {"rm"},
},
["rigik"] = {
["descriptions"] = {"Volapük rigik", "Schleyer's Volapük", "Original Volapük", "Classic Volapük"},
["prefixes"] = {"vo"},
},
["rozaj"] = {
["descriptions"] = {"Resian", "Resianic", "Rezijan"},
["prefixes"] = {"sl"},
},
["rumgr"] = {
["descriptions"] = {"Rumantsch Grischun"},
["prefixes"] = {"rm"},
},
["scotland"] = {
["descriptions"] = {"Scottish Standard English"},
["prefixes"] = {"en"},
},
["scouse"] = {
["descriptions"] = {"Scouse"},
["prefixes"] = {"en"},
},
["simple"] = {
["descriptions"] = {"Simplified form"},
["prefixes"] = {},
},
["solba"] = {
["descriptions"] = {"The Stolvizza dialect of Resian", "The Solbica dialect of Resian"},
["prefixes"] = {"sl-rozaj"},
},
["sotav"] = {
["descriptions"] = {"The Sotavento dialect group of Kabuverdianu"},
["prefixes"] = {"kea"},
},
["spanglis"] = {
["descriptions"] = {"Spanglish"},
["prefixes"] = {"en", "es"},
},
["surmiran"] = {
["descriptions"] = {"Surmiran idiom of Romansh"},
["prefixes"] = {"rm"},
},
["sursilv"] = {
["descriptions"] = {"Sursilvan idiom of Romansh"},
["prefixes"] = {"rm"},
},
["sutsilv"] = {
["descriptions"] = {"Sutsilvan idiom of Romansh"},
["prefixes"] = {"rm"},
},
["synnejyl"] = {
["descriptions"] = {"Synnejysk", "South Jutish"},
["prefixes"] = {"da"},
},
["tarask"] = {
["descriptions"] = {"Belarusian in Taraskievica orthography"},
["prefixes"] = {"be"},
},
["tongyong"] = {
["descriptions"] = {"Tongyong Pinyin romanization"},
["prefixes"] = {"zh-latn"},
},
["tunumiit"] = {
["descriptions"] = {"Tunumiisiut", "East Greenlandic", "Østgrønlandsk"},
["prefixes"] = {"kl"},
},
["uccor"] = {
["descriptions"] = {"Unified Cornish orthography of Revived Cornish"},
["prefixes"] = {"kw"},
},
["ucrcor"] = {
["descriptions"] = {"Unified Cornish Revised orthography of Revived Cornish"},
["prefixes"] = {"kw"},
},
["ulster"] = {
["descriptions"] = {"Ulster dialect of Scots"},
["prefixes"] = {"sco"},
},
["unifon"] = {
["descriptions"] = {"Unifon phonetic alphabet"},
["prefixes"] = {"en", "hup", "kyh", "tol", "yur"},
},
["vaidika"] = {
["descriptions"] = {"Vedic Sanskrit"},
["prefixes"] = {"sa"},
},
["valencia"] = {
["descriptions"] = {"Valencian"},
["prefixes"] = {"ca"},
},
["vallader"] = {
["descriptions"] = {"Vallader idiom of Romansh"},
["prefixes"] = {"rm"},
},
["vecdruka"] = {
["descriptions"] = {"Latvian orthography used before 1920s (\"vecā druka\")"},
["prefixes"] = {"lv"},
},
["vivaraup"] = {
["descriptions"] = {"Vivaro-Alpine"},
["prefixes"] = {"oc"},
},
["wadegile"] = {
["descriptions"] = {"Wade-Giles romanization"},
["prefixes"] = {"zh-latn"},
},
["xsistemo"] = {
["descriptions"] = {"Standard X-system orthographic fallback for spelling Esperanto"},
["prefixes"] = {"eo"},
}
}
36f89cd82969f3b0f948034eba0fa2c149ee65c2
Module:Language/data/iana suppressed scripts
828
188
381
2023-08-21T15:41:32Z
[[w>Trappist the monk
0
update to 2023-08-02 data;
Scribunto
text/plain
-- File-Date: 2023-08-02
return {
["Arab"] = {"ar", "fa", "ps", "ur"},
["Armn"] = {"hy"},
["Beng"] = {"as", "bn"},
["Blis"] = {"zbl"},
["Cyrl"] = {"ab", "be", "bg", "kk", "mk", "ru", "uk"},
["Deva"] = {"hi", "mr", "ne", "kok", "mai"},
["Ethi"] = {"am", "ti"},
["Geor"] = {"ka"},
["Grek"] = {"el"},
["Gujr"] = {"gu"},
["Guru"] = {"pa"},
["Hebr"] = {"he", "iw", "yi"},
["Jpan"] = {"ja"},
["Khmr"] = {"km"},
["Knda"] = {"kn"},
["Kore"] = {"ko"},
["Laoo"] = {"lo"},
["Latn"] = {"af", "ay", "bs", "ca", "ch", "cs", "cy", "da", "de", "en", "eo",
"es", "et", "eu", "fi", "fj", "fo", "fr", "fy", "ga", "gl", "gn",
"gv", "hr", "ht", "hu", "id", "in", "is", "it", "kl", "la", "lb",
"ln", "lt", "lv", "mg", "mh", "mo", "ms", "mt", "na", "nb", "nd",
"nl", "nn", "no", "nr", "ny", "om", "pl", "pt", "qu", "rm", "rn",
"ro", "rw", "sg", "sk", "sl", "sm", "so", "sq", "ss", "st", "sv",
"sw", "tl", "tn", "to", "tr", "ts", "ve", "vi", "xh", "zu", "dsb",
"frr", "frs", "gsw", "hsb", "men", "nds", "niu", "nso", "tem", "tkl", "tmh",
"tpi", "tvl"},
["Mlym"] = {"ml"},
["Mymr"] = {"my"},
["Nkoo"] = {"nqo"},
["Orya"] = {"or"},
["Sinh"] = {"si"},
["Taml"] = {"ta"},
["Telu"] = {"te"},
["Thaa"] = {"dv"},
["Thai"] = {"th"},
["Tibt"] = {"dz"}
}
e2c364560ccc050dacdd276ebab1758584b937ad
Template:UF-hcard-place
10
285
576
2023-08-22T10:47:27Z
[[w>PK2
0
bypass redirect to [[Template:Flatlist]]
wikitext
text/x-wiki
The HTML mark up produced by this template includes an [[HCard|hCard microformat]], which makes the place-name and location [[Parsing|parsable]] by computers, either acting automatically to catalogue article across Wikipedia, or via a browser tool operated by a person, to (for example) add the subject to an address book. For more information about the use of [[microformat]]s on Wikipedia, please see [[WP:UF|the microformat project]].
If the place or venue has an "established", "founded", "opened" or similar date that is specific to the day, use {{tl|start date}} [[Wikipedia:WikiProject Microformats/dates|unless the date is before 1583 CE]]. If it has a URL, use {{tl|URL}}.
hCard uses HTML classes including:
{{flatlist |
* adr
* category
* country-name
* extended-address
* fn
* label
* locality
* nickname
* note
* org
* street-address
* url
* vcard
}}
'''Please do not rename or remove these classes nor collapse nested elements which use them.'''<includeonly>{{sandbox other||[[Category:Templates generating hCards]]}}</includeonly><noinclude>
[[Category:Templates generating hCards]]
[[Category:Microformat (uF) message templates]]
</noinclude>
4dd5b2fed1d81094b0e7b4f51a6009b556b539b3
Template:UF-hcal-geo
10
1071
2203
2023-08-22T10:50:57Z
[[]]>PK2
0
bypass redirect to [[Template:Flatlist]]
wikitext
text/x-wiki
The HTML markup produced by this template includes an [[hCalendar|hCalendar microformat]], which makes the event details [[parsing|parsable]] by computers, either acting automatically to catalogue article across Wikipedia, or via a browser tool operated by a person, to (for example) add the subject to a calendar or diary application. Within the hCalendar is a [[Geo (microformat)|Geo microformat]], which additionally makes the [[geographic coordinate system|coordinates]] (latitude & longitude) parsable, so that they can be, say, looked up on a map, or downloaded to a [[Global Positioning System|GPS]] unit. For more information about the use of [[microformat]]s on Wikipedia, please see [[Wikipedia:WikiProject Microformats|the microformat project]].
Dates will only be included if you use {{tl|Start date}} or {{tl|End date}} (use the former for single dates, [[Wikipedia:WikiProject Microformats/dates|but do not use any of these if the date is before 1583 CE]]). {{tl|End date}} requires that a time be specified, but display of this time may be suppressed by adding {{para|nodate|yes}} to the end.
To include a URL, use {{tl|URL}}.
hCalendar uses HTML classes including:
{{Flatlist|indent=1|
*attendee
*dtend
*dtstart
*location
*summary
*url
*vevent
}}
Geo is produced by calling {{tl|coord}}, and uses HTML classes:
{{Flatlist|indent=1|
*geo
*latitude
*longitude
}}
'''Please do not rename or remove these classes nor collapse nested elements which use them.'''<br/>Also, when giving coordinates, please don't be [[wikipedia:WikiProject Geographical coordinates#Precision|overly precise]].
<includeonly>{{#ifeq:{{SUBPAGENAME}}|doc | |{{#ifeq:{{SUBPAGENAME}}|sandbox | |[[Category:Templates generating hCalendars and Geo|{{PAGENAME}}]]}} }}</includeonly><noinclude>
[[Category:Microformat (uF) message templates]]
</noinclude>
17ca83a86600e9c6435d5e462efaadfbe2c34b4b
Module:Formatted appearance
828
1010
2070
2023-08-31T04:21:25Z
dev>Pppery
0
Typo
Scribunto
text/plain
-- This module requires the use of Module:List.
local p = {}
-- Local function which is used to get a correctly formatted entry.
-- Function checks if the array had a value added by checking the counter,
-- and returns the relevant result.
local function getFormattedEntry(args, counter)
if (counter == 1) then -- Check if the counter stayed the same.
return "" -- Nothing was added to array; Return empty string.
elseif (counter == 2) then -- Check if only one value was added to the array.
return args[1] -- Only one value was added to array; Return that value.
else -- The array had more than one value added.
return table.concat(args, "<br/>") -- Retrieve the formatted plainlist.
end
end
--[[
Local function which is used to format an appearance for a comic book,
in the style of:
Line 1: <comic book title> #<issue number> (with comic book title in italics)
Line 2: <release date>
For other usages, see createGenericEntry().
The function works with the following combinations:
-- Only comic book title (example: "The Incredible Hulk").
-- Title and issue number (example: "The Incredible Hulk" and "181").
-- Title and release date (example: "The Incredible Hulk and "November 1974").
-- Title, issue number and release date (example: "The Incredible Hulk", "181" and "November 1974").
-- Only release date (example: "November 1974").
--]]
local function createComicEntry(appearanceMajor, appearanceMinor, appearanceDate)
local fullString = {} -- Variable to save the array.
local counter = 1 -- Variable to save the array counter.
if (appearanceMajor ~= nil) then -- Check if a comic book title was entered.
if (appearanceMinor == nil) then -- A comic book title was entered; Check if a issue number was entered.
fullString[counter] = appearanceMajor -- A issue was not entered; Add only the comic book title to the array.
counter = counter + 1 -- Increment counter by one.
else
fullString[counter] = appearanceMajor .. " " .. appearanceMinor -- A issue was entered; Add both to the array.
counter = counter + 1 -- Increment counter by one.
end
end
if (appearanceDate ~= nil) then -- Check if a release date was entered.
fullString[counter] = appearanceDate -- A release date was entered; Add it to the array.
counter = counter + 1 -- Increment counter by one.
end
return getFormattedEntry(fullString, counter) -- Call getFormattedEntry() to get a correctly formatted entry.
end
--[[
Local function which is used to format an appearance for most usages,
including television, film, books, songs and games, in the style of:
Line 1: <minor work title> (in quotes) (Minor works include: TV episodes, chapters, songs and game missions)
Line 2: <major work title> (in italics) (Major works include: TV series, films, books, albums and games)
Line 3: <release date>
For comic book usages, see createComicEntry().
The function works with the following combinations:
-- Only minor work title (example: "Live Together, Die Alone").
-- Minor work title and major work title (example: "Live Together, Die Alone" and "Lost").
-- Minor work title and release date (example: "Live Together, Die Alone" and "May 24, 2006").
-- Minor work title, major work title and release date (example: "Live Together, Die Alone", "Lost" and "May 24, 2006").
-- Only major work title (example: "Lost").
-- major work title and release date (example: "Lost" and "May 24, 2006").
-- Only release date (example: "May 24, 2006").
--]]
local function createGenericEntry(appearanceMajor, appearanceMinor, appearanceDate)
local fullString = {} -- Variable to save the array.
local counter = 1 -- Variable to save the array counter.
if (appearanceMinor ~= nil) then -- Check if a minor appearance was entered.
fullString[counter] = appearanceMinor -- A minor appearance was entered; Add it to the array.
counter = counter + 1 -- Increment counter by one.
end
if (appearanceMajor ~= nil) then -- Check if a major appearance was entered.
fullString[counter] = appearanceMajor -- A major appearance was entered; Add it to the array.
counter = counter + 1 -- Increment counter by one.
end
if (appearanceDate ~= nil) then -- Check if a release date was entered.
fullString[counter] = appearanceDate -- A release date was entered; Add it to the array.
counter = counter + 1 -- Increment counter by one.
end
return getFormattedEntry(fullString, counter) -- Call getFormattedEntry() to get a correctly formatted entry.
end
-- Local function which is used to format with a hash symbol comic book issues.
-- For other minor works, see getFormattedGenericMinorWork().
local function getFormattedComicMinorWorkTitle(issue)
if (issue ~= nil) then -- Check if the issue is not nil.
if (string.find(issue, "#")) then -- Check if the issue already has a hash symbol.
return issue -- Hash symbol already present; Return issue.
else
local formattedString = string.gsub(issue, "%d+", "#%1") -- Hash symbol not found; Add the symbol before the issue number.
return formattedString -- Return issue.
end
else
return nil -- issue is nil; Return nil.
end
end
-- Local function which is used to format with quotes a minor work title of most types.
-- For comic book issues, see getFormattedComicMinorWork() (see [MOS:MINORWORK]).
local function getFormattedGenericMinorWorkTitle(title)
if (title ~= nil) then -- Check if the title is not nil.
return "\"" .. title .. "\"" -- Title is not nil; Add quotes to the title.
else
return nil -- Title is nil; Return nil.
end
end
-- Local function which is used to format with italics a major work title (see [MOS:MAJORWORK]).
local function getFormattedMajorWorkTitle(title)
if (title ~= nil) then -- Check if the title is not nil.
return "''" .. title .. "''" -- Title is not nil; Add italics to the title.
else
return nil -- Title is nil; Return nil.
end
end
-- Local function which does the actual main process.
local function _getFormattedAppearance(args)
local appearanceMajor = args['major_work'] -- Get the title of the major work.
local appearanceMinor = args['minor_work'] -- Get the title of the minor work.
local isComic = false -- Variable to save the status of wether the appearence is from a comic book.
if (args['issue'] ~= nil) then -- Check if the comic specific issue is not nil.
appearanceMinor = args['issue'] -- Issue is not nil; Get the issue number.
isComic = true -- Set isComic to true.
end
local appearanceDate = args['date'] -- Get the release date of the minor work.
local formattedAppearanceMajor = getFormattedMajorWorkTitle(appearanceMajor) -- Call getFormattedMajorWorkTitle() to get a formatted major work title.
if (isComic == false) then -- Check if the appearance is a comic book appearance.
-- The appearance is not a comic book appearance;
local formattedAppearanceMinor = getFormattedGenericMinorWorkTitle(appearanceMinor) -- Call getFormattedGenericMinorWorkTitle() to get a formatted minor work title.
return createGenericEntry(formattedAppearanceMajor, formattedAppearanceMinor, appearanceDate) -- Call createGenericEntry() to create an appearance entry.
else
-- The appearance is a comic book appearance.
local formattedAppearanceMinor = getFormattedComicMinorWorkTitle(appearanceMinor) -- Call getFormattedComicMinorWorkTitle() to get a formatted minor work title.
return createComicEntry(formattedAppearanceMajor, formattedAppearanceMinor, appearanceDate) -- Call createComicEntry() to create a comic book appearance entry.
end
end
--[[
Public function which is used to format the |first_appeared= and |last_appeared= fields.
The usage of this module allows for correct title formatting (see [MOS:MAJORWORK] and [MOS:MINORWORK]),
and correct line breaks based on guidelines (see [WP:UBLIST]).
Parameters:
-- |major_work= — optional; The title of the major work the fictional element appeared in.
Major works include TV series, films, books, albums and games.
-- |minor_work= — optional; The title of the minor work the fictional element appeared in.
Minor works include TV episodes, chapters, songs and game missions.
-- |issue= — optional; The number of the comic book issue the fictional element appeared in.
-- |date= — optional; The date of the publication/release of the minor work where the fictional element appeared in.
--]]
function p.getFormattedAppearance(frame)
local getArgs = require('Module:Arguments').getArgs -- Use Module:Arguments to access module arguments.
local args = getArgs(frame) -- Get the arguments sent via the template.
return _getFormattedAppearance(args) -- Call _getFormattedAppearance() to perform the actual process.
end
return p
801fe2d9de9c3eb00e60fd962b6450e0ab1adc0f
Template:Template display
10
1016
2087
2023-08-31T17:59:44Z
[[]]>MusikBot II
0
Changed protection settings for "[[Template:Template display]]": [[Wikipedia:High-risk templates|High-risk template or module]]: 5077 transclusions ([[User:MusikBot II/TemplateProtector|more info]]) ([Edit=Require template editor access] (indefinite) [Move=Require template editor access] (indefinite))
wikitext
text/x-wiki
<includeonly>{{#invoke:Message box|ombox|type=notice
|image={{#switch:{{{1}}}|adaptive=[[File:Different devices simple.svg|65x65px|link=|alt=]]|nomobile=[[File:Handheld devices no.svg|55px|link=|alt=]]|nodesktop=[[File:Desktop devices no.svg|55px|link=|alt=]]}}
|text={{#switch:{{{1}}}
| adaptive = This template is [[Adaptive web design|responsive]] and <strong>displays differently in mobile and desktop view</strong>. Read the documentation for an explanation of the differences and why they exist.
| nomobile = This template does ''not'' display in the mobile view of Wikipedia; it is <strong>desktop only</strong>. Read the documentation for an explanation.
| nodesktop = This template does ''not'' display in the desktop view of Wikipedia; it is <strong>mobile only</strong>. Read the documentation for an explanation.
| nomobilesidebar = This template does ''not'' display in the mobile view of Wikipedia; it is <strong>desktop only</strong>. Read the [[Template:Sidebar/doc|parent documentation]] for an explanation.
| vector2022 = This template does not work properly in the [[Wikipedia:Vector 2022|Vector 2022]] skin. Read the documentation for an explanation.
| #default = {{{1}}}
}}}}</includeonly><noinclude>
{{Documentation}}
</noinclude>
47cc41eacc2d2dec246f01b81111b280cec901a3
Module:Message box
828
19
42
2023-09-02T22:54:30Z
Anomie
4
[[:File:Cscr-featured.svg]] needs a link to the description page for license and attribution. Add the ability for the configuration to specify a flag to accomplish this.
Scribunto
text/plain
require('strict')
local getArgs
local yesno = require('Module:Yesno')
local lang = mw.language.getContentLanguage()
local CONFIG_MODULE = 'Module:Message box/configuration'
local DEMOSPACES = {talk = 'tmbox', image = 'imbox', file = 'imbox', category = 'cmbox', article = 'ambox', main = 'ambox'}
--------------------------------------------------------------------------------
-- Helper functions
--------------------------------------------------------------------------------
local function getTitleObject(...)
-- Get the title object, passing the function through pcall
-- in case we are over the expensive function count limit.
local success, title = pcall(mw.title.new, ...)
if success then
return title
end
end
local function union(t1, t2)
-- Returns the union of two arrays.
local vals = {}
for i, v in ipairs(t1) do
vals[v] = true
end
for i, v in ipairs(t2) do
vals[v] = true
end
local ret = {}
for k in pairs(vals) do
table.insert(ret, k)
end
table.sort(ret)
return ret
end
local function getArgNums(args, prefix)
local nums = {}
for k, v in pairs(args) do
local num = mw.ustring.match(tostring(k), '^' .. prefix .. '([1-9]%d*)$')
if num then
table.insert(nums, tonumber(num))
end
end
table.sort(nums)
return nums
end
--------------------------------------------------------------------------------
-- Box class definition
--------------------------------------------------------------------------------
local MessageBox = {}
MessageBox.__index = MessageBox
function MessageBox.new(boxType, args, cfg)
args = args or {}
local obj = {}
-- Set the title object and the namespace.
obj.title = getTitleObject(args.page) or mw.title.getCurrentTitle()
-- Set the config for our box type.
obj.cfg = cfg[boxType]
if not obj.cfg then
local ns = obj.title.namespace
-- boxType is "mbox" or invalid input
if args.demospace and args.demospace ~= '' then
-- implement demospace parameter of mbox
local demospace = string.lower(args.demospace)
if DEMOSPACES[demospace] then
-- use template from DEMOSPACES
obj.cfg = cfg[DEMOSPACES[demospace]]
elseif string.find( demospace, 'talk' ) then
-- demo as a talk page
obj.cfg = cfg.tmbox
else
-- default to ombox
obj.cfg = cfg.ombox
end
elseif ns == 0 then
obj.cfg = cfg.ambox -- main namespace
elseif ns == 6 then
obj.cfg = cfg.imbox -- file namespace
elseif ns == 14 then
obj.cfg = cfg.cmbox -- category namespace
else
local nsTable = mw.site.namespaces[ns]
if nsTable and nsTable.isTalk then
obj.cfg = cfg.tmbox -- any talk namespace
else
obj.cfg = cfg.ombox -- other namespaces or invalid input
end
end
end
-- Set the arguments, and remove all blank arguments except for the ones
-- listed in cfg.allowBlankParams.
do
local newArgs = {}
for k, v in pairs(args) do
if v ~= '' then
newArgs[k] = v
end
end
for i, param in ipairs(obj.cfg.allowBlankParams or {}) do
newArgs[param] = args[param]
end
obj.args = newArgs
end
-- Define internal data structure.
obj.categories = {}
obj.classes = {}
-- For lazy loading of [[Module:Category handler]].
obj.hasCategories = false
return setmetatable(obj, MessageBox)
end
function MessageBox:addCat(ns, cat, sort)
if not cat then
return nil
end
if sort then
cat = string.format('[[Category:%s|%s]]', cat, sort)
else
cat = string.format('[[Category:%s]]', cat)
end
self.hasCategories = true
self.categories[ns] = self.categories[ns] or {}
table.insert(self.categories[ns], cat)
end
function MessageBox:addClass(class)
if not class then
return nil
end
table.insert(self.classes, class)
end
function MessageBox:setParameters()
local args = self.args
local cfg = self.cfg
-- Get type data.
self.type = args.type
local typeData = cfg.types[self.type]
self.invalidTypeError = cfg.showInvalidTypeError
and self.type
and not typeData
typeData = typeData or cfg.types[cfg.default]
self.typeClass = typeData.class
self.typeImage = typeData.image
self.typeImageNeedsLink = typeData.imageNeedsLink
-- Find if the box has been wrongly substituted.
self.isSubstituted = cfg.substCheck and args.subst == 'SUBST'
-- Find whether we are using a small message box.
self.isSmall = cfg.allowSmall and (
cfg.smallParam and args.small == cfg.smallParam
or not cfg.smallParam and yesno(args.small)
)
-- Add attributes, classes and styles.
self.id = args.id
self.name = args.name
if self.name then
self:addClass('box-' .. string.gsub(self.name,' ','_'))
end
if yesno(args.plainlinks) ~= false then
self:addClass('plainlinks')
end
for _, class in ipairs(cfg.classes or {}) do
self:addClass(class)
end
if self.isSmall then
self:addClass(cfg.smallClass or 'mbox-small')
end
self:addClass(self.typeClass)
self:addClass(args.class)
self.style = args.style
self.attrs = args.attrs
-- Set text style.
self.textstyle = args.textstyle
-- Find if we are on the template page or not. This functionality is only
-- used if useCollapsibleTextFields is set, or if both cfg.templateCategory
-- and cfg.templateCategoryRequireName are set.
self.useCollapsibleTextFields = cfg.useCollapsibleTextFields
if self.useCollapsibleTextFields
or cfg.templateCategory
and cfg.templateCategoryRequireName
then
if self.name then
local templateName = mw.ustring.match(
self.name,
'^[tT][eE][mM][pP][lL][aA][tT][eE][%s_]*:[%s_]*(.*)$'
) or self.name
templateName = 'Template:' .. templateName
self.templateTitle = getTitleObject(templateName)
end
self.isTemplatePage = self.templateTitle
and mw.title.equals(self.title, self.templateTitle)
end
-- Process data for collapsible text fields. At the moment these are only
-- used in {{ambox}}.
if self.useCollapsibleTextFields then
-- Get the self.issue value.
if self.isSmall and args.smalltext then
self.issue = args.smalltext
else
local sect
if args.sect == '' then
sect = 'This ' .. (cfg.sectionDefault or 'page')
elseif type(args.sect) == 'string' then
sect = 'This ' .. args.sect
end
local issue = args.issue
issue = type(issue) == 'string' and issue ~= '' and issue or nil
local text = args.text
text = type(text) == 'string' and text or nil
local issues = {}
table.insert(issues, sect)
table.insert(issues, issue)
table.insert(issues, text)
self.issue = table.concat(issues, ' ')
end
-- Get the self.talk value.
local talk = args.talk
-- Show talk links on the template page or template subpages if the talk
-- parameter is blank.
if talk == ''
and self.templateTitle
and (
mw.title.equals(self.templateTitle, self.title)
or self.title:isSubpageOf(self.templateTitle)
)
then
talk = '#'
elseif talk == '' then
talk = nil
end
if talk then
-- If the talk value is a talk page, make a link to that page. Else
-- assume that it's a section heading, and make a link to the talk
-- page of the current page with that section heading.
local talkTitle = getTitleObject(talk)
local talkArgIsTalkPage = true
if not talkTitle or not talkTitle.isTalkPage then
talkArgIsTalkPage = false
talkTitle = getTitleObject(
self.title.text,
mw.site.namespaces[self.title.namespace].talk.id
)
end
if talkTitle and talkTitle.exists then
local talkText
if self.isSmall then
local talkLink = talkArgIsTalkPage and talk or (talkTitle.prefixedText .. '#' .. talk)
talkText = string.format('([[%s|talk]])', talkLink)
else
talkText = 'Relevant discussion may be found on'
if talkArgIsTalkPage then
talkText = string.format(
'%s [[%s|%s]].',
talkText,
talk,
talkTitle.prefixedText
)
else
talkText = string.format(
'%s the [[%s#%s|talk page]].',
talkText,
talkTitle.prefixedText,
talk
)
end
end
self.talk = talkText
end
end
-- Get other values.
self.fix = args.fix ~= '' and args.fix or nil
local date
if args.date and args.date ~= '' then
date = args.date
elseif args.date == '' and self.isTemplatePage then
date = lang:formatDate('F Y')
end
if date then
self.date = string.format(" <span class='date-container'><i>(<span class='date'>%s</span>)</i></span>", date)
end
self.info = args.info
if yesno(args.removalnotice) then
self.removalNotice = cfg.removalNotice
end
end
-- Set the non-collapsible text field. At the moment this is used by all box
-- types other than ambox, and also by ambox when small=yes.
if self.isSmall then
self.text = args.smalltext or args.text
else
self.text = args.text
end
-- Set the below row.
self.below = cfg.below and args.below
-- General image settings.
self.imageCellDiv = not self.isSmall and cfg.imageCellDiv
self.imageEmptyCell = cfg.imageEmptyCell
-- Left image settings.
local imageLeft = self.isSmall and args.smallimage or args.image
if cfg.imageCheckBlank and imageLeft ~= 'blank' and imageLeft ~= 'none'
or not cfg.imageCheckBlank and imageLeft ~= 'none'
then
self.imageLeft = imageLeft
if not imageLeft then
local imageSize = self.isSmall
and (cfg.imageSmallSize or '30x30px')
or '40x40px'
self.imageLeft = string.format('[[File:%s|%s%s|alt=]]', self.typeImage
or 'Information icon4.svg', imageSize, self.typeImageNeedsLink and "" or "|link=" )
end
end
-- Right image settings.
local imageRight = self.isSmall and args.smallimageright or args.imageright
if not (cfg.imageRightNone and imageRight == 'none') then
self.imageRight = imageRight
end
-- set templatestyles
self.base_templatestyles = cfg.templatestyles
self.templatestyles = args.templatestyles
end
function MessageBox:setMainspaceCategories()
local args = self.args
local cfg = self.cfg
if not cfg.allowMainspaceCategories then
return nil
end
local nums = {}
for _, prefix in ipairs{'cat', 'category', 'all'} do
args[prefix .. '1'] = args[prefix]
nums = union(nums, getArgNums(args, prefix))
end
-- The following is roughly equivalent to the old {{Ambox/category}}.
local date = args.date
date = type(date) == 'string' and date
local preposition = 'from'
for _, num in ipairs(nums) do
local mainCat = args['cat' .. tostring(num)]
or args['category' .. tostring(num)]
local allCat = args['all' .. tostring(num)]
mainCat = type(mainCat) == 'string' and mainCat
allCat = type(allCat) == 'string' and allCat
if mainCat and date and date ~= '' then
local catTitle = string.format('%s %s %s', mainCat, preposition, date)
self:addCat(0, catTitle)
catTitle = getTitleObject('Category:' .. catTitle)
if not catTitle or not catTitle.exists then
self:addCat(0, 'Articles with invalid date parameter in template')
end
elseif mainCat and (not date or date == '') then
self:addCat(0, mainCat)
end
if allCat then
self:addCat(0, allCat)
end
end
end
function MessageBox:setTemplateCategories()
local args = self.args
local cfg = self.cfg
-- Add template categories.
if cfg.templateCategory then
if cfg.templateCategoryRequireName then
if self.isTemplatePage then
self:addCat(10, cfg.templateCategory)
end
elseif not self.title.isSubpage then
self:addCat(10, cfg.templateCategory)
end
end
-- Add template error categories.
if cfg.templateErrorCategory then
local templateErrorCategory = cfg.templateErrorCategory
local templateCat, templateSort
if not self.name and not self.title.isSubpage then
templateCat = templateErrorCategory
elseif self.isTemplatePage then
local paramsToCheck = cfg.templateErrorParamsToCheck or {}
local count = 0
for i, param in ipairs(paramsToCheck) do
if not args[param] then
count = count + 1
end
end
if count > 0 then
templateCat = templateErrorCategory
templateSort = tostring(count)
end
if self.categoryNums and #self.categoryNums > 0 then
templateCat = templateErrorCategory
templateSort = 'C'
end
end
self:addCat(10, templateCat, templateSort)
end
end
function MessageBox:setAllNamespaceCategories()
-- Set categories for all namespaces.
if self.invalidTypeError then
local allSort = (self.title.namespace == 0 and 'Main:' or '') .. self.title.prefixedText
self:addCat('all', 'Wikipedia message box parameter needs fixing', allSort)
end
if self.isSubstituted then
self:addCat('all', 'Pages with incorrectly substituted templates')
end
end
function MessageBox:setCategories()
if self.title.namespace == 0 then
self:setMainspaceCategories()
elseif self.title.namespace == 10 then
self:setTemplateCategories()
end
self:setAllNamespaceCategories()
end
function MessageBox:renderCategories()
if not self.hasCategories then
-- No categories added, no need to pass them to Category handler so,
-- if it was invoked, it would return the empty string.
-- So we shortcut and return the empty string.
return ""
end
-- Convert category tables to strings and pass them through
-- [[Module:Category handler]].
return require('Module:Category handler')._main{
main = table.concat(self.categories[0] or {}),
template = table.concat(self.categories[10] or {}),
all = table.concat(self.categories.all or {}),
nocat = self.args.nocat,
page = self.args.page
}
end
function MessageBox:export()
local root = mw.html.create()
-- Add the subst check error.
if self.isSubstituted and self.name then
root:tag('b')
:addClass('error')
:wikitext(string.format(
'Template <code>%s[[Template:%s|%s]]%s</code> has been incorrectly substituted.',
mw.text.nowiki('{{'), self.name, self.name, mw.text.nowiki('}}')
))
end
local frame = mw.getCurrentFrame()
root:wikitext(frame:extensionTag{
name = 'templatestyles',
args = { src = self.base_templatestyles },
})
-- Add support for a single custom templatestyles sheet. Undocumented as
-- need should be limited and many templates using mbox are substed; we
-- don't want to spread templatestyles sheets around to arbitrary places
if self.templatestyles then
root:wikitext(frame:extensionTag{
name = 'templatestyles',
args = { src = self.templatestyles },
})
end
-- Create the box table.
local boxTable = root:tag('table')
boxTable:attr('id', self.id or nil)
for i, class in ipairs(self.classes or {}) do
boxTable:addClass(class or nil)
end
boxTable
:cssText(self.style or nil)
:attr('role', 'presentation')
if self.attrs then
boxTable:attr(self.attrs)
end
-- Add the left-hand image.
local row = boxTable:tag('tr')
if self.imageLeft then
local imageLeftCell = row:tag('td'):addClass('mbox-image')
if self.imageCellDiv then
-- If we are using a div, redefine imageLeftCell so that the image
-- is inside it. Divs use style="width: 52px;", which limits the
-- image width to 52px. If any images in a div are wider than that,
-- they may overlap with the text or cause other display problems.
imageLeftCell = imageLeftCell:tag('div'):addClass('mbox-image-div')
end
imageLeftCell:wikitext(self.imageLeft or nil)
elseif self.imageEmptyCell then
-- Some message boxes define an empty cell if no image is specified, and
-- some don't. The old template code in templates where empty cells are
-- specified gives the following hint: "No image. Cell with some width
-- or padding necessary for text cell to have 100% width."
row:tag('td')
:addClass('mbox-empty-cell')
end
-- Add the text.
local textCell = row:tag('td'):addClass('mbox-text')
if self.useCollapsibleTextFields then
-- The message box uses advanced text parameters that allow things to be
-- collapsible. At the moment, only ambox uses this.
textCell:cssText(self.textstyle or nil)
local textCellDiv = textCell:tag('div')
textCellDiv
:addClass('mbox-text-span')
:wikitext(self.issue or nil)
if (self.talk or self.fix) then
textCellDiv:tag('span')
:addClass('hide-when-compact')
:wikitext(self.talk and (' ' .. self.talk) or nil)
:wikitext(self.fix and (' ' .. self.fix) or nil)
end
textCellDiv:wikitext(self.date and (' ' .. self.date) or nil)
if self.info and not self.isSmall then
textCellDiv
:tag('span')
:addClass('hide-when-compact')
:wikitext(self.info and (' ' .. self.info) or nil)
end
if self.removalNotice then
textCellDiv:tag('span')
:addClass('hide-when-compact')
:tag('i')
:wikitext(string.format(" (%s)", self.removalNotice))
end
else
-- Default text formatting - anything goes.
textCell
:cssText(self.textstyle or nil)
:wikitext(self.text or nil)
end
-- Add the right-hand image.
if self.imageRight then
local imageRightCell = row:tag('td'):addClass('mbox-imageright')
if self.imageCellDiv then
-- If we are using a div, redefine imageRightCell so that the image
-- is inside it.
imageRightCell = imageRightCell:tag('div'):addClass('mbox-image-div')
end
imageRightCell
:wikitext(self.imageRight or nil)
end
-- Add the below row.
if self.below then
boxTable:tag('tr')
:tag('td')
:attr('colspan', self.imageRight and '3' or '2')
:addClass('mbox-text')
:cssText(self.textstyle or nil)
:wikitext(self.below or nil)
end
-- Add error message for invalid type parameters.
if self.invalidTypeError then
root:tag('div')
:addClass('mbox-invalid-type')
:wikitext(string.format(
'This message box is using an invalid "type=%s" parameter and needs fixing.',
self.type or ''
))
end
-- Add categories.
root:wikitext(self:renderCategories() or nil)
return tostring(root)
end
--------------------------------------------------------------------------------
-- Exports
--------------------------------------------------------------------------------
local p, mt = {}, {}
function p._exportClasses()
-- For testing.
return {
MessageBox = MessageBox
}
end
function p.main(boxType, args, cfgTables)
local box = MessageBox.new(boxType, args, cfgTables or mw.loadData(CONFIG_MODULE))
box:setParameters()
box:setCategories()
return box:export()
end
function mt.__index(t, k)
return function (frame)
if not getArgs then
getArgs = require('Module:Arguments').getArgs
end
return t.main(k, getArgs(frame, {trim = false, removeBlanks = false}))
end
end
return setmetatable(p, mt)
f2fb84f7b817d2d88747f57c40902a0d8be8158a
Module:Transclusion count/data/C
828
308
622
2023-09-03T10:44:28Z
[[w>Ahechtbot
0
[[Wikipedia:BOT|Bot]]: Updated page.
Scribunto
text/plain
return {
["C"] = 652000,
["C-Class"] = 17000,
["C-SPAN"] = 12000,
["C-cmn"] = 2600,
["C-pl"] = 52000,
["C."] = 4100,
["CAN"] = 20000,
["CANelec"] = 14000,
["CANelec/gain"] = 2600,
["CANelec/hold"] = 4900,
["CANelec/source"] = 7100,
["CANelec/top"] = 6400,
["CANelec/total"] = 6200,
["CAS"] = 3800,
["CBB_Standings_End"] = 15000,
["CBB_Standings_Entry"] = 15000,
["CBB_Standings_Start"] = 15000,
["CBB_Yearly_Record_End"] = 3100,
["CBB_Yearly_Record_Entry"] = 3100,
["CBB_Yearly_Record_Start"] = 3000,
["CBB_Yearly_Record_Subhead"] = 3700,
["CBB_Yearly_Record_Subtotal"] = 2900,
["CBB_roster/Footer"] = 8000,
["CBB_roster/Header"] = 8000,
["CBB_roster/Player"] = 8000,
["CBB_schedule_end"] = 11000,
["CBB_schedule_entry"] = 11000,
["CBB_schedule_start"] = 11000,
["CBB_standings_end"] = 16000,
["CBB_standings_entry"] = 15000,
["CBB_standings_start"] = 15000,
["CBB_yearly_record_end"] = 4100,
["CBB_yearly_record_end/legend"] = 3600,
["CBB_yearly_record_entry"] = 4100,
["CBB_yearly_record_start"] = 4000,
["CBB_yearly_record_subhead"] = 3800,
["CBB_yearly_record_subtotal"] = 3800,
["CBSB_Standings_End"] = 4300,
["CBSB_Standings_Entry"] = 4300,
["CBSB_Standings_Start"] = 4300,
["CBSB_link"] = 3500,
["CBSB_standings_end"] = 4400,
["CBSB_standings_entry"] = 4500,
["CBSB_standings_start"] = 4500,
["CC0"] = 3800,
["CENTURY"] = 16000,
["CFB_Standings_End"] = 34000,
["CFB_Standings_Entry"] = 34000,
["CFB_Standings_Start"] = 34000,
["CFB_Yearly_Record_End"] = 6900,
["CFB_Yearly_Record_End/legend"] = 2400,
["CFB_Yearly_Record_Entry"] = 6900,
["CFB_Yearly_Record_Start"] = 6900,
["CFB_Yearly_Record_Subhead"] = 6900,
["CFB_Yearly_Record_Subtotal"] = 6700,
["CFB_schedule"] = 26000,
["CFB_schedule_entry"] = 19000,
["CFB_standings_end"] = 34000,
["CFB_standings_entry"] = 34000,
["CFB_standings_start"] = 34000,
["CFL_Year"] = 5600,
["CGF_year"] = 2600,
["CHE"] = 10000,
["CHI"] = 2700,
["CHL"] = 3600,
["CHN"] = 11000,
["CN"] = 3400,
["CO2"] = 3300,
["COI"] = 14000,
["COIUL"] = 129000,
["COI_editnotice"] = 6700,
["COL"] = 5000,
["COLON"] = 13000,
["CRI"] = 2200,
["CRO"] = 5400,
["CSK"] = 2800,
["CSS_image_crop"] = 4700,
["CUB"] = 3700,
["CURRENTDATE"] = 3600,
["CURRENTMINUTE"] = 2500,
["CYP"] = 2100,
["CZE"] = 15000,
["Calendar"] = 2400,
["California/color"] = 12000,
["Call_sign_disambiguation"] = 3100,
["Campaignbox"] = 23000,
["CanProvName"] = 14000,
["CanadaByProvinceCatNav"] = 9800,
["CanadaProvinceThe"] = 4000,
["Canadian_English"] = 7000,
["Canadian_Parliament_links"] = 5100,
["Canadian_election_result"] = 14000,
["Canadian_election_result/gain"] = 2700,
["Canadian_election_result/hold"] = 5000,
["Canadian_election_result/source"] = 8200,
["Canadian_election_result/top"] = 14000,
["Canadian_election_result/total"] = 11000,
["Canadian_party_colour"] = 8200,
["Canadian_party_colour/colour"] = 18000,
["Canadian_party_colour/colour/default"] = 18000,
["Canadian_party_colour/name"] = 15000,
["Canadian_party_colour/name/default"] = 6900,
["Canned_search"] = 5700,
["Cascite"] = 15000,
["Caselaw_source"] = 4000,
["Cassini-Ehess"] = 2600,
["Cast_listing"] = 16000,
["Castlist"] = 2400,
["Cat"] = 354000,
["CatAutoTOC"] = 660000,
["CatAutoTOC/core"] = 659000,
["CatRel"] = 3800,
["CatTrack"] = 3100,
["Cat_class"] = 6700,
["Cat_in_use"] = 50000,
["Cat_main"] = 200000,
["Cat_more"] = 101000,
["Cat_more_if_exists"] = 41000,
["Cat_see_also"] = 3500,
["Catalog_lookup_link"] = 516000,
["Category-Class"] = 14000,
["Category-inline"] = 9100,
["Category_TOC"] = 72000,
["Category_TOC/tracking"] = 72000,
["Category_U.S._State_elections_by_year"] = 7300,
["Category_U.S._State_elections_by_year/core"] = 7300,
["Category_class"] = 36000,
["Category_class/column"] = 36000,
["Category_class/second_row_column"] = 36000,
["Category_described_in_year"] = 5700,
["Category_diffuse"] = 7800,
["Category_disambiguation"] = 2400,
["Category_disambiguation/category_link"] = 2400,
["Category_explanation"] = 236000,
["Category_handler"] = 3310000,
["Category_ifexist"] = 5000,
["Category_importance"] = 10000,
["Category_importance/column"] = 10000,
["Category_importance/second_row_column"] = 10000,
["Category_link"] = 136000,
["Category_link_with_count"] = 6800,
["Category_more"] = 112000,
["Category_more_if_exists"] = 41000,
["Category_ordered_by_date"] = 11000,
["Category_other"] = 903000,
["Category_redirect"] = 109000,
["Category_see_also"] = 39000,
["Category_see_also/Category_pair_check"] = 39000,
["Category_see_also_if_exists"] = 73000,
["Category_see_also_if_exists_2"] = 88000,
["Category_title"] = 2400,
["Catexp"] = 7900,
["CathEncy"] = 2200,
["Catholic"] = 4000,
["Catholic_Encyclopedia"] = 5100,
["Catmain"] = 28000,
["Catmore"] = 9400,
["Cbb_link"] = 8700,
["Cbignore"] = 100000,
["Cbsb_link"] = 2100,
["Cc-by-2.5"] = 3800,
["Cc-by-3.0"] = 8500,
["Cc-by-sa-2.5"] = 2600,
["Cc-by-sa-2.5,2.0,1.0"] = 2600,
["Cc-by-sa-3.0"] = 25000,
["Cc-by-sa-3.0,2.5,2.0,1.0"] = 2200,
["Cc-by-sa-3.0-migrated"] = 24000,
["Cc-by-sa-4.0"] = 10000,
["Cc-zero"] = 3700,
["CensusAU"] = 9100,
["Census_2016_AUS"] = 6900,
["Cent"] = 5800,
["Center"] = 288000,
["Centralized_discussion"] = 6100,
["Centralized_discussion/core"] = 6100,
["Centralized_discussion/styles.css"] = 6100,
["Centre"] = 3200,
["Century"] = 2100,
["Century_name_from_decade"] = 2400,
["Century_name_from_decade_or_year"] = 77000,
["Century_name_from_title_decade"] = 7600,
["Century_name_from_title_year"] = 7600,
["Certification_Cite/Title"] = 30000,
["Certification_Cite/URL"] = 34000,
["Certification_Cite/archivedate"] = 6100,
["Certification_Cite/archiveurl"] = 6100,
["Certification_Cite_Ref"] = 30000,
["Certification_Table_Bottom"] = 29000,
["Certification_Table_Entry"] = 30000,
["Certification_Table_Entry/Foot"] = 29000,
["Certification_Table_Entry/Foot/helper"] = 29000,
["Certification_Table_Entry/Region"] = 30000,
["Certification_Table_Entry/Sales"] = 29000,
["Certification_Table_Entry/Sales/AustrianPeriod"] = 2000,
["Certification_Table_Entry/Sales/BelgianPeriod"] = 2100,
["Certification_Table_Entry/Sales/DanishPeriod"] = 3300,
["Certification_Table_Entry/Sales/DanishPeriodHelper1"] = 3300,
["Certification_Table_Entry/Sales/DanishPeriodHelper2"] = 3300,
["Certification_Table_Entry/Sales/GermanPeriod"] = 4000,
["Certification_Table_Entry/Sales/ItalianHelper"] = 3200,
["Certification_Table_Entry/Sales/NewZealandPeriod"] = 2100,
["Certification_Table_Entry/Sales/SwedishPeriod"] = 2100,
["Certification_Table_Separator"] = 2400,
["Certification_Table_Top"] = 30000,
["Cfb_link"] = 24000,
["Cfd_result"] = 2400,
["Cfdend"] = 4000,
["Chart"] = 4600,
["Chart/end"] = 4700,
["Chart/start"] = 4600,
["Chart_bottom"] = 3500,
["Chart_top"] = 3500,
["Check_completeness_of_transclusions"] = 19000,
["Check_talk"] = 30000,
["Check_talk_wp"] = 1370000,
["Check_winner_by_scores"] = 13000,
["CheckedSockpuppet"] = 7200,
["Checked_sockpuppet"] = 18000,
["Checkedsockpuppet"] = 5300,
["Checkip"] = 13000,
["Checkuser"] = 76000,
["Checkuserblock-account"] = 17000,
["Chem"] = 5800,
["Chem/atom"] = 5700,
["Chem/link"] = 5800,
["Chem2"] = 4900,
["Chem_molar_mass"] = 18000,
["Chem_molar_mass/format"] = 18000,
["Chembox"] = 14000,
["Chembox/styles.css"] = 14000,
["Chembox_3DMet"] = 14000,
["Chembox_3DMet/format"] = 14000,
["Chembox_AllOtherNames"] = 13000,
["Chembox_AllOtherNames/format"] = 13000,
["Chembox_Appearance"] = 6100,
["Chembox_BoilingPt"] = 3800,
["Chembox_CASNo"] = 14000,
["Chembox_CASNo/format"] = 14000,
["Chembox_CalcTemperatures"] = 6700,
["Chembox_ChEBI"] = 14000,
["Chembox_ChEBI/format"] = 14000,
["Chembox_ChEMBL"] = 14000,
["Chembox_ChEMBL/format"] = 14000,
["Chembox_ChemSpiderID"] = 14000,
["Chembox_ChemSpiderID/format"] = 14000,
["Chembox_CompTox"] = 14000,
["Chembox_CompTox/format"] = 14000,
["Chembox_Datapage_check"] = 14000,
["Chembox_Density"] = 4900,
["Chembox_DrugBank"] = 14000,
["Chembox_DrugBank/format"] = 14000,
["Chembox_ECHA"] = 7600,
["Chembox_ECNumber"] = 14000,
["Chembox_ECNumber/format"] = 14000,
["Chembox_Elements"] = 14000,
["Chembox_Elements/molecular_formula"] = 18000,
["Chembox_Footer"] = 14000,
["Chembox_Footer/tracking"] = 14000,
["Chembox_GHS_(set)"] = 3500,
["Chembox_Hazards"] = 12000,
["Chembox_IUPHAR_ligand"] = 14000,
["Chembox_IUPHAR_ligand/format"] = 14000,
["Chembox_Identifiers"] = 14000,
["Chembox_InChI"] = 13000,
["Chembox_InChI/format"] = 13000,
["Chembox_Indexlist"] = 14000,
["Chembox_Jmol"] = 14000,
["Chembox_Jmol/format"] = 14000,
["Chembox_KEGG"] = 14000,
["Chembox_KEGG/format"] = 14000,
["Chembox_MeltingPt"] = 5800,
["Chembox_Properties"] = 14000,
["Chembox_PubChem"] = 14000,
["Chembox_PubChem/format"] = 14000,
["Chembox_RTECS"] = 14000,
["Chembox_RTECS/format"] = 14000,
["Chembox_Related"] = 3400,
["Chembox_SMILES"] = 13000,
["Chembox_SMILES/format"] = 13000,
["Chembox_SolubilityInWater"] = 3900,
["Chembox_Structure"] = 2100,
["Chembox_UNII"] = 14000,
["Chembox_UNII/format"] = 14000,
["Chembox_headerbar"] = 14000,
["Chembox_image"] = 13000,
["Chembox_image_cell"] = 12000,
["Chembox_image_sbs"] = 13000,
["Chembox_parametercheck"] = 13000,
["Chembox_setDatarow"] = 4500,
["Chembox_setHeader"] = 4500,
["Chembox_templatePar/formatPreviewMessage"] = 14000,
["Chembox_verification"] = 7100,
["Chemicals"] = 7400,
["Chemistry"] = 3100,
["Chemspidercite"] = 11000,
["Chessgames_player"] = 3600,
["Chinese"] = 7200,
["Chr"] = 9100,
["ChristianityWikiProject"] = 5700,
["Circa"] = 71000,
["Circular_reference"] = 4100,
["Citation"] = 404000,
["Citation/make_link"] = 6100,
["Citation/styles.css"] = 46000,
["Citation_needed"] = 546000,
["Citation_needed_span"] = 3500,
["Citation_style"] = 4200,
["Cite_AV_media"] = 43000,
["Cite_AV_media_notes"] = 26000,
["Cite_Appletons'"] = 2400,
["Cite_Australian_Dictionary_of_Biography"] = 3300,
["Cite_Catholic_Encyclopedia"] = 8300,
["Cite_Colledge2006"] = 3100,
["Cite_DCB"] = 2800,
["Cite_DNB"] = 18000,
["Cite_EB1911"] = 25000,
["Cite_GNIS"] = 2300,
["Cite_Gaia_DR2"] = 2100,
["Cite_IUCN"] = 58000,
["Cite_Instagram"] = 2100,
["Cite_Jewish_Encyclopedia"] = 2900,
["Cite_NIE"] = 3600,
["Cite_NSW_Parliament"] = 3300,
["Cite_NSW_SHR"] = 2600,
["Cite_ODNB"] = 18000,
["Cite_Q"] = 44000,
["Cite_QHR"] = 3000,
["Cite_QPN"] = 4000,
["Cite_Rowlett"] = 2500,
["Cite_Russian_law"] = 7800,
["Cite_Ryan"] = 3200,
["Cite_Sports-Reference"] = 54000,
["Cite_USGov"] = 24000,
["Cite_WoRMS"] = 5500,
["Cite_act"] = 2700,
["Cite_arXiv"] = 5000,
["Cite_bcgnis"] = 3100,
["Cite_book"] = 1600000,
["Cite_certification"] = 34000,
["Cite_cgndb"] = 3300,
["Cite_comic"] = 2100,
["Cite_conference"] = 16000,
["Cite_court"] = 5400,
["Cite_court/styles.css"] = 5400,
["Cite_dictionary"] = 3600,
["Cite_encyclopedia"] = 204000,
["Cite_episode"] = 17000,
["Cite_gnis"] = 34000,
["Cite_interview"] = 7800,
["Cite_iucn"] = 58000,
["Cite_journal"] = 959000,
["Cite_magazine"] = 273000,
["Cite_manual"] = 2000,
["Cite_map"] = 40000,
["Cite_news"] = 1520000,
["Cite_newspaper_The_Times"] = 6600,
["Cite_patent"] = 5500,
["Cite_patent/authors"] = 4400,
["Cite_patent/core"] = 5800,
["Cite_peakbagger"] = 4600,
["Cite_podcast"] = 3900,
["Cite_press_release"] = 65000,
["Cite_report"] = 36000,
["Cite_rowlett"] = 2500,
["Cite_simbad"] = 4500,
["Cite_sports-reference"] = 59000,
["Cite_thesis"] = 32000,
["Cite_tweet"] = 36000,
["Cite_video"] = 12000,
["Cite_video_game"] = 3000,
["Cite_web"] = 4580000,
["Cite_wikisource"] = 5600,
["Cite_wikisource/make_link"] = 58000,
["Civil_navigation"] = 2800,
["Cl"] = 133000,
["Clade"] = 7600,
["Clade/styles.css"] = 7600,
["Clarify"] = 41000,
["Class"] = 85000,
["Class/colour"] = 9160000,
["Class/icon"] = 21000,
["Class_mask"] = 8240000,
["Class_mask/b"] = 322000,
["Classical"] = 6900,
["Classicon"] = 4700,
["Clc"] = 5900,
["Cleanup"] = 10000,
["Cleanup_bare_URLs"] = 27000,
["Cleanup_reorganize"] = 2500,
["Cleanup_rewrite"] = 5900,
["Clear"] = 2960000,
["Clear-left"] = 4100,
["Clear_left"] = 31000,
["Clear_right"] = 2600,
["Clerk-Note"] = 9900,
["Clerk_Request"] = 2000,
["Clerknote"] = 7500,
["Clickable_button"] = 16000,
["Clickable_button_2"] = 961000,
["Closed_access"] = 4500,
["Closed_rfc_top"] = 2200,
["Clr"] = 3600,
["Clubplayerscat"] = 8500,
["Cmbox"] = 420000,
["Cn"] = 94000,
["Cnote2"] = 2300,
["Cnote2_Begin"] = 2300,
["Cnote2_End"] = 2300,
["Coat_of_arms"] = 5100,
["Cob"] = 12000,
["Code"] = 51000,
["Col-1-of-2"] = 2400,
["Col-2"] = 171000,
["Col-2-of-2"] = 2300,
["Col-3"] = 10000,
["Col-4"] = 3500,
["Col-begin"] = 213000,
["Col-break"] = 211000,
["Col-end"] = 212000,
["Col-float"] = 2700,
["Col-float-break"] = 2600,
["Col-float-end"] = 2700,
["Col-float/styles.css"] = 2700,
["Col-start"] = 20000,
["Colbegin"] = 21000,
["Colend"] = 23000,
["Collapse"] = 9700,
["Collapse_bottom"] = 52000,
["Collapse_top"] = 52000,
["Collapsebottom"] = 3800,
["Collapsetop"] = 3800,
["Collapsible_list"] = 53000,
["Collapsible_option"] = 135000,
["College"] = 8900,
["CollegePrimaryHeader"] = 6100,
["CollegePrimaryStyle"] = 97000,
["CollegeSecondaryStyle"] = 3600,
["College_Athlete_Recruit_End"] = 2900,
["College_Athlete_Recruit_Entry"] = 3000,
["College_Athlete_Recruit_Start"] = 3000,
["College_athlete_recruit_end"] = 4000,
["College_athlete_recruit_entry"] = 4200,
["College_athlete_recruit_start"] = 4200,
["College_color_list"] = 3900,
["Colon"] = 18000,
["Color"] = 467000,
["Color_box"] = 73000,
["Colorbox"] = 3600,
["Colorbull"] = 4900,
["Colored_link"] = 63000,
["Colors"] = 3800,
["Colour"] = 5800,
["Colour_box"] = 2000,
["Coloured_link"] = 7000,
["Column"] = 2400,
["Column/styles.css"] = 2400,
["Columns-end"] = 2200,
["Columns-list"] = 97000,
["Columns-start"] = 2200,
["Comedy"] = 2500,
["Comic_Book_DB"] = 3500,
["Comicbookdb"] = 3500,
["Comics-replaceability"] = 2900,
["Comics_infobox_sec/creator_nat"] = 2800,
["Comics_infobox_sec/formcat"] = 3200,
["Comics_infobox_sec/genre"] = 4000,
["Comics_infobox_sec/genrecat"] = 3700,
["Comics_infobox_sec/styles.css"] = 8100,
["Comicsproj"] = 28000,
["Comma_separated_entries"] = 429000,
["Comma_separated_values"] = 47000,
["Comment"] = 5200,
["Committed_identity"] = 3000,
["Committed_identity/styles.css"] = 3000,
["Commons"] = 66000,
["Commons-inline"] = 20000,
["Commons_cat"] = 48000,
["Commons_category"] = 846000,
["Commons_category-inline"] = 148000,
["Commons_category_inline"] = 6100,
["Commonscat"] = 65000,
["Commonscat-inline"] = 17000,
["Commonscat_inline"] = 2400,
["Commonscatinline"] = 6800,
["Compact_TOC"] = 7000,
["Compact_ToC"] = 4800,
["Compare"] = 5200,
["Compare_image_with_Wikidata"] = 10000,
["Composition_bar"] = 10000,
["Confirmed"] = 16000,
["Confused"] = 2800,
["Confusing"] = 2400,
["CongBio"] = 9600,
["CongLinks"] = 4600,
["Connected_contributor"] = 18000,
["Connected_contributor_(paid)"] = 6900,
["Constellation_navbox"] = 6800,
["Container"] = 11000,
["Container_cat"] = 7600,
["Container_category"] = 42000,
["Containercat"] = 2600,
["Contains_special_characters"] = 4100,
["Contains_special_characters/core"] = 4100,
["Contains_special_characters/styles.css"] = 4100,
["Content_category"] = 7600,
["Contentious_topics/list"] = 13000,
["Contentious_topics/page_restriction_editnotice_base"] = 2600,
["Contentious_topics/page_restriction_talk_notice_base"] = 3600,
["Contentious_topics/talk_notice"] = 6700,
["Context"] = 2700,
["Continent2continental"] = 16000,
["Continent_adjective_to_noun"] = 2200,
["Controversial"] = 3300,
["Convert"] = 1170000,
["Convinfobox"] = 205000,
["Convinfobox/2"] = 17000,
["Convinfobox/3"] = 119000,
["Convinfobox/pri2"] = 63000,
["Convinfobox/prisec2"] = 3100,
["Convinfobox/prisec3"] = 26000,
["Convinfobox/sec2"] = 9300,
["Coord"] = 1330000,
["Coord_missing"] = 95000,
["Coord_missing/CheckCat"] = 94000,
["Coords"] = 7600,
["Copied"] = 19000,
["Copy_edit"] = 2600,
["Copy_to_Wikimedia_Commons"] = 109000,
["Copyvios"] = 4400,
["Cospar"] = 2600,
["Cot"] = 12000,
["Count"] = 665000,
["Country2continent"] = 36000,
["Country2continental"] = 2400,
["Country2nationality"] = 344000,
["CountryPrefixThe"] = 109000,
["Country_abbreviation"] = 88000,
["Country_alias"] = 16000,
["Country_at_games_navbox"] = 2700,
["Country_at_games_navbox/below"] = 2700,
["Country_data"] = 7100,
["Country_data_AFG"] = 2300,
["Country_data_ALB"] = 6700,
["Country_data_ALG"] = 9400,
["Country_data_AND"] = 3000,
["Country_data_ANG"] = 3900,
["Country_data_ARG"] = 47000,
["Country_data_ARM"] = 7400,
["Country_data_AUS"] = 76000,
["Country_data_AUT"] = 46000,
["Country_data_AZE"] = 9200,
["Country_data_Afghanistan"] = 12000,
["Country_data_Alaska"] = 2100,
["Country_data_Albania"] = 20000,
["Country_data_Alberta"] = 3700,
["Country_data_Algeria"] = 25000,
["Country_data_American_Samoa"] = 2900,
["Country_data_Andorra"] = 8000,
["Country_data_Angola"] = 12000,
["Country_data_Anguilla"] = 2500,
["Country_data_Antigua_and_Barbuda"] = 6200,
["Country_data_Apulia"] = 7900,
["Country_data_Argentina"] = 81000,
["Country_data_Arizona"] = 2300,
["Country_data_Arkansas"] = 2000,
["Country_data_Armenia"] = 22000,
["Country_data_Aruba"] = 3600,
["Country_data_Australia"] = 127000,
["Country_data_Austria"] = 79000,
["Country_data_Azerbaijan"] = 28000,
["Country_data_BAH"] = 4000,
["Country_data_BAN"] = 3900,
["Country_data_BAR"] = 2400,
["Country_data_BEL"] = 51000,
["Country_data_BER"] = 2300,
["Country_data_BHR"] = 4600,
["Country_data_BIH"] = 13000,
["Country_data_BLR"] = 24000,
["Country_data_BOL"] = 5800,
["Country_data_BOT"] = 2400,
["Country_data_BRA"] = 58000,
["Country_data_BUL"] = 26000,
["Country_data_Bahamas"] = 9800,
["Country_data_Bahrain"] = 12000,
["Country_data_Bangladesh"] = 19000,
["Country_data_Barbados"] = 8100,
["Country_data_Belarus"] = 44000,
["Country_data_Belgium"] = 89000,
["Country_data_Belize"] = 5300,
["Country_data_Benin"] = 7400,
["Country_data_Bermuda"] = 5800,
["Country_data_Bhutan"] = 4700,
["Country_data_Bolivia"] = 15000,
["Country_data_Bosnia_and_Herzegovina"] = 29000,
["Country_data_Botswana"] = 9200,
["Country_data_Brazil"] = 102000,
["Country_data_British_Columbia"] = 3400,
["Country_data_British_Raj"] = 2300,
["Country_data_British_Virgin_Islands"] = 3300,
["Country_data_Brunei"] = 6300,
["Country_data_Bulgaria"] = 52000,
["Country_data_Burkina_Faso"] = 10000,
["Country_data_Burma"] = 2700,
["Country_data_Burundi"] = 6100,
["Country_data_CAM"] = 2100,
["Country_data_CAN"] = 59000,
["Country_data_CGO"] = 2400,
["Country_data_CHE"] = 4700,
["Country_data_CHI"] = 18000,
["Country_data_CHL"] = 2100,
["Country_data_CHN"] = 42000,
["Country_data_CIV"] = 8200,
["Country_data_CMR"] = 8800,
["Country_data_COD"] = 3200,
["Country_data_COL"] = 25000,
["Country_data_CPV"] = 2100,
["Country_data_CRC"] = 6700,
["Country_data_CRO"] = 33000,
["Country_data_CUB"] = 10000,
["Country_data_CYP"] = 9200,
["Country_data_CZE"] = 46000,
["Country_data_California"] = 5900,
["Country_data_Cambodia"] = 8900,
["Country_data_Cameroon"] = 18000,
["Country_data_Canada"] = 122000,
["Country_data_Cape_Verde"] = 6400,
["Country_data_Castile_and_León"] = 2000,
["Country_data_Catalonia"] = 3100,
["Country_data_Cayman_Islands"] = 4200,
["Country_data_Central_African_Republic"] = 5100,
["Country_data_Chad"] = 5600,
["Country_data_Chile"] = 40000,
["Country_data_China"] = 84000,
["Country_data_Chinese_Taipei"] = 20000,
["Country_data_Colombia"] = 46000,
["Country_data_Colorado"] = 5700,
["Country_data_Comoros"] = 4500,
["Country_data_Confederate_States_of_America"] = 3100,
["Country_data_Connecticut"] = 3200,
["Country_data_Cook_Islands"] = 3800,
["Country_data_Costa_Rica"] = 18000,
["Country_data_Croatia"] = 57000,
["Country_data_Cuba"] = 23000,
["Country_data_Curaçao"] = 3600,
["Country_data_Cyprus"] = 23000,
["Country_data_Czech_Republic"] = 82000,
["Country_data_Czechoslovakia"] = 19000,
["Country_data_DEN"] = 34000,
["Country_data_DEU"] = 8700,
["Country_data_DNK"] = 3600,
["Country_data_DOM"] = 7300,
["Country_data_Democratic_Republic_of_the_Congo"] = 13000,
["Country_data_Denmark"] = 69000,
["Country_data_Djibouti"] = 4600,
["Country_data_Dominica"] = 4300,
["Country_data_Dominican_Republic"] = 17000,
["Country_data_ECU"] = 12000,
["Country_data_EGY"] = 14000,
["Country_data_ENG"] = 47000,
["Country_data_ESA"] = 2300,
["Country_data_ESP"] = 73000,
["Country_data_EST"] = 14000,
["Country_data_ETH"] = 3600,
["Country_data_EU"] = 3700,
["Country_data_East_Germany"] = 14000,
["Country_data_East_Timor"] = 5000,
["Country_data_Ecuador"] = 25000,
["Country_data_Egypt"] = 32000,
["Country_data_El_Salvador"] = 13000,
["Country_data_Empire_of_Japan"] = 4000,
["Country_data_England"] = 97000,
["Country_data_Equatorial_Guinea"] = 5200,
["Country_data_Eritrea"] = 5500,
["Country_data_Estonia"] = 35000,
["Country_data_Eswatini"] = 5100,
["Country_data_Ethiopia"] = 13000,
["Country_data_Europe"] = 2400,
["Country_data_European_Union"] = 7400,
["Country_data_FIJ"] = 3900,
["Country_data_FIN"] = 34000,
["Country_data_FRA"] = 99000,
["Country_data_FRG"] = 15000,
["Country_data_FRO"] = 2100,
["Country_data_FR_Yugoslavia"] = 4000,
["Country_data_Faroe_Islands"] = 5500,
["Country_data_Federated_States_of_Micronesia"] = 3100,
["Country_data_Fiji"] = 12000,
["Country_data_Finland"] = 69000,
["Country_data_Florida"] = 6600,
["Country_data_France"] = 194000,
["Country_data_French_Guiana"] = 2100,
["Country_data_French_Polynesia"] = 3800,
["Country_data_GAB"] = 2400,
["Country_data_GAM"] = 2100,
["Country_data_GBR"] = 55000,
["Country_data_GDR"] = 8400,
["Country_data_GEO"] = 14000,
["Country_data_GER"] = 82000,
["Country_data_GHA"] = 9900,
["Country_data_GRE"] = 26000,
["Country_data_GUA"] = 5100,
["Country_data_GUI"] = 3200,
["Country_data_GUY"] = 2300,
["Country_data_Gabon"] = 7600,
["Country_data_Gambia"] = 6900,
["Country_data_Georgia"] = 10000,
["Country_data_Georgia_(U.S._state)"] = 2800,
["Country_data_Georgia_(country)"] = 29000,
["Country_data_German_Empire"] = 5400,
["Country_data_Germany"] = 152000,
["Country_data_Ghana"] = 24000,
["Country_data_Gibraltar"] = 5000,
["Country_data_Great_Britain"] = 75000,
["Country_data_Greece"] = 58000,
["Country_data_Greenland"] = 2900,
["Country_data_Grenada"] = 5300,
["Country_data_Guadeloupe"] = 2800,
["Country_data_Guam"] = 4700,
["Country_data_Guatemala"] = 13000,
["Country_data_Guernsey"] = 2200,
["Country_data_Guinea"] = 8500,
["Country_data_Guinea-Bissau"] = 5100,
["Country_data_Guyana"] = 7500,
["Country_data_HAI"] = 3200,
["Country_data_HKG"] = 13000,
["Country_data_HON"] = 4400,
["Country_data_HUN"] = 37000,
["Country_data_Haiti"] = 8800,
["Country_data_Honduras"] = 12000,
["Country_data_Hong_Kong"] = 26000,
["Country_data_Hungary"] = 71000,
["Country_data_IDN"] = 5000,
["Country_data_INA"] = 10000,
["Country_data_IND"] = 30000,
["Country_data_IRE"] = 11000,
["Country_data_IRI"] = 5500,
["Country_data_IRL"] = 21000,
["Country_data_IRN"] = 6300,
["Country_data_IRQ"] = 4200,
["Country_data_ISL"] = 8700,
["Country_data_ISR"] = 21000,
["Country_data_ITA"] = 87000,
["Country_data_Iceland"] = 23000,
["Country_data_Idaho"] = 2000,
["Country_data_Illinois"] = 4400,
["Country_data_India"] = 110000,
["Country_data_Indiana"] = 2700,
["Country_data_Indonesia"] = 37000,
["Country_data_Iowa"] = 2900,
["Country_data_Iran"] = 92000,
["Country_data_Iraq"] = 14000,
["Country_data_Ireland"] = 35000,
["Country_data_Isle_of_Man"] = 2900,
["Country_data_Israel"] = 46000,
["Country_data_Italy"] = 146000,
["Country_data_Ivory_Coast"] = 18000,
["Country_data_JAM"] = 9900,
["Country_data_JOR"] = 4100,
["Country_data_JP"] = 8100,
["Country_data_JPN"] = 60000,
["Country_data_Jamaica"] = 21000,
["Country_data_Japan"] = 119000,
["Country_data_Jersey"] = 2600,
["Country_data_Jordan"] = 12000,
["Country_data_KAZ"] = 20000,
["Country_data_KEN"] = 7500,
["Country_data_KGZ"] = 3800,
["Country_data_KOR"] = 31000,
["Country_data_KOS"] = 2400,
["Country_data_KSA"] = 6100,
["Country_data_KUW"] = 4100,
["Country_data_Kazakhstan"] = 34000,
["Country_data_Kenya"] = 20000,
["Country_data_Kingdom_of_France"] = 2100,
["Country_data_Kingdom_of_Great_Britain"] = 4800,
["Country_data_Kingdom_of_Italy"] = 4200,
["Country_data_Kiribati"] = 3000,
["Country_data_Kosovo"] = 8900,
["Country_data_Kuwait"] = 11000,
["Country_data_Kyrgyzstan"] = 9400,
["Country_data_LAT"] = 15000,
["Country_data_LBN"] = 2400,
["Country_data_LIB"] = 2600,
["Country_data_LIE"] = 3200,
["Country_data_LIT"] = 3100,
["Country_data_LTU"] = 12000,
["Country_data_LUX"] = 11000,
["Country_data_LVA"] = 2600,
["Country_data_Laos"] = 7600,
["Country_data_Latvia"] = 32000,
["Country_data_Lebanon"] = 15000,
["Country_data_Lesotho"] = 5200,
["Country_data_Liberia"] = 7300,
["Country_data_Libya"] = 8700,
["Country_data_Liechtenstein"] = 7800,
["Country_data_Lithuania"] = 32000,
["Country_data_Luxembourg"] = 24000,
["Country_data_MAC"] = 2500,
["Country_data_MAD"] = 2000,
["Country_data_MAR"] = 12000,
["Country_data_MAS"] = 11000,
["Country_data_MDA"] = 7800,
["Country_data_MEX"] = 30000,
["Country_data_MGL"] = 3000,
["Country_data_MKD"] = 7600,
["Country_data_MLI"] = 4400,
["Country_data_MLT"] = 5600,
["Country_data_MNE"] = 7900,
["Country_data_MON"] = 3800,
["Country_data_MOZ"] = 2200,
["Country_data_MRI"] = 2100,
["Country_data_MYA"] = 3000,
["Country_data_MYS"] = 3800,
["Country_data_Macau"] = 6400,
["Country_data_Macedonia"] = 4900,
["Country_data_Madagascar"] = 9100,
["Country_data_Malawi"] = 5700,
["Country_data_Malaysia"] = 36000,
["Country_data_Maldives"] = 6200,
["Country_data_Mali"] = 12000,
["Country_data_Malta"] = 17000,
["Country_data_Manitoba"] = 2500,
["Country_data_Marshall_Islands"] = 3700,
["Country_data_Martinique"] = 2900,
["Country_data_Maryland"] = 3000,
["Country_data_Massachusetts"] = 3000,
["Country_data_Mauritania"] = 5900,
["Country_data_Mauritius"] = 8100,
["Country_data_Mexico"] = 67000,
["Country_data_Michigan"] = 4300,
["Country_data_Minnesota"] = 3700,
["Country_data_Missouri"] = 2100,
["Country_data_Moldova"] = 19000,
["Country_data_Monaco"] = 10000,
["Country_data_Mongolia"] = 9900,
["Country_data_Montana"] = 2100,
["Country_data_Montenegro"] = 18000,
["Country_data_Montserrat"] = 2500,
["Country_data_Morocco"] = 28000,
["Country_data_Mozambique"] = 7400,
["Country_data_Myanmar"] = 14000,
["Country_data_NAM"] = 3400,
["Country_data_NED"] = 61000,
["Country_data_NEP"] = 2900,
["Country_data_NGA"] = 8300,
["Country_data_NGR"] = 8100,
["Country_data_NIR"] = 10000,
["Country_data_NLD"] = 6200,
["Country_data_NOR"] = 30000,
["Country_data_NZ"] = 3200,
["Country_data_NZL"] = 32000,
["Country_data_Namibia"] = 9900,
["Country_data_Nauru"] = 2500,
["Country_data_Nazi_Germany"] = 9800,
["Country_data_Nepal"] = 17000,
["Country_data_Netherlands"] = 114000,
["Country_data_Netherlands_Antilles"] = 2300,
["Country_data_New_Brunswick"] = 2500,
["Country_data_New_Caledonia"] = 3400,
["Country_data_New_Jersey"] = 4200,
["Country_data_New_South_Wales"] = 5800,
["Country_data_New_York"] = 4800,
["Country_data_New_York_(state)"] = 6800,
["Country_data_New_Zealand"] = 67000,
["Country_data_Newfoundland_and_Labrador"] = 2300,
["Country_data_Nicaragua"] = 8300,
["Country_data_Niger"] = 6000,
["Country_data_Nigeria"] = 33000,
["Country_data_North_Carolina"] = 3500,
["Country_data_North_Korea"] = 13000,
["Country_data_North_Macedonia"] = 18000,
["Country_data_Northern_Ireland"] = 15000,
["Country_data_Northern_Mariana_Islands"] = 2900,
["Country_data_Norway"] = 73000,
["Country_data_Nova_Scotia"] = 2300,
["Country_data_OMA"] = 2700,
["Country_data_Ohio"] = 4800,
["Country_data_Oman"] = 8800,
["Country_data_Ontario"] = 3800,
["Country_data_Ottoman_Empire"] = 2500,
["Country_data_PAK"] = 8000,
["Country_data_PAN"] = 5800,
["Country_data_PAR"] = 10000,
["Country_data_PER"] = 12000,
["Country_data_PHI"] = 12000,
["Country_data_PHL"] = 2600,
["Country_data_PNG"] = 2700,
["Country_data_POL"] = 50000,
["Country_data_POR"] = 31000,
["Country_data_PRC"] = 2100,
["Country_data_PRK"] = 4600,
["Country_data_PRT"] = 2900,
["Country_data_PUR"] = 7300,
["Country_data_Pakistan"] = 29000,
["Country_data_Palau"] = 3000,
["Country_data_Palestine"] = 6800,
["Country_data_Panama"] = 16000,
["Country_data_Papua_New_Guinea"] = 8000,
["Country_data_Paraguay"] = 21000,
["Country_data_Pennsylvania"] = 3700,
["Country_data_People's_Republic_of_China"] = 3200,
["Country_data_Peru"] = 31000,
["Country_data_Philippines"] = 35000,
["Country_data_Poland"] = 151000,
["Country_data_Portugal"] = 69000,
["Country_data_Prussia"] = 2600,
["Country_data_Puerto_Rico"] = 17000,
["Country_data_QAT"] = 7900,
["Country_data_Qatar"] = 17000,
["Country_data_Quebec"] = 4200,
["Country_data_ROM"] = 13000,
["Country_data_ROU"] = 26000,
["Country_data_RSA"] = 32000,
["Country_data_RUS"] = 63000,
["Country_data_RWA"] = 2000,
["Country_data_Republic_of_China"] = 5600,
["Country_data_Republic_of_Ireland"] = 26000,
["Country_data_Republic_of_the_Congo"] = 7700,
["Country_data_Romania"] = 68000,
["Country_data_Russia"] = 115000,
["Country_data_Russian_Empire"] = 4900,
["Country_data_Rwanda"] = 7700,
["Country_data_SAM"] = 3100,
["Country_data_SCG"] = 3100,
["Country_data_SCO"] = 26000,
["Country_data_SEN"] = 8100,
["Country_data_SER"] = 3600,
["Country_data_SGP"] = 2800,
["Country_data_SIN"] = 7000,
["Country_data_SLO"] = 19000,
["Country_data_SLV"] = 3100,
["Country_data_SMR"] = 3100,
["Country_data_SPA"] = 4800,
["Country_data_SRB"] = 27000,
["Country_data_SRI"] = 4700,
["Country_data_SUI"] = 43000,
["Country_data_SUR"] = 2100,
["Country_data_SVK"] = 29000,
["Country_data_SVN"] = 6800,
["Country_data_SWE"] = 57000,
["Country_data_SWI"] = 4800,
["Country_data_SYR"] = 3600,
["Country_data_Saint_Kitts_and_Nevis"] = 4800,
["Country_data_Saint_Lucia"] = 4900,
["Country_data_Saint_Vincent_and_the_Grenadines"] = 4900,
["Country_data_Samoa"] = 7800,
["Country_data_San_Marino"] = 8500,
["Country_data_Saskatchewan"] = 2900,
["Country_data_Saudi_Arabia"] = 19000,
["Country_data_Scotland"] = 52000,
["Country_data_Senegal"] = 17000,
["Country_data_Serbia"] = 54000,
["Country_data_Serbia_and_Montenegro"] = 5100,
["Country_data_Seychelles"] = 5600,
["Country_data_Sierra_Leone"] = 7500,
["Country_data_Singapore"] = 27000,
["Country_data_Slovakia"] = 51000,
["Country_data_Slovenia"] = 43000,
["Country_data_Solomon_Islands"] = 4700,
["Country_data_Somalia"] = 6200,
["Country_data_South_Africa"] = 70000,
["Country_data_South_Carolina"] = 3300,
["Country_data_South_Korea"] = 67000,
["Country_data_South_Sudan"] = 4300,
["Country_data_Soviet_Union"] = 36000,
["Country_data_Spain"] = 134000,
["Country_data_Sri_Lanka"] = 19000,
["Country_data_Sudan"] = 8100,
["Country_data_Suriname"] = 6500,
["Country_data_Sweden"] = 101000,
["Country_data_Switzerland"] = 83000,
["Country_data_Syria"] = 15000,
["Country_data_São_Tomé_and_Príncipe"] = 3400,
["Country_data_TAN"] = 2500,
["Country_data_TCH"] = 11000,
["Country_data_THA"] = 21000,
["Country_data_TJK"] = 2700,
["Country_data_TKM"] = 2800,
["Country_data_TPE"] = 16000,
["Country_data_TRI"] = 4800,
["Country_data_TUN"] = 11000,
["Country_data_TUR"] = 28000,
["Country_data_Taiwan"] = 13000,
["Country_data_Tajikistan"] = 9100,
["Country_data_Tanzania"] = 13000,
["Country_data_Texas"] = 5300,
["Country_data_Thailand"] = 45000,
["Country_data_Togo"] = 7000,
["Country_data_Tonga"] = 6500,
["Country_data_Trinidad_and_Tobago"] = 14000,
["Country_data_Tunisia"] = 22000,
["Country_data_Turkey"] = 73000,
["Country_data_Turkmenistan"] = 8000,
["Country_data_Turks_and_Caicos_Islands"] = 2700,
["Country_data_Tuvalu"] = 2800,
["Country_data_U.S."] = 2100,
["Country_data_U.S._Virgin_Islands"] = 4800,
["Country_data_UAE"] = 9400,
["Country_data_UGA"] = 4100,
["Country_data_UK"] = 19000,
["Country_data_UKGBI"] = 3100,
["Country_data_UKR"] = 37000,
["Country_data_URS"] = 14000,
["Country_data_URU"] = 15000,
["Country_data_US"] = 5000,
["Country_data_USA"] = 134000,
["Country_data_USSR"] = 4500,
["Country_data_UZB"] = 12000,
["Country_data_Uganda"] = 13000,
["Country_data_Ukraine"] = 74000,
["Country_data_United_Arab_Emirates"] = 20000,
["Country_data_United_Kingdom"] = 89000,
["Country_data_United_Kingdom_of_Great_Britain_and_Ireland"] = 4400,
["Country_data_United_Nations"] = 4000,
["Country_data_United_States"] = 283000,
["Country_data_United_States_of_America"] = 5000,
["Country_data_Uruguay"] = 29000,
["Country_data_Uzbekistan"] = 21000,
["Country_data_VEN"] = 17000,
["Country_data_VIE"] = 6400,
["Country_data_Vanuatu"] = 5100,
["Country_data_Vatican_City"] = 2300,
["Country_data_Venezuela"] = 33000,
["Country_data_Vietnam"] = 23000,
["Country_data_Virginia"] = 2900,
["Country_data_WAL"] = 17000,
["Country_data_Wales"] = 34000,
["Country_data_Washington"] = 3400,
["Country_data_Washington,_D.C."] = 2200,
["Country_data_Washington_(state)"] = 3700,
["Country_data_West_Germany"] = 24000,
["Country_data_West_Indies"] = 2600,
["Country_data_Wisconsin"] = 5200,
["Country_data_YUG"] = 9700,
["Country_data_Yemen"] = 7800,
["Country_data_Yugoslavia"] = 18000,
["Country_data_ZAF"] = 4700,
["Country_data_ZAM"] = 3300,
["Country_data_ZIM"] = 8300,
["Country_data_Zambia"] = 9700,
["Country_data_Zimbabwe"] = 18000,
["Country_flagbio"] = 27000,
["Country_name"] = 23000,
["Country_showdata"] = 6200,
["Country_topics"] = 22000,
["County"] = 7900,
["County_(judet)_of_Romania"] = 3300,
["Course_assignment"] = 4200,
["Course_details"] = 6300,
["Course_instructor"] = 2500,
["Cquote"] = 37000,
["Cr"] = 4300,
["Cr-rt"] = 2100,
["Create_taxonomy/link"] = 107000,
["Cref2"] = 2300,
["Cricinfo"] = 24000,
["Cricketarchive"] = 3000,
["Crime_opentask"] = 49000,
["Croatian_Census_2011"] = 2000,
["Cross"] = 3100,
["Crossreference"] = 2600,
["Crossreference/styles.css"] = 2600,
["Csv"] = 3000,
["Ct"] = 12000,
["Curlie"] = 6700,
["Currency"] = 3600,
["Current_events"] = 8200,
["Current_events/styles.css"] = 8200,
["Currentdate"] = 22000,
["Cvt"] = 104000,
["Cycling_Archives"] = 4300,
["Cycling_archives"] = 2500,
["Cycling_data_LTS"] = 2100,
["Cycling_data_TJV"] = 2000,
["Cycling_team_link"] = 12000,
["Module:CFB_schedule"] = 26000,
["Module:CallAssert"] = 244000,
["Module:CanadaByProvinceCatNav"] = 9800,
["Module:Cat_main"] = 200000,
["Module:Catalog_lookup_link"] = 516000,
["Module:Category_described_in_year"] = 5700,
["Module:Category_described_in_year/conf"] = 5700,
["Module:Category_handler"] = 4440000,
["Module:Category_handler/blacklist"] = 4440000,
["Module:Category_handler/config"] = 4440000,
["Module:Category_handler/data"] = 4440000,
["Module:Category_handler/shared"] = 4440000,
["Module:Category_more_if_exists"] = 41000,
["Module:Category_pair"] = 6100,
["Module:Category_see_also"] = 39000,
["Module:Celestial_object_quadrangle"] = 2400,
["Module:Check_DYK_hook"] = 115000,
["Module:Check_for_clobbered_parameters"] = 1210000,
["Module:Check_for_deprecated_parameters"] = 60000,
["Module:Check_for_unknown_parameters"] = 18500000,
["Module:Check_isxn"] = 481000,
["Module:Check_winner_by_scores"] = 13000,
["Module:Checkuser"] = 76000,
["Module:Chem2"] = 4900,
["Module:Chem2/styles.css"] = 4900,
["Module:Citation/CS1"] = 5600000,
["Module:Citation/CS1/COinS"] = 5600000,
["Module:Citation/CS1/Configuration"] = 5600000,
["Module:Citation/CS1/Date_validation"] = 5600000,
["Module:Citation/CS1/Identifiers"] = 5600000,
["Module:Citation/CS1/Suggestions"] = 25000,
["Module:Citation/CS1/Utilities"] = 5600000,
["Module:Citation/CS1/Whitelist"] = 5600000,
["Module:Citation/CS1/styles.css"] = 5740000,
["Module:Cite_IUCN"] = 58000,
["Module:Cite_Q"] = 44000,
["Module:Cite_tweet"] = 36000,
["Module:Cite_web"] = 40000,
["Module:Clade"] = 7600,
["Module:Class"] = 10300000,
["Module:Class/definition.json"] = 10300000,
["Module:Class/styles.css"] = 9390000,
["Module:Class_mask"] = 10500000,
["Module:Clickable_button_2"] = 961000,
["Module:Collapsible_list"] = 55000,
["Module:College_color"] = 128000,
["Module:College_color/data"] = 128000,
["Module:Color_contrast"] = 501000,
["Module:Color_contrast/colors"] = 503000,
["Module:Commons_link"] = 258000,
["Module:Complex_date"] = 66000,
["Module:Convert"] = 1240000,
["Module:Convert/data"] = 1240000,
["Module:Convert/helper"] = 8700,
["Module:Convert/text"] = 1240000,
["Module:Convert/wikidata"] = 3300,
["Module:Convert/wikidata/data"] = 3300,
["Module:ConvertNumeric"] = 15000,
["Module:Convert_character_width"] = 2800,
["Module:Convert_character_width/data"] = 2800,
["Module:Coordinates"] = 1340000,
["Module:Coordinates/styles.css"] = 1340000,
["Module:Copied"] = 19000,
["Module:Count_banners"] = 48000,
["Module:CountryAdjectiveDemonym"] = 45000,
["Module:CountryAdjectiveDemonym/Adjectives"] = 45000,
["Module:CountryAdjectiveDemonym/Demonyms"] = 45000,
["Module:CountryAdjectiveDemonym/The"] = 45000,
["Module:CountryData"] = 143000,
["Module:CountryData/cacheA"] = 12000,
["Module:CountryData/cacheB"] = 8300,
["Module:CountryData/cacheC"] = 12000,
["Module:CountryData/cacheD"] = 4500,
["Module:CountryData/cacheE"] = 2800,
["Module:CountryData/cacheF"] = 2600,
["Module:CountryData/cacheG"] = 2700,
["Module:CountryData/summary"] = 143000,
["Module:Country_adjective"] = 4300,
["Module:Country_alias"] = 52000,
["Module:Country_alias/data"] = 52000,
["Module:Currency"] = 3600,
["Module:Currency/Presentation"] = 3600,
}
8080951a72a40836d2bdd7572ba603f2581a90c8
Module:Transclusion count/data/I
828
78
160
2023-09-03T10:45:28Z
[[w>Ahechtbot
0
[[Wikipedia:BOT|Bot]]: Updated page.
Scribunto
text/plain
return {
["IAAF_name"] = 2200,
["IAST"] = 6300,
["IBDB_name"] = 9100,
["ICD10"] = 4700,
["ICD9"] = 4400,
["ICS"] = 2900,
["IDN"] = 3400,
["IMDb_episode"] = 10000,
["IMDb_episodes"] = 2600,
["IMDb_name"] = 153000,
["IMDb_title"] = 189000,
["IMO_Number"] = 4100,
["IMSLP"] = 8200,
["INA"] = 2100,
["IND"] = 7500,
["INR"] = 6500,
["INRConvert"] = 5600,
["INRConvert/CurrentRate"] = 5600,
["INRConvert/USD"] = 5600,
["INRConvert/out"] = 5600,
["IOC_profile"] = 5200,
["IP"] = 2600,
["IPA"] = 142000,
["IPA-all"] = 3600,
["IPA-de"] = 8200,
["IPA-es"] = 8100,
["IPA-fr"] = 44000,
["IPA-it"] = 6000,
["IPA-nl"] = 3800,
["IPA-pl"] = 4100,
["IPA-pt"] = 3700,
["IPA-ru"] = 2700,
["IPA-sh"] = 2700,
["IPA-sl"] = 6900,
["IPA-th"] = 3000,
["IPA_audio_link"] = 20000,
["IPA_link"] = 3500,
["IPAc-cmn"] = 2600,
["IPAc-en"] = 48000,
["IPAc-pl"] = 52000,
["IPC_athlete"] = 2800,
["IPSummary"] = 78000,
["IP_summary"] = 78000,
["IPtalk"] = 18000,
["IPuser"] = 7000,
["IPvandal"] = 2900,
["IRC"] = 7300,
["IRI"] = 2200,
["IRL"] = 5500,
["IRN"] = 3600,
["ISBN"] = 462000,
["ISBN?"] = 2100,
["ISBNT"] = 39000,
["ISBN_missing"] = 2500,
["ISFDB_name"] = 4100,
["ISFDB_title"] = 4600,
["ISL"] = 2100,
["ISO_15924/script-example-character"] = 2800,
["ISO_15924/wp-article"] = 2800,
["ISO_15924/wp-article/format"] = 2800,
["ISO_15924/wp-article/label"] = 2700,
["ISO_3166_code"] = 516000,
["ISO_3166_name"] = 16000,
["ISO_639_name"] = 8000,
["ISP"] = 5300,
["ISR"] = 4800,
["ISSN"] = 12000,
["ISSN_link"] = 30000,
["ISTAT"] = 8100,
["ISU_figure_skater"] = 2500,
["ITA"] = 17000,
["ITF"] = 6200,
["ITF_profile"] = 9000,
["ITIS"] = 4400,
["ITN_talk"] = 10000,
["ITN_talk/date"] = 10000,
["IUCN_banner"] = 15000,
["I_sup"] = 4600,
["Iaaf_name"] = 7400,
["Ice_hockey"] = 19000,
["Ice_hockey_stats"] = 16000,
["Icehockeystats"] = 12000,
["Icon"] = 580000,
["If"] = 270000,
["If_all"] = 6400,
["If_between"] = 3700,
["If_both"] = 197000,
["If_empty"] = 3640000,
["If_first_display_both"] = 73000,
["If_in_page"] = 9800,
["If_last_display_both"] = 30000,
["If_preview"] = 58000,
["If_then_show"] = 286000,
["Ifempty"] = 4000,
["Ifeq"] = 16000,
["Iferror_then_show"] = 3200,
["Ifexist_not_redirect"] = 1290000,
["Ifnotempty"] = 14000,
["Ifnumber"] = 35000,
["Ifsubst"] = 442000,
["Ih"] = 7500,
["Ill"] = 115000,
["Illm"] = 6700,
["Image_frame"] = 4900,
["Image_label"] = 4500,
["Image_label_begin"] = 3900,
["Image_label_end"] = 3800,
["Image_label_small"] = 2600,
["Image_needed"] = 4500,
["Image_other"] = 273000,
["Image_requested"] = 167000,
["Image_requested/Category_helper"] = 158000,
["Imbox"] = 915000,
["Imdb_name"] = 5400,
["Imdb_title"] = 4200,
["Import_style"] = 11000,
["Import_style/inputbox.css"] = 11000,
["Importance"] = 5620000,
["Importance/colour"] = 5640000,
["Importance_mask"] = 10400000,
["Improve_categories"] = 7300,
["Improve_documentation"] = 2300,
["In_class"] = 5900,
["In_lang"] = 354000,
["In_progress"] = 3200,
["In_string"] = 74000,
["In_title"] = 19000,
["Inactive_WikiProject_banner"] = 204000,
["Inactive_userpage_blanked"] = 4900,
["Include-USGov"] = 29000,
["Incomplete_list"] = 23000,
["Inconclusive"] = 2100,
["Increase"] = 43000,
["Incumbent_pope"] = 4300,
["Indent"] = 4300,
["IndexFungorum"] = 2200,
["Indian_English"] = 4300,
["Indian_Rupee"] = 10000,
["Indian_railway_code"] = 3200,
["Inflation"] = 19000,
["Inflation-fn"] = 5400,
["Inflation-year"] = 4500,
["Inflation/IN/startyear"] = 5600,
["Inflation/UK"] = 4300,
["Inflation/UK/dataset"] = 4300,
["Inflation/UK/startyear"] = 4300,
["Inflation/US"] = 12000,
["Inflation/US/dataset"] = 12000,
["Inflation/US/startyear"] = 12000,
["Inflation/fn"] = 6200,
["Inflation/year"] = 24000,
["Info"] = 7300,
["Infobox"] = 3220000,
["Infobox/Columns"] = 2400,
["Infobox/mobileviewfix.css"] = 146000,
["Infobox3cols"] = 17000,
["Infobox_AFL_biography"] = 14000,
["Infobox_Aircraft_Begin"] = 5300,
["Infobox_Aircraft_Type"] = 4700,
["Infobox_Athletics_Championships"] = 2700,
["Infobox_Australian_place"] = 15000,
["Infobox_CFL_biography"] = 2200,
["Infobox_COA_wide"] = 3200,
["Infobox_Canada_electoral_district"] = 2500,
["Infobox_Canadian_Football_League_biography"] = 5700,
["Infobox_Canadian_Football_League_biography/position"] = 5600,
["Infobox_Chinese"] = 20000,
["Infobox_Chinese/Chinese"] = 2700,
["Infobox_Chinese/Footer"] = 8700,
["Infobox_Chinese/Header"] = 8700,
["Infobox_Chinese/Korean"] = 17000,
["Infobox_Christian_leader"] = 18000,
["Infobox_Election"] = 2100,
["Infobox_French_commune"] = 38000,
["Infobox_GAA_player"] = 2700,
["Infobox_Gaelic_games_player"] = 5000,
["Infobox_German_location"] = 13000,
["Infobox_German_place"] = 14000,
["Infobox_Grand_Prix_race_report"] = 2000,
["Infobox_Greece_place"] = 2800,
["Infobox_Greek_Dimos"] = 2800,
["Infobox_Hindu_temple"] = 2400,
["Infobox_Indian_constituency"] = 4600,
["Infobox_Indian_constituency/defaultdata"] = 4600,
["Infobox_Italian_comune"] = 8100,
["Infobox_Korean_name"] = 15000,
["Infobox_Korean_name/categories"] = 15000,
["Infobox_MLB_yearly"] = 3100,
["Infobox_NASCAR_race_report"] = 2200,
["Infobox_NCAA_team_season"] = 18000,
["Infobox_NFL_biography"] = 28000,
["Infobox_NFL_player"] = 7700,
["Infobox_NFL_team_season"] = 3900,
["Infobox_NRHP"] = 72000,
["Infobox_NRHP/conv"] = 18000,
["Infobox_NRHP/locmapin2region"] = 66000,
["Infobox_Officeholder"] = 4800,
["Infobox_Olympic_event"] = 7300,
["Infobox_Olympic_event/games_text"] = 7300,
["Infobox_Paralympic_event"] = 2600,
["Infobox_Paralympic_event/games_text"] = 2600,
["Infobox_Politician"] = 2200,
["Infobox_Romanian_subdivision"] = 3200,
["Infobox_Russian_district"] = 2000,
["Infobox_Russian_inhabited_locality"] = 4400,
["Infobox_SCOTUS_case"] = 3700,
["Infobox_Site_of_Special_Scientific_Interest"] = 2000,
["Infobox_Swiss_town"] = 2800,
["Infobox_Switzerland_municipality"] = 2900,
["Infobox_Turkey_place"] = 18000,
["Infobox_U.S._county"] = 3000,
["Infobox_U.S._county/district"] = 3000,
["Infobox_UK_constituency"] = 2100,
["Infobox_UK_constituency/year"] = 2100,
["Infobox_UK_legislation"] = 3200,
["Infobox_UK_place"] = 26000,
["Infobox_UK_place/NoDialCode"] = 8000,
["Infobox_UK_place/NoPostCode"] = 3100,
["Infobox_UK_place/area"] = 2400,
["Infobox_UK_place/dist"] = 2500,
["Infobox_UK_place/local"] = 26000,
["Infobox_UK_place/styles.css"] = 26000,
["Infobox_UN_resolution"] = 2300,
["Infobox_US_Supreme_Court_case"] = 3800,
["Infobox_US_Supreme_Court_case/courts"] = 3800,
["Infobox_Wikipedia_user"] = 9700,
["Infobox_YouTube_personality"] = 2600,
["Infobox_YouTube_personality/styles.css"] = 2600,
["Infobox_academic"] = 14000,
["Infobox_aircraft_begin"] = 14000,
["Infobox_aircraft_occurrence"] = 2300,
["Infobox_aircraft_type"] = 12000,
["Infobox_airline"] = 4600,
["Infobox_airport"] = 15000,
["Infobox_airport/datatable"] = 15000,
["Infobox_album"] = 162000,
["Infobox_album/color"] = 191000,
["Infobox_album/link"] = 162000,
["Infobox_anatomy"] = 4500,
["Infobox_ancient_site"] = 5400,
["Infobox_animanga/Footer"] = 6800,
["Infobox_animanga/Header"] = 6800,
["Infobox_animanga/Print"] = 5400,
["Infobox_animanga/Video"] = 4700,
["Infobox_architect"] = 3700,
["Infobox_artist"] = 28000,
["Infobox_artist_discography"] = 5900,
["Infobox_artwork"] = 11000,
["Infobox_athlete"] = 2900,
["Infobox_automobile"] = 8400,
["Infobox_award"] = 13000,
["Infobox_badminton_player"] = 3200,
["Infobox_baseball_biography"] = 28000,
["Infobox_baseball_biography/style"] = 28000,
["Infobox_baseball_biography/styles.css"] = 28000,
["Infobox_basketball_biography"] = 21000,
["Infobox_basketball_biography/style"] = 21000,
["Infobox_basketball_club"] = 3000,
["Infobox_beauty_pageant"] = 2400,
["Infobox_bilateral_relations"] = 4400,
["Infobox_body_of_water"] = 18000,
["Infobox_book"] = 52000,
["Infobox_boxer"] = 5700,
["Infobox_bridge"] = 6000,
["Infobox_building"] = 27000,
["Infobox_character"] = 7600,
["Infobox_chess_biography"] = 3800,
["Infobox_chess_player"] = 3100,
["Infobox_church"] = 15000,
["Infobox_church/denomination"] = 15000,
["Infobox_church/font_color"] = 15000,
["Infobox_civil_conflict"] = 2400,
["Infobox_civilian_attack"] = 5500,
["Infobox_college_coach"] = 12000,
["Infobox_college_football_game"] = 2100,
["Infobox_college_sports_team_season"] = 39000,
["Infobox_college_sports_team_season/link"] = 39000,
["Infobox_college_sports_team_season/name"] = 39000,
["Infobox_college_sports_team_season/succession"] = 39000,
["Infobox_college_sports_team_season/team"] = 39000,
["Infobox_comic_book_title"] = 2900,
["Infobox_comics_character"] = 3500,
["Infobox_comics_creator"] = 3500,
["Infobox_comics_creator/styles.css"] = 3500,
["Infobox_company"] = 83000,
["Infobox_computing_device"] = 2300,
["Infobox_concert"] = 3300,
["Infobox_constituency"] = 5300,
["Infobox_country"] = 6400,
["Infobox_country/formernext"] = 6000,
["Infobox_country/imagetable"] = 5200,
["Infobox_country/multirow"] = 8200,
["Infobox_country/status_text"] = 2800,
["Infobox_country/styles.css"] = 6400,
["Infobox_country_at_games"] = 15000,
["Infobox_country_at_games/core"] = 15000,
["Infobox_country_at_games/see_also"] = 12000,
["Infobox_court_case"] = 4600,
["Infobox_court_case/images"] = 2400,
["Infobox_cricket_tournament"] = 2300,
["Infobox_cricketer"] = 32000,
["Infobox_cricketer/career"] = 32000,
["Infobox_cricketer/national_side"] = 7500,
["Infobox_criminal"] = 6300,
["Infobox_curler"] = 2600,
["Infobox_cycling_race_report"] = 4500,
["Infobox_cyclist"] = 16000,
["Infobox_dam"] = 5700,
["Infobox_designation_list"] = 19000,
["Infobox_designation_list/entry"] = 17000,
["Infobox_dim"] = 6900,
["Infobox_dim/core"] = 6900,
["Infobox_diocese"] = 3800,
["Infobox_drug"] = 9700,
["Infobox_drug/chemical_formula"] = 9700,
["Infobox_drug/data_page_link"] = 9700,
["Infobox_drug/formatATC"] = 9600,
["Infobox_drug/formatCASnumber"] = 9700,
["Infobox_drug/formatChEBI"] = 9700,
["Infobox_drug/formatChEMBL"] = 9700,
["Infobox_drug/formatChemDBNIAID"] = 9700,
["Infobox_drug/formatChemSpider"] = 9700,
["Infobox_drug/formatCompTox"] = 9700,
["Infobox_drug/formatDrugBank"] = 9700,
["Infobox_drug/formatIUPHARBPS"] = 9700,
["Infobox_drug/formatJmol"] = 9700,
["Infobox_drug/formatKEGG"] = 9700,
["Infobox_drug/formatPDBligand"] = 9000,
["Infobox_drug/formatPubChemCID"] = 9700,
["Infobox_drug/formatPubChemSID"] = 9700,
["Infobox_drug/formatUNII"] = 9700,
["Infobox_drug/legal_status"] = 9800,
["Infobox_drug/licence"] = 9700,
["Infobox_drug/maintenance_categories"] = 9700,
["Infobox_drug/non-ref-space"] = 4200,
["Infobox_drug/pregnancy_category"] = 9700,
["Infobox_drug/title"] = 9700,
["Infobox_election"] = 30000,
["Infobox_election/row"] = 30000,
["Infobox_election/shortname"] = 28000,
["Infobox_enzyme"] = 5100,
["Infobox_ethnic_group"] = 7300,
["Infobox_event"] = 5400,
["Infobox_family"] = 2100,
["Infobox_figure_skater"] = 4200,
["Infobox_film"] = 156000,
["Infobox_film/short_description"] = 152000,
["Infobox_film_awards"] = 2600,
["Infobox_film_awards/link"] = 2600,
["Infobox_film_awards/style"] = 2600,
["Infobox_food"] = 6800,
["Infobox_football_biography"] = 206000,
["Infobox_football_club"] = 27000,
["Infobox_football_club_season"] = 20000,
["Infobox_football_league"] = 2600,
["Infobox_football_league_season"] = 19000,
["Infobox_football_match"] = 5900,
["Infobox_football_tournament_season"] = 8000,
["Infobox_former_subdivision"] = 3300,
["Infobox_former_subdivision/styles.css"] = 3300,
["Infobox_galaxy"] = 2100,
["Infobox_game"] = 2500,
["Infobox_game_score"] = 3400,
["Infobox_gene"] = 13000,
["Infobox_given_name"] = 4000,
["Infobox_golfer"] = 4400,
["Infobox_golfer/highest_ranking"] = 4400,
["Infobox_government_agency"] = 10000,
["Infobox_government_cabinet"] = 2500,
["Infobox_gridiron_football_person"] = 2400,
["Infobox_gridiron_football_person/position"] = 5600,
["Infobox_gymnast"] = 3400,
["Infobox_handball_biography"] = 4900,
["Infobox_historic_site"] = 11000,
["Infobox_horseraces"] = 2600,
["Infobox_hospital"] = 6300,
["Infobox_hospital/care_system"] = 6300,
["Infobox_hospital/lists"] = 6300,
["Infobox_ice_hockey_biography"] = 20000,
["Infobox_ice_hockey_player"] = 19000,
["Infobox_ice_hockey_team"] = 3000,
["Infobox_ice_hockey_team_season"] = 2000,
["Infobox_international_football_competition"] = 5700,
["Infobox_islands"] = 8800,
["Infobox_islands/area"] = 9200,
["Infobox_islands/density"] = 9200,
["Infobox_islands/length"] = 8800,
["Infobox_islands/styles.css"] = 8800,
["Infobox_journal"] = 9700,
["Infobox_journal/Abbreviation_search"] = 9600,
["Infobox_journal/Bluebook_check"] = 9400,
["Infobox_journal/Former_check"] = 9400,
["Infobox_journal/ISO_4_check"] = 9400,
["Infobox_journal/ISSN-eISSN"] = 9500,
["Infobox_journal/Indexing_search"] = 9500,
["Infobox_journal/MathSciNet_check"] = 9400,
["Infobox_journal/NLM_check"] = 9400,
["Infobox_journal/frequency"] = 8600,
["Infobox_lake"] = 4400,
["Infobox_language"] = 9500,
["Infobox_language/family-color"] = 11000,
["Infobox_language/genetic"] = 6500,
["Infobox_language/linguistlist"] = 9500,
["Infobox_language/ref"] = 7100,
["Infobox_legislature"] = 3600,
["Infobox_library"] = 2100,
["Infobox_lighthouse"] = 2600,
["Infobox_lighthouse/light"] = 2600,
["Infobox_locomotive"] = 4900,
["Infobox_magazine"] = 7600,
["Infobox_manner_of_address"] = 3300,
["Infobox_mapframe"] = 80000,
["Infobox_martial_artist"] = 5700,
["Infobox_martial_artist/record"] = 5700,
["Infobox_medal_templates"] = 422000,
["Infobox_medical_condition"] = 10000,
["Infobox_medical_condition_(new)"] = 8200,
["Infobox_medical_details"] = 2000,
["Infobox_military_conflict"] = 22000,
["Infobox_military_installation"] = 9700,
["Infobox_military_person"] = 45000,
["Infobox_military_unit"] = 26000,
["Infobox_mine"] = 2100,
["Infobox_model"] = 2300,
["Infobox_monument"] = 2000,
["Infobox_mountain"] = 28000,
["Infobox_multi-sport_competition_event"] = 2400,
["Infobox_museum"] = 10000,
["Infobox_musical_artist"] = 121000,
["Infobox_musical_artist/color"] = 121000,
["Infobox_musical_artist/hCard_class"] = 312000,
["Infobox_musical_composition"] = 2900,
["Infobox_name"] = 7400,
["Infobox_name_module"] = 6900,
["Infobox_newspaper"] = 9700,
["Infobox_nobility"] = 2500,
["Infobox_noble"] = 7300,
["Infobox_officeholder"] = 217000,
["Infobox_officeholder/office"] = 222000,
["Infobox_official_post"] = 8000,
["Infobox_organization"] = 36000,
["Infobox_pageant_titleholder"] = 2900,
["Infobox_park"] = 7400,
["Infobox_person"] = 472000,
["Infobox_person/Wikidata"] = 4800,
["Infobox_person/height"] = 102000,
["Infobox_person/length"] = 7100,
["Infobox_person/weight"] = 66000,
["Infobox_philosopher"] = 3400,
["Infobox_planet"] = 4700,
["Infobox_play"] = 3900,
["Infobox_political_party"] = 14000,
["Infobox_power_station"] = 3000,
["Infobox_prepared_food"] = 3100,
["Infobox_professional_wrestler"] = 4300,
["Infobox_professional_wrestling_event"] = 2700,
["Infobox_protected_area"] = 14000,
["Infobox_protein_family"] = 2100,
["Infobox_publisher"] = 2400,
["Infobox_racehorse"] = 5500,
["Infobox_racing_driver"] = 3800,
["Infobox_racing_driver_series_section"] = 2000,
["Infobox_radio_station"] = 22000,
["Infobox_rail"] = 2900,
["Infobox_rail_line"] = 7300,
["Infobox_rail_service"] = 2900,
["Infobox_rail_service/doc"] = 2900,
["Infobox_reality_competition_season"] = 3500,
["Infobox_record_label"] = 4000,
["Infobox_recurring_event"] = 6400,
["Infobox_religious_biography"] = 5200,
["Infobox_religious_building"] = 12000,
["Infobox_religious_building/color"] = 17000,
["Infobox_restaurant"] = 2800,
["Infobox_river"] = 30000,
["Infobox_river/calcunit"] = 30000,
["Infobox_river/discharge"] = 30000,
["Infobox_river/row-style"] = 30000,
["Infobox_river/source"] = 30000,
["Infobox_road"] = 24000,
["Infobox_road/meta/mask/category"] = 24000,
["Infobox_road/meta/mask/country"] = 24000,
["Infobox_road/styles.css"] = 25000,
["Infobox_road_small"] = 2300,
["Infobox_rockunit"] = 6400,
["Infobox_royalty"] = 22000,
["Infobox_royalty/short_description"] = 13000,
["Infobox_rugby_biography"] = 16000,
["Infobox_rugby_biography/correct_date"] = 16000,
["Infobox_rugby_biography/depcheck"] = 15000,
["Infobox_rugby_league_biography"] = 9900,
["Infobox_rugby_league_biography/PLAYER"] = 9800,
["Infobox_rugby_team"] = 2600,
["Infobox_sailboat_specifications"] = 2300,
["Infobox_saint"] = 5000,
["Infobox_school"] = 38000,
["Infobox_school/short_description"] = 38000,
["Infobox_school_district"] = 5600,
["Infobox_school_district/styles.css"] = 5600,
["Infobox_scientist"] = 48000,
["Infobox_service_record"] = 2600,
["Infobox_settlement"] = 560000,
["Infobox_settlement/areadisp"] = 234000,
["Infobox_settlement/columns"] = 94000,
["Infobox_settlement/columns/styles.css"] = 94000,
["Infobox_settlement/densdisp"] = 435000,
["Infobox_settlement/impus"] = 81000,
["Infobox_settlement/lengthdisp"] = 168000,
["Infobox_settlement/link"] = 94000,
["Infobox_settlement/metric"] = 208000,
["Infobox_settlement/pref"] = 289000,
["Infobox_settlement/styles.css"] = 560000,
["Infobox_ship_begin"] = 41000,
["Infobox_ship_career"] = 37000,
["Infobox_ship_characteristics"] = 41000,
["Infobox_ship_class_overview"] = 4100,
["Infobox_ship_image"] = 40000,
["Infobox_shopping_mall"] = 3400,
["Infobox_short_story"] = 2400,
["Infobox_skier"] = 2500,
["Infobox_soap_character"] = 2900,
["Infobox_software"] = 14000,
["Infobox_software/simple"] = 14000,
["Infobox_song"] = 75000,
["Infobox_song/color"] = 75000,
["Infobox_song/link"] = 75000,
["Infobox_spaceflight"] = 3500,
["Infobox_spaceflight/styles.css"] = 3500,
["Infobox_sport_event"] = 2100,
["Infobox_sports_competition_event"] = 17000,
["Infobox_sports_competition_event/medalrow"] = 11000,
["Infobox_sports_league"] = 5000,
["Infobox_sports_season"] = 5400,
["Infobox_sports_team"] = 2200,
["Infobox_sportsperson"] = 106000,
["Infobox_stadium"] = 3500,
["Infobox_station"] = 55000,
["Infobox_station/doc"] = 55000,
["Infobox_station/services"] = 55000,
["Infobox_station/styles.css"] = 55000,
["Infobox_street"] = 3400,
["Infobox_swimmer"] = 9400,
["Infobox_television"] = 57000,
["Infobox_television/Short_description"] = 54000,
["Infobox_television_channel"] = 6200,
["Infobox_television_episode"] = 12000,
["Infobox_television_episode/styles.css"] = 12000,
["Infobox_television_season"] = 9400,
["Infobox_television_station"] = 3700,
["Infobox_tennis_biography"] = 10000,
["Infobox_tennis_event"] = 2500,
["Infobox_tennis_tournament_event"] = 19000,
["Infobox_tennis_tournament_year"] = 9100,
["Infobox_tennis_tournament_year/color"] = 28000,
["Infobox_tennis_tournament_year/footer"] = 28000,
["Infobox_train"] = 2300,
["Infobox_union"] = 2100,
["Infobox_university"] = 26000,
["Infobox_user"] = 2600,
["Infobox_venue"] = 18000,
["Infobox_video_game"] = 28000,
["Infobox_video_game/styles.css"] = 28000,
["Infobox_volleyball_biography"] = 5300,
["Infobox_weapon"] = 7300,
["Infobox_website"] = 7700,
["Infobox_writer"] = 38000,
["Information"] = 101000,
["Information/styles.css"] = 101000,
["Inprogress"] = 2400,
["Input_link"] = 32000,
["Instagram"] = 11000,
["Interlanguage_link"] = 153000,
["Interlanguage_link_multi"] = 19000,
["Internet_Archive_author"] = 19000,
["Internet_Archive_film"] = 2500,
["Intitle"] = 12000,
["Invalid_SVG"] = 3600,
["Invalid_SVG/styles.css"] = 3600,
["Iptalk"] = 17000,
["IranCensus2006"] = 47000,
["IranNCSGN"] = 3200,
["Iran_Census_2006"] = 47000,
["Irc"] = 2100,
["Irish_place_name"] = 2600,
["IsIPAddress"] = 39000,
["IsValidPageName"] = 141000,
["Is_country_in_Central_America"] = 13000,
["Is_country_in_the_Caribbean"] = 14000,
["Is_interwiki_link"] = 6100,
["Is_italic_taxon"] = 475000,
["Is_redirect"] = 27000,
["Isbn"] = 7500,
["Isfdb_name"] = 3700,
["Isfdb_title"] = 4500,
["Isnumeric"] = 206000,
["Iso2continent"] = 35000,
["Iso2country"] = 23000,
["Iso2country/article"] = 22000,
["Iso2country/data"] = 23000,
["Iso2nationality"] = 225000,
["Issubst"] = 72000,
["Isu_name"] = 2200,
["Italic_dab2"] = 5200,
["Italic_title"] = 284000,
["Italic_title_prefixed"] = 8700,
["Italics_colon"] = 3700,
["Italictitle"] = 4300,
["Ivm"] = 5700,
["Ivm/styles.css"] = 5700,
["Ivmbox"] = 123000,
["Ivory_messagebox"] = 141000,
["Module:I18n/complex_date"] = 66000,
["Module:IP"] = 131000,
["Module:IPA_symbol"] = 4800,
["Module:IPA_symbol/data"] = 4800,
["Module:IPAc-en"] = 48000,
["Module:IPAc-en/data"] = 48000,
["Module:IPAc-en/phonemes"] = 48000,
["Module:IPAc-en/pronunciation"] = 48000,
["Module:IPAddress"] = 188000,
["Module:ISO_3166"] = 1030000,
["Module:ISO_3166/data/AT"] = 2500,
["Module:ISO_3166/data/BA"] = 3400,
["Module:ISO_3166/data/CA"] = 2500,
["Module:ISO_3166/data/CN"] = 2100,
["Module:ISO_3166/data/DE"] = 14000,
["Module:ISO_3166/data/ES"] = 3600,
["Module:ISO_3166/data/FR"] = 38000,
["Module:ISO_3166/data/GB"] = 6400,
["Module:ISO_3166/data/GR"] = 3100,
["Module:ISO_3166/data/IN"] = 29000,
["Module:ISO_3166/data/IR"] = 7300,
["Module:ISO_3166/data/National"] = 1030000,
["Module:ISO_3166/data/PL"] = 6600,
["Module:ISO_3166/data/RS"] = 3200,
["Module:ISO_3166/data/RU"] = 25000,
["Module:ISO_3166/data/US"] = 85000,
["Module:ISO_639_name"] = 20000,
["Module:ISOdate"] = 66000,
["Module:Icon"] = 580000,
["Module:Icon/data"] = 580000,
["Module:If_empty"] = 3640000,
["Module:If_in_page"] = 9800,
["Module:If_preview"] = 288000,
["Module:If_preview/configuration"] = 288000,
["Module:If_preview/styles.css"] = 288000,
["Module:Import_style"] = 11000,
["Module:In_lang"] = 354000,
["Module:Indent"] = 4300,
["Module:Infobox"] = 4090000,
["Module:Infobox/dates"] = 69000,
["Module:Infobox/styles.css"] = 4350000,
["Module:Infobox3cols"] = 296000,
["Module:InfoboxImage"] = 4400000,
["Module:Infobox_body_of_water_tracking"] = 18000,
["Module:Infobox_cyclist_tracking"] = 16000,
["Module:Infobox_gene"] = 13000,
["Module:Infobox_mapframe"] = 402000,
["Module:Infobox_military_conflict"] = 22000,
["Module:Infobox_military_conflict/styles.css"] = 22000,
["Module:Infobox_multi-lingual_name"] = 20000,
["Module:Infobox_multi-lingual_name/data"] = 20000,
["Module:Infobox_power_station"] = 3000,
["Module:Infobox_road"] = 25000,
["Module:Infobox_road/browselinks"] = 25000,
["Module:Infobox_road/errors"] = 24000,
["Module:Infobox_road/length"] = 25000,
["Module:Infobox_road/locations"] = 24000,
["Module:Infobox_road/map"] = 24000,
["Module:Infobox_road/route"] = 25000,
["Module:Infobox_road/sections"] = 24000,
["Module:Infobox_television"] = 57000,
["Module:Infobox_television_disambiguation_check"] = 63000,
["Module:Infobox_television_episode"] = 12000,
["Module:Infobox_television_season_disambiguation_check"] = 8900,
["Module:Infobox_television_season_name"] = 9400,
["Module:Internet_Archive"] = 19000,
["Module:IrelandByCountyCatNav"] = 3300,
["Module:Is_infobox_in_lead"] = 377000,
["Module:Is_instance"] = 335000,
["Module:Italic_title"] = 1110000,
["Module:Italic_title2"] = 5200,
}
2ac452f2245e0d8f8d0cc1194596e0d536431539
Module:Transclusion count/data/P
828
1026
2109
2023-09-03T10:46:38Z
[[]]>Ahechtbot
0
[[Wikipedia:BOT|Bot]]: Updated page.
Scribunto
text/plain
return {
["P"] = 6100,
["P-phrases"] = 3300,
["P."] = 3600,
["P1"] = 142000,
["P2"] = 291000,
["PAGENAMEBASE"] = 1560000,
["PAGENAMEU"] = 76000,
["PAK"] = 2900,
["PD-US"] = 11000,
["PD-US-1923"] = 2300,
["PD-US-1923-abroad"] = 5900,
["PD-US-expired"] = 4400,
["PD-US-expired-abroad"] = 7000,
["PD-art"] = 3500,
["PD-ineligible-USonly"] = 5000,
["PD-notice"] = 21000,
["PD-old-100"] = 5300,
["PD-self"] = 37000,
["PD-textlogo"] = 6500,
["PDB_Gallery"] = 2900,
["PDanube"] = 3200,
["PER"] = 3100,
["PHI"] = 2500,
["PHL"] = 3500,
["PLANTS"] = 4000,
["PM20"] = 3300,
["PMID"] = 7000,
["POL"] = 53000,
["POR"] = 4900,
["POTD_default"] = 11000,
["POTD_image"] = 2600,
["POTD_navigation"] = 6800,
["POTDlink"] = 7200,
["POV"] = 7300,
["PR/header"] = 3100,
["PR/heading"] = 7200,
["PRT"] = 5700,
["PR_link"] = 102000,
["PS"] = 2800,
["Pad"] = 54000,
["Page"] = 4100,
["Page_name_sub"] = 45000,
["Page_needed"] = 18000,
["Page_tabs"] = 3500,
["Page_tabs/styles.css"] = 3500,
["Page_views"] = 2200,
["Pagelinks"] = 42000,
["Pagelist"] = 4800,
["Pagetype"] = 13900000,
["Paid"] = 9200,
["Para"] = 2630000,
["Parabr"] = 2700,
["Paragraph_break"] = 1190000,
["Param_value"] = 135000,
["Parameter_names_example"] = 2400,
["ParmPart"] = 13000,
["Partial"] = 2000,
["Partial_minor_planet_designation"] = 5800,
["Partly_done"] = 2600,
["Party_color"] = 72000,
["Party_color_cell"] = 4300,
["Party_name_with_color"] = 7500,
["Party_name_with_colour"] = 3200,
["Party_shading/Democratic"] = 15000,
["Party_shading/Independent"] = 2200,
["Party_shading/Republican"] = 14000,
["Party_stripe"] = 18000,
["Pass"] = 2700,
["Pb"] = 1170000,
["Pbox"] = 3100,
["Pbox/1"] = 3100,
["Peacock"] = 3400,
["Pedigree"] = 3900,
["Peer_review/heading"] = 10000,
["Peer_review_tools"] = 8300,
["Pending"] = 3200,
["Pengoal"] = 9400,
["Penmiss"] = 11000,
["Percentage"] = 12000,
["Performance_key"] = 2500,
["Period_color"] = 23000,
["Period_end"] = 21000,
["Period_id"] = 23000,
["Period_start"] = 23000,
["PeruTasks"] = 16000,
["Phab"] = 5700,
["Phanerozoic_220px"] = 21000,
["PharmNavFootnote"] = 5200,
["Philippine_name"] = 2800,
["Philosophy"] = 3600,
["Photo_montage"] = 4500,
["Photo_requested"] = 103000,
["Photograph_requested"] = 2900,
["Photomontage"] = 4400,
["Physics"] = 9300,
["Picture_of_the_day"] = 7200,
["Pie_chart"] = 5800,
["Pie_chart/slice"] = 5800,
["Ping"] = 227000,
["Pipe"] = 116000,
["Place_name_disambiguation"] = 40000,
["Plain_link"] = 162000,
["Plain_list"] = 13000,
["Plain_text"] = 40000,
["Plainlink"] = 80000,
["Plainlist"] = 345000,
["Plainlist/styles.css"] = 2900000,
["Player"] = 3600,
["Player2"] = 2600,
["Please_check_ISSN"] = 14000,
["Plural"] = 104000,
["Pluralize_from_text"] = 1500000,
["Poem_quote"] = 2900,
["Poemquote"] = 2300,
["Politician_icon"] = 33000,
["Politician_icon2"] = 33000,
["Politics_sidebar_below"] = 19000,
["Politics_sidebar_title"] = 19000,
["Poll_top"] = 2000,
["Polluted_category"] = 2200,
["Polparty"] = 27000,
["Pop_density"] = 9300,
["Population_Germany"] = 14000,
["Portal"] = 9290000,
["Portal-Class"] = 7600,
["Portal-inline"] = 217000,
["Portal_bar"] = 113000,
["Portal_box"] = 2700,
["Portalbar"] = 12000,
["Portuguese_name"] = 8600,
["PosMapFS"] = 4300,
["Possible"] = 3300,
["Possibly_empty_category"] = 68000,
["Post-nominals"] = 51000,
["Post-nominals/AUS"] = 7400,
["Post-nominals/CAN"] = 9100,
["Post-nominals/GBR"] = 27000,
["Post-nominals/NZL"] = 3900,
["Postnominals"] = 9200,
["Pp"] = 13000,
["Pp-book-cover"] = 52000,
["Pp-extended"] = 2200,
["Pp-move"] = 7700,
["Pp-move-indef"] = 3600,
["Pp-pc"] = 3700,
["Pp-pc1"] = 2500,
["Pp-protected"] = 6400,
["Pp-semi-indef"] = 4400,
["Pp-template"] = 2600,
["Pp-vandalism"] = 2500,
["Precision"] = 265000,
["PresFoot"] = 2900,
["PresHead"] = 3200,
["PresRow"] = 3200,
["Press"] = 4700,
["Preview_warning"] = 23000,
["Primary_source_inline"] = 5800,
["Primary_sources"] = 30000,
["Principal_rank"] = 475000,
["Prl"] = 102000,
["Pro-wrestling"] = 5500,
["ProCyclingStats"] = 2500,
["ProQuest"] = 16000,
["Professional_wrestling_profiles"] = 2000,
["Professional_wrestling_results_table"] = 2500,
["Profit"] = 3600,
["Progress_box"] = 17000,
["Project-Class"] = 12000,
["Project_Catholicism"] = 2000,
["Project_other"] = 16000,
["Proper_name"] = 2300,
["Prose"] = 3300,
["Proxy_block"] = 2200,
["Pso"] = 3700,
["Purge"] = 374000,
["Purge_button"] = 17000,
["Module:Page"] = 244000,
["Module:PageLinks"] = 42000,
["Module:Page_tabs"] = 3500,
["Module:Pagelist"] = 4800,
["Module:Pagetype"] = 15900000,
["Module:Pagetype/config"] = 15900000,
["Module:ParameterCount"] = 766000,
["Module:Parameter_names_example"] = 2400,
["Module:Parameter_validation"] = 130000,
["Module:Parameter_validation/default_config"] = 130000,
["Module:Party_name_with_color"] = 8400,
["Module:Percentage"] = 12000,
["Module:Person_height"] = 257000,
["Module:Person_length"] = 7100,
["Module:Person_weight"] = 78000,
["Module:Photo_montage"] = 4500,
["Module:Plain_text"] = 1490000,
["Module:Political_party"] = 113000,
["Module:Political_party/A"] = 19000,
["Module:Political_party/B"] = 15000,
["Module:Political_party/C"] = 38000,
["Module:Political_party/D"] = 48000,
["Module:Political_party/E"] = 5400,
["Module:Political_party/F"] = 11000,
["Module:Political_party/G"] = 16000,
["Module:Political_party/H"] = 4900,
["Module:Political_party/I"] = 47000,
["Module:Political_party/J"] = 6900,
["Module:Political_party/K"] = 3600,
["Module:Political_party/L"] = 36000,
["Module:Political_party/M"] = 10000,
["Module:Political_party/N"] = 29000,
["Module:Political_party/O"] = 5000,
["Module:Political_party/P"] = 25000,
["Module:Political_party/R"] = 46000,
["Module:Political_party/S"] = 28000,
["Module:Political_party/T"] = 10000,
["Module:Political_party/U"] = 17000,
["Module:Political_party/V"] = 6600,
["Module:Political_party/W"] = 10000,
["Module:Pop_density"] = 9300,
["Module:PopulationFromWikidata"] = 6100,
["Module:Portal"] = 9600000,
["Module:Portal-inline"] = 217000,
["Module:Portal/images/a"] = 1620000,
["Module:Portal/images/aliases"] = 169000,
["Module:Portal/images/b"] = 2750000,
["Module:Portal/images/c"] = 1540000,
["Module:Portal/images/d"] = 101000,
["Module:Portal/images/e"] = 402000,
["Module:Portal/images/f"] = 799000,
["Module:Portal/images/g"] = 616000,
["Module:Portal/images/h"] = 420000,
["Module:Portal/images/i"] = 1060000,
["Module:Portal/images/j"] = 264000,
["Module:Portal/images/k"] = 69000,
["Module:Portal/images/l"] = 415000,
["Module:Portal/images/m"] = 617000,
["Module:Portal/images/n"] = 716000,
["Module:Portal/images/o"] = 398000,
["Module:Portal/images/other"] = 124000,
["Module:Portal/images/p"] = 833000,
["Module:Portal/images/q"] = 3000,
["Module:Portal/images/r"] = 365000,
["Module:Portal/images/s"] = 1550000,
["Module:Portal/images/t"] = 612000,
["Module:Portal/images/u"] = 983000,
["Module:Portal/images/v"] = 281000,
["Module:Portal/images/w"] = 165000,
["Module:Portal/images/y"] = 32000,
["Module:Portal/images/z"] = 5200,
["Module:Portal/styles.css"] = 9290000,
["Module:Portal_bar"] = 132000,
["Module:Portal_bar/styles.css"] = 132000,
["Module:Professional_wrestling_profiles"] = 2100,
["Module:Professional_wrestling_results_table"] = 2500,
["Module:Progress_box"] = 17000,
["Module:Progress_box/config"] = 17000,
["Module:Progress_box/styles.css"] = 17000,
["Module:Protect"] = 247000,
["Module:Protected_edit_request"] = 47000,
["Module:Protection_banner"] = 54000,
["Module:Protection_banner/config"] = 54000,
["Module:Purge"] = 393000,
}
99de02abb97559d14c8f809c9e930b02e275dd77
Module:Transclusion count/data/S
828
350
733
2023-09-03T10:47:08Z
[[]]>Ahechtbot
0
[[Wikipedia:BOT|Bot]]: Updated page.
Scribunto
text/plain
return {
["S"] = 3500,
["S-aca"] = 6400,
["S-ach"] = 16000,
["S-aft"] = 218000,
["S-aft/check"] = 218000,
["S-aft/filter"] = 218000,
["S-bef"] = 223000,
["S-bef/check"] = 223000,
["S-bef/filter"] = 223000,
["S-break"] = 5000,
["S-civ"] = 2600,
["S-dip"] = 5300,
["S-end"] = 246000,
["S-gov"] = 7900,
["S-hon"] = 3800,
["S-hou"] = 9500,
["S-inc"] = 13000,
["S-legal"] = 9300,
["S-mil"] = 12000,
["S-new"] = 16000,
["S-non"] = 9900,
["S-npo"] = 4000,
["S-off"] = 41000,
["S-par"] = 50000,
["S-par/en"] = 3200,
["S-par/gb"] = 3300,
["S-par/uk"] = 12000,
["S-par/us-hs"] = 11000,
["S-par/us-sen"] = 2000,
["S-ppo"] = 13000,
["S-prec"] = 3200,
["S-rail"] = 6400,
["S-rail-start"] = 6200,
["S-rail/lines"] = 6400,
["S-reg"] = 20000,
["S-rel"] = 18000,
["S-roy"] = 2700,
["S-s"] = 3600,
["S-sports"] = 10000,
["S-start"] = 239000,
["S-ttl"] = 229000,
["S-ttl/check"] = 229000,
["S-vac"] = 6500,
["SCO"] = 3700,
["SDcat"] = 5430000,
["SECOND"] = 2300,
["SGP"] = 2600,
["SIA"] = 2600,
["SIPA"] = 2600,
["SLO"] = 4200,
["SMS"] = 7200,
["SMU"] = 2100,
["SPI_archive_notice"] = 71000,
["SPIarchive_notice"] = 70000,
["SPIcat"] = 3800,
["SPIclose"] = 3300,
["SPIpriorcases"] = 65000,
["SR/Olympics_profile"] = 3100,
["SRB"] = 3700,
["SS"] = 20000,
["SSPa"] = 2600,
["STN"] = 13000,
["SUBJECTSPACE_formatted"] = 42000,
["SUI"] = 8400,
["SVG"] = 3200,
["SVG-Logo"] = 17000,
["SVG-Res"] = 15000,
["SVG-logo"] = 2900,
["SVG_logo"] = 2000,
["SVK"] = 5900,
["SVN"] = 5200,
["SWE"] = 12000,
["Sandbox_other"] = 232000,
["Saturday"] = 2700,
["Saved_book"] = 52000,
["Sc"] = 3200,
["Scholia"] = 2700,
["School_block"] = 13000,
["School_disambiguation"] = 3400,
["Schoolblock"] = 6700,
["Schooldis"] = 2700,
["Schoolip"] = 10000,
["Scientist_icon"] = 15000,
["Scientist_icon2"] = 15000,
["Sclass"] = 31000,
["Sclass2"] = 10000,
["Screen_reader-only"] = 43000,
["Screen_reader-only/styles.css"] = 43000,
["Script"] = 5800,
["Script/Arabic"] = 2200,
["Script/Hebrew"] = 4700,
["Script/Nastaliq"] = 14000,
["Script/doc/id-unk"] = 3000,
["Script/doc/id-unk/core"] = 3000,
["Script/doc/id-unk/is-iso-alpha4"] = 2800,
["Script/doc/id-unk/name-to-alpha4"] = 3000,
["Script/styles.css"] = 3100,
["Script/styles_arabic.css"] = 2200,
["Script/styles_hebrew.css"] = 4700,
["Sdash"] = 3100,
["Search_box"] = 51000,
["Search_link"] = 9900,
["Section_link"] = 54000,
["Section_sizes"] = 2400,
["See"] = 10000,
["See_also"] = 183000,
["Seealso"] = 6700,
["Select_skin"] = 4300,
["Selected_article"] = 2700,
["Selected_picture"] = 2500,
["Self"] = 48000,
["Self-published_inline"] = 3900,
["Self-published_source"] = 6600,
["Self-reference"] = 2700,
["Self-reference_tool"] = 5200,
["Self/migration"] = 33000,
["Self2"] = 2100,
["Sent_off"] = 13000,
["Sentoff"] = 4300,
["Separated_entries"] = 178000,
["Sequence"] = 3700,
["Serial_killer_opentask"] = 3600,
["Series_overview"] = 7700,
["Serif"] = 2800,
["Set_category"] = 35000,
["Set_index_article"] = 5700,
["Sets_taxobox_colour"] = 92000,
["Sfn"] = 154000,
["SfnRef"] = 133000,
["Sfnm"] = 3600,
["Sfnp"] = 17000,
["Sfnref"] = 11000,
["Sfrac"] = 4200,
["Sfrac/styles.css"] = 4200,
["SharedIPEDU"] = 3200,
["Shared_IP"] = 11000,
["Shared_IP_advice"] = 16000,
["Shared_IP_corp"] = 5100,
["Shared_IP_edu"] = 129000,
["Shared_IP_gov"] = 3000,
["Sharedip"] = 3300,
["Sharedipedu"] = 3600,
["Sherdog"] = 2600,
["Ship"] = 85000,
["Ship/maintenancecategory"] = 85000,
["Ship_index"] = 7000,
["Shipboxflag"] = 20000,
["Shipboxflag/core"] = 20000,
["Shipwrecks_navbox_footer"] = 10000,
["Shipwrecks_navbox_footer/link"] = 10000,
["Short_description"] = 5540000,
["Short_description/lowercasecheck"] = 5540000,
["Short_pages_monitor"] = 10000,
["Short_pages_monitor/maximum_length"] = 10000,
["Shortcut"] = 20000,
["Should_be_SVG"] = 9100,
["Show_button"] = 2140000,
["Sic"] = 32000,
["Sica"] = 3000,
["Side_box"] = 1120000,
["Sidebar"] = 256000,
["Sidebar_games_events"] = 36000,
["Sidebar_person"] = 2300,
["Sidebar_person/styles.css"] = 2300,
["Sidebar_with_collapsible_lists"] = 93000,
["Sigfig"] = 3700,
["Significant_figures"] = 5000,
["Significant_figures/rnd"] = 4600,
["Signpost-subscription"] = 2100,
["Sildb_prim"] = 2000,
["Silver02"] = 16000,
["Silver2"] = 48000,
["Silver_medal"] = 5500,
["Similar_names"] = 2200,
["Single+double"] = 6800,
["Single+space"] = 14000,
["Single-innings_cricket_match"] = 3200,
["Single_chart"] = 37000,
["Single_chart/chartnote"] = 37000,
["Single_namespace"] = 201000,
["Singlechart"] = 20000,
["Singles"] = 41000,
["Sister-inline"] = 188000,
["Sister_project"] = 1040000,
["Sister_project_links"] = 11000,
["Sisterlinks"] = 2800,
["Skip_to_talk"] = 12000,
["Skip_to_talk/styles.css"] = 12000,
["Sky"] = 2700,
["Sky/styles.css"] = 2700,
["Slink"] = 13000,
["Small"] = 599000,
["Small_Solar_System_bodies"] = 3600,
["Smallcaps"] = 18000,
["Smallcaps/styles.css"] = 18000,
["Smallcaps_all"] = 3300,
["Smalldiv"] = 22000,
["Smaller"] = 73000,
["Smallsup"] = 21000,
["Smiley"] = 44000,
["Snd"] = 163000,
["Snds"] = 6300,
["Soccer_icon"] = 130000,
["Soccer_icon2"] = 130000,
["Soccer_icon4"] = 5100,
["Soccerbase"] = 13000,
["Soccerbase_season"] = 6700,
["Soccerway"] = 75000,
["Sock"] = 47000,
["Sock_list"] = 4200,
["Sockcat"] = 2000,
["Sockmaster"] = 9400,
["Sockpuppet"] = 238000,
["Sockpuppet/altmaster"] = 2100,
["Sockpuppet/categorise"] = 238000,
["SockpuppetCheckuser"] = 5500,
["Sockpuppet_category"] = 45000,
["Sockpuppet_category/confirmed"] = 23000,
["Sockpuppet_category/suspected"] = 22000,
["Sockpuppetcheckuser"] = 3600,
["Sockpuppeteer"] = 25000,
["Soft_redirect"] = 6100,
["Soft_redirect_protection"] = 8200,
["Softredirect"] = 3200,
["Solar_luminosity"] = 4400,
["Solar_mass"] = 5200,
["Solar_radius"] = 4300,
["Soldier_icon"] = 3900,
["Soldier_icon2"] = 3900,
["Song"] = 8300,
["Songs"] = 19000,
["Songs_category"] = 8400,
["Songs_category/core"] = 8400,
["Sort"] = 117000,
["Sortname"] = 52000,
["Source-attribution"] = 28000,
["Source_check"] = 964000,
["Sourcecheck"] = 964000,
["Sources"] = 2500,
["South_America_topic"] = 2500,
["Sp"] = 248000,
["Space"] = 55000,
["Space+double"] = 18000,
["Space+single"] = 13000,
["Spaced_en_dash"] = 195000,
["Spaced_en_dash_space"] = 6400,
["Spaced_ndash"] = 23000,
["Spaces"] = 2700000,
["Spain_metadata_Wikidata"] = 7500,
["Spamlink"] = 13000,
["Species_Latin_name_abbreviation_disambiguation"] = 2200,
["Species_list"] = 15000,
["Speciesbox"] = 289000,
["Speciesbox/getGenus"] = 289000,
["Speciesbox/getSpecies"] = 289000,
["Speciesbox/name"] = 289000,
["Speciesbox/parameterCheck"] = 289000,
["Speciesbox/trim"] = 289000,
["Specieslist"] = 5400,
["Split_article"] = 3600,
["Spnd"] = 4100,
["Spoken_Wikipedia"] = 2100,
["Sport_icon"] = 14000,
["Sport_icon2"] = 15000,
["SportsYearCatUSstate"] = 6500,
["SportsYearCatUSstate/core"] = 6500,
["Sports_links"] = 65000,
["Sports_reference"] = 7200,
["Squad_maintenance"] = 3500,
["Sronly"] = 41000,
["Srt"] = 5200,
["Stack"] = 25000,
["Stack/styles.css"] = 34000,
["Stack_begin"] = 9000,
["Stack_end"] = 9000,
["StaleIP"] = 3200,
["Standings_table_end"] = 54000,
["Standings_table_entry"] = 54000,
["Standings_table_entry/record"] = 54000,
["Standings_table_start"] = 54000,
["Standings_table_start/colheader"] = 54000,
["Standings_table_start/colspan"] = 54000,
["Standings_table_start/styles.css"] = 54000,
["Starbox_astrometry"] = 5100,
["Starbox_begin"] = 5300,
["Starbox_catalog"] = 5200,
["Starbox_character"] = 5100,
["Starbox_detail"] = 5000,
["Starbox_end"] = 5300,
["Starbox_image"] = 2900,
["Starbox_observe"] = 5100,
["Starbox_reference"] = 5200,
["Start-Class"] = 18000,
["Start-date"] = 3800,
["Start_and_end_dates"] = 3800,
["Start_box"] = 8000,
["Start_date"] = 435000,
["Start_date_and_age"] = 139000,
["Start_date_and_years_ago"] = 6500,
["Start_of_course_timeline"] = 6100,
["Start_of_course_week"] = 6300,
["Start_tab"] = 4900,
["Startflatlist"] = 144000,
["Static_IP"] = 5900,
["Station"] = 7700,
["Station_link"] = 16000,
["Stdinchicite"] = 11000,
["Steady"] = 14000,
["Stl"] = 14000,
["Stn"] = 7300,
["Stn_art_lnk"] = 2000,
["Stnlnk"] = 30000,
["Storm_colour"] = 5100,
["Storm_path"] = 2100,
["StoryTeleplay"] = 3500,
["Str_endswith"] = 200000,
["Str_find"] = 115000,
["Str_index"] = 13000,
["Str_left"] = 949000,
["Str_len"] = 18000,
["Str_letter"] = 175000,
["Str_letter/trim"] = 20000,
["Str_number"] = 8000,
["Str_number/trim"] = 169000,
["Str_rep"] = 312000,
["Str_right"] = 44000,
["Str_trim"] = 5300,
["Str_≠_len"] = 34000,
["Str_≥_len"] = 72000,
["Strfind_short"] = 224000,
["Strikethrough"] = 16000,
["String_split"] = 2800,
["Strip_tags"] = 38000,
["Strong"] = 858000,
["Structurae"] = 2100,
["Stub-Class"] = 17000,
["Stub_Category"] = 13000,
["Stub_category"] = 18000,
["Stub_documentation"] = 36000,
["Student_editor"] = 27000,
["Student_sandbox"] = 4500,
["Student_table_row"] = 5300,
["Students_table"] = 5300,
["Su"] = 9700,
["Su-census1989"] = 4500,
["Sub"] = 4100,
["Subinfobox_bodystyle"] = 35000,
["Subject_bar"] = 18000,
["Suboff"] = 6200,
["Subon"] = 6300,
["Subpage_other"] = 288000,
["Subscription"] = 4300,
["Subscription_required"] = 34000,
["Subsidebar_bodystyle"] = 6800,
["Subst_only"] = 4600,
["Substituted_comment"] = 19000,
["Succession_box"] = 118000,
["Succession_box/check"] = 118000,
["Succession_links"] = 163000,
["Summer_Olympics_by_year_category_navigation"] = 2400,
["Summer_Olympics_by_year_category_navigation/core"] = 2400,
["Sunday"] = 2700,
["Sup"] = 59000,
["Suppress_categories"] = 5300,
["Surname"] = 66000,
["Swiss_populations"] = 2400,
["Swiss_populations_NC"] = 3000,
["Swiss_populations_YM"] = 2300,
["Swiss_populations_ref"] = 2400,
["Switcher"] = 2900,
["Module:SDcat"] = 5430000,
["Module:SPI_archive_notice"] = 32000,
["Module:Science_redirect"] = 254000,
["Module:Science_redirect/conf"] = 254000,
["Module:Section_link"] = 54000,
["Module:Section_sizes"] = 3500,
["Module:See_also_if_exists"] = 73000,
["Module:Separated_entries"] = 2280000,
["Module:Series_overview"] = 7800,
["Module:Settlement_short_description"] = 710000,
["Module:Shortcut"] = 24000,
["Module:Shortcut/config"] = 23000,
["Module:Shortcut/styles.css"] = 23000,
["Module:Side_box"] = 1160000,
["Module:Side_box/styles.css"] = 1150000,
["Module:Sidebar"] = 338000,
["Module:Sidebar/configuration"] = 338000,
["Module:Sidebar/styles.css"] = 344000,
["Module:Sidebar_games_events"] = 36000,
["Module:Sidebar_games_events/styles.css"] = 36000,
["Module:Singles"] = 41000,
["Module:Sister_project_links"] = 14000,
["Module:Sister_project_links/bar/styles.css"] = 3400,
["Module:Sister_project_links/styles.css"] = 11000,
["Module:Sock_list"] = 4200,
["Module:Sort_title"] = 18000,
["Module:Sortkey"] = 198000,
["Module:Split_article"] = 3600,
["Module:Spoken_Wikipedia"] = 2100,
["Module:Spoken_Wikipedia/configuration"] = 2100,
["Module:Spoken_Wikipedia/styles.css"] = 2100,
["Module:Sports_career"] = 19000,
["Module:Sports_color"] = 68000,
["Module:Sports_color/baseball"] = 34000,
["Module:Sports_color/basketball"] = 22000,
["Module:Sports_color/ice_hockey"] = 3100,
["Module:Sports_rbr_table"] = 11000,
["Module:Sports_rbr_table/styles.css"] = 11000,
["Module:Sports_reference"] = 7200,
["Module:Sports_results"] = 14000,
["Module:Sports_results/styles.css"] = 9500,
["Module:Sports_table"] = 58000,
["Module:Sports_table/WDL"] = 51000,
["Module:Sports_table/WDL_OT"] = 2700,
["Module:Sports_table/WL"] = 3900,
["Module:Sports_table/argcheck"] = 58000,
["Module:Sports_table/styles.css"] = 58000,
["Module:Sports_table/sub"] = 58000,
["Module:Sports_table/totalscheck"] = 42000,
["Module:Stock_tickers/NYSE"] = 2100,
["Module:Storm_categories"] = 5200,
["Module:Storm_categories/categories"] = 5200,
["Module:Storm_categories/colors"] = 5200,
["Module:Storm_categories/icons"] = 5200,
["Module:String"] = 11300000,
["Module:String2"] = 2280000,
["Module:Su"] = 12000,
["Module:Subject_bar"] = 18000,
["Module:Suppress_categories"] = 5300,
}
29f3f05e956c904ac0299fb29b70ac2b1f93c9bd
Template:Flag/core
10
1035
2131
2023-09-04T21:35:34Z
[[]]>Pppery
0
Add new flags per edit request
wikitext
text/x-wiki
<span class="flagicon">[[File:{{{flag alias-{{{variant}}}|{{#if:{{{flag alias|}}}|{{{flag alias}}}|Flag placeholder.svg}}}}}|{{#if:{{{size|}}}|{{{size}}}|{{{size flag alias-{{{variant}}}|{{#if:{{{variant|}}}|23x15px|{{{size flag alias|23x15px}}}}}}}}}}|{{{border-{{{variant}}}|{{{border|border}}}}}} |alt=|link=]] {{#switch:{{{flag alias}}}|Flag of Switzerland.svg|Flag of the Vatican City.svg|Flag of Switzerland (Pantone).svg|Flag of Vatican City State - 2023 version.svg= }}{{#ifeq:{{{alias}}}|Nepal| }}</span>[[{{{alias}}}|{{{name}}}]]<noinclude>{{documentation}}</noinclude>
0714064913bcc5abd9dae55d4fb50f52965eef35
Template:Flagcountry/core
10
268
542
2023-09-04T21:39:51Z
Pppery
5
Per edit request
wikitext
text/x-wiki
<span class="datasortkey" data-sort-value="{{{sortkey|{{{shortname alias|{{{alias}}}}}}}}}"><!--
--><span class="flagicon"><!--
-->[[File:{{{flag alias-{{{variant}}}|{{{flag alias}}}}}}|<!--
-->{{#if:{{{size|}}}|{{{size}}}|{{{size flag alias-{{{variant}}}|{{#if:{{{variant|}}}|23x15px|{{{size flag alias|23x15px}}}}}}}}}}|<!--
-->{{{border-{{{variant}}}|{{{border|border}}}}}} |<!--
-->alt=|<!--
-->link=]] <!--
-->{{#switch:{{{flag alias}}}|Flag of Switzerland.svg|Flag of the Vatican City.svg|Flag of Switzerland (Pantone).svg|Flag of Vatican City State - 2023 version.svg= }}<!--
-->{{#ifeq:{{{alias}}}|Nepal| }}<!--
--></span>[[{{{link alias-{{{variant}}}|{{{alias}}}}}}|<!--
-->{{#if:{{{name|}}}|{{{name}}}|{{{shortname alias|{{{alias}}}}}}}}]]<!--
--></span><noinclude>{{documentation}}</noinclude>
1f6cdc61b8d06e6993f1621ac4b695389268eedf
Module:Message box/configuration
828
20
44
2023-09-08T14:09:56Z
Pppery
5
Use SVG per edit request
Scribunto
text/plain
--------------------------------------------------------------------------------
-- Message box configuration --
-- --
-- This module contains configuration data for [[Module:Message box]]. --
--------------------------------------------------------------------------------
return {
ambox = {
types = {
speedy = {
class = 'ambox-speedy',
image = 'Ambox warning pn.svg'
},
delete = {
class = 'ambox-delete',
image = 'Ambox warning pn.svg'
},
content = {
class = 'ambox-content',
image = 'Ambox important.svg'
},
style = {
class = 'ambox-style',
image = 'Edit-clear.svg'
},
move = {
class = 'ambox-move',
image = 'Merge-split-transwiki default.svg'
},
protection = {
class = 'ambox-protection',
image = 'Semi-protection-shackle-keyhole.svg'
},
notice = {
class = 'ambox-notice',
image = 'Information icon4.svg'
}
},
default = 'notice',
allowBlankParams = {'talk', 'sect', 'date', 'issue', 'fix', 'subst', 'hidden'},
allowSmall = true,
smallParam = 'left',
smallClass = 'mbox-small-left',
substCheck = true,
classes = {'metadata', 'ambox'},
imageEmptyCell = true,
imageCheckBlank = true,
imageSmallSize = '20x20px',
imageCellDiv = true,
useCollapsibleTextFields = true,
imageRightNone = true,
sectionDefault = 'article',
allowMainspaceCategories = true,
templateCategory = 'Article message templates',
templateCategoryRequireName = true,
templateErrorCategory = 'Article message templates with missing parameters',
templateErrorParamsToCheck = {'issue', 'fix', 'subst'},
removalNotice = '<small>[[Help:Maintenance template removal|Learn how and when to remove this template message]]</small>',
templatestyles = 'Module:Message box/ambox.css'
},
cmbox = {
types = {
speedy = {
class = 'cmbox-speedy',
image = 'Ambox warning pn.svg'
},
delete = {
class = 'cmbox-delete',
image = 'Ambox warning pn.svg'
},
content = {
class = 'cmbox-content',
image = 'Ambox important.svg'
},
style = {
class = 'cmbox-style',
image = 'Edit-clear.svg'
},
move = {
class = 'cmbox-move',
image = 'Merge-split-transwiki default.svg'
},
protection = {
class = 'cmbox-protection',
image = 'Semi-protection-shackle-keyhole.svg'
},
notice = {
class = 'cmbox-notice',
image = 'Information icon4.svg'
}
},
default = 'notice',
showInvalidTypeError = true,
classes = {'cmbox'},
imageEmptyCell = true,
templatestyles = 'Module:Message box/cmbox.css'
},
fmbox = {
types = {
warning = {
class = 'fmbox-warning',
image = 'Ambox warning pn.svg'
},
editnotice = {
class = 'fmbox-editnotice',
image = 'Information icon4.svg'
},
system = {
class = 'fmbox-system',
image = 'Information icon4.svg'
}
},
default = 'system',
showInvalidTypeError = true,
classes = {'fmbox'},
imageEmptyCell = false,
imageRightNone = false,
templatestyles = 'Module:Message box/fmbox.css'
},
imbox = {
types = {
speedy = {
class = 'imbox-speedy',
image = 'Ambox warning pn.svg'
},
delete = {
class = 'imbox-delete',
image = 'Ambox warning pn.svg'
},
content = {
class = 'imbox-content',
image = 'Ambox important.svg'
},
style = {
class = 'imbox-style',
image = 'Edit-clear.svg'
},
move = {
class = 'imbox-move',
image = 'Merge-split-transwiki default.svg'
},
protection = {
class = 'imbox-protection',
image = 'Semi-protection-shackle-keyhole.svg'
},
license = {
class = 'imbox-license licensetpl',
image = 'Imbox-license.svg'
},
featured = {
class = 'imbox-featured',
image = 'Cscr-featured.svg',
imageNeedsLink = true
},
notice = {
class = 'imbox-notice',
image = 'Information icon4.svg'
}
},
default = 'notice',
showInvalidTypeError = true,
classes = {'imbox'},
imageEmptyCell = true,
below = true,
templateCategory = 'File message boxes',
templatestyles = 'Module:Message box/imbox.css'
},
ombox = {
types = {
speedy = {
class = 'ombox-speedy',
image = 'Ambox warning pn.svg'
},
delete = {
class = 'ombox-delete',
image = 'Ambox warning pn.svg'
},
content = {
class = 'ombox-content',
image = 'Ambox important.svg'
},
style = {
class = 'ombox-style',
image = 'Edit-clear.svg'
},
move = {
class = 'ombox-move',
image = 'Merge-split-transwiki default.svg'
},
protection = {
class = 'ombox-protection',
image = 'Semi-protection-shackle-keyhole.svg'
},
notice = {
class = 'ombox-notice',
image = 'Information icon4.svg'
}
},
default = 'notice',
showInvalidTypeError = true,
classes = {'ombox'},
allowSmall = true,
imageEmptyCell = true,
imageRightNone = true,
templatestyles = 'Module:Message box/ombox.css'
},
tmbox = {
types = {
speedy = {
class = 'tmbox-speedy',
image = 'Ambox warning pn.svg'
},
delete = {
class = 'tmbox-delete',
image = 'Ambox warning pn.svg'
},
content = {
class = 'tmbox-content',
image = 'Ambox important.svg'
},
style = {
class = 'tmbox-style',
image = 'Edit-clear.svg'
},
move = {
class = 'tmbox-move',
image = 'Merge-split-transwiki default.svg'
},
protection = {
class = 'tmbox-protection',
image = 'Semi-protection-shackle-keyhole.svg'
},
notice = {
class = 'tmbox-notice',
image = 'Information icon4.svg'
}
},
default = 'notice',
showInvalidTypeError = true,
classes = {'tmbox'},
allowSmall = true,
imageRightNone = true,
imageEmptyCell = true,
templateCategory = 'Talk message boxes',
templatestyles = 'Module:Message box/tmbox.css'
}
}
27f00af5cf3939613e9156acd5e62a3469d03d81
45
44
2023-09-14T01:11:27Z
Ilovethehitgameomori
2
1 revision imported
Scribunto
text/plain
--------------------------------------------------------------------------------
-- Message box configuration --
-- --
-- This module contains configuration data for [[Module:Message box]]. --
--------------------------------------------------------------------------------
return {
ambox = {
types = {
speedy = {
class = 'ambox-speedy',
image = 'Ambox warning pn.svg'
},
delete = {
class = 'ambox-delete',
image = 'Ambox warning pn.svg'
},
content = {
class = 'ambox-content',
image = 'Ambox important.svg'
},
style = {
class = 'ambox-style',
image = 'Edit-clear.svg'
},
move = {
class = 'ambox-move',
image = 'Merge-split-transwiki default.svg'
},
protection = {
class = 'ambox-protection',
image = 'Semi-protection-shackle-keyhole.svg'
},
notice = {
class = 'ambox-notice',
image = 'Information icon4.svg'
}
},
default = 'notice',
allowBlankParams = {'talk', 'sect', 'date', 'issue', 'fix', 'subst', 'hidden'},
allowSmall = true,
smallParam = 'left',
smallClass = 'mbox-small-left',
substCheck = true,
classes = {'metadata', 'ambox'},
imageEmptyCell = true,
imageCheckBlank = true,
imageSmallSize = '20x20px',
imageCellDiv = true,
useCollapsibleTextFields = true,
imageRightNone = true,
sectionDefault = 'article',
allowMainspaceCategories = true,
templateCategory = 'Article message templates',
templateCategoryRequireName = true,
templateErrorCategory = 'Article message templates with missing parameters',
templateErrorParamsToCheck = {'issue', 'fix', 'subst'},
removalNotice = '<small>[[Help:Maintenance template removal|Learn how and when to remove this template message]]</small>',
templatestyles = 'Module:Message box/ambox.css'
},
cmbox = {
types = {
speedy = {
class = 'cmbox-speedy',
image = 'Ambox warning pn.svg'
},
delete = {
class = 'cmbox-delete',
image = 'Ambox warning pn.svg'
},
content = {
class = 'cmbox-content',
image = 'Ambox important.svg'
},
style = {
class = 'cmbox-style',
image = 'Edit-clear.svg'
},
move = {
class = 'cmbox-move',
image = 'Merge-split-transwiki default.svg'
},
protection = {
class = 'cmbox-protection',
image = 'Semi-protection-shackle-keyhole.svg'
},
notice = {
class = 'cmbox-notice',
image = 'Information icon4.svg'
}
},
default = 'notice',
showInvalidTypeError = true,
classes = {'cmbox'},
imageEmptyCell = true,
templatestyles = 'Module:Message box/cmbox.css'
},
fmbox = {
types = {
warning = {
class = 'fmbox-warning',
image = 'Ambox warning pn.svg'
},
editnotice = {
class = 'fmbox-editnotice',
image = 'Information icon4.svg'
},
system = {
class = 'fmbox-system',
image = 'Information icon4.svg'
}
},
default = 'system',
showInvalidTypeError = true,
classes = {'fmbox'},
imageEmptyCell = false,
imageRightNone = false,
templatestyles = 'Module:Message box/fmbox.css'
},
imbox = {
types = {
speedy = {
class = 'imbox-speedy',
image = 'Ambox warning pn.svg'
},
delete = {
class = 'imbox-delete',
image = 'Ambox warning pn.svg'
},
content = {
class = 'imbox-content',
image = 'Ambox important.svg'
},
style = {
class = 'imbox-style',
image = 'Edit-clear.svg'
},
move = {
class = 'imbox-move',
image = 'Merge-split-transwiki default.svg'
},
protection = {
class = 'imbox-protection',
image = 'Semi-protection-shackle-keyhole.svg'
},
license = {
class = 'imbox-license licensetpl',
image = 'Imbox-license.svg'
},
featured = {
class = 'imbox-featured',
image = 'Cscr-featured.svg',
imageNeedsLink = true
},
notice = {
class = 'imbox-notice',
image = 'Information icon4.svg'
}
},
default = 'notice',
showInvalidTypeError = true,
classes = {'imbox'},
imageEmptyCell = true,
below = true,
templateCategory = 'File message boxes',
templatestyles = 'Module:Message box/imbox.css'
},
ombox = {
types = {
speedy = {
class = 'ombox-speedy',
image = 'Ambox warning pn.svg'
},
delete = {
class = 'ombox-delete',
image = 'Ambox warning pn.svg'
},
content = {
class = 'ombox-content',
image = 'Ambox important.svg'
},
style = {
class = 'ombox-style',
image = 'Edit-clear.svg'
},
move = {
class = 'ombox-move',
image = 'Merge-split-transwiki default.svg'
},
protection = {
class = 'ombox-protection',
image = 'Semi-protection-shackle-keyhole.svg'
},
notice = {
class = 'ombox-notice',
image = 'Information icon4.svg'
}
},
default = 'notice',
showInvalidTypeError = true,
classes = {'ombox'},
allowSmall = true,
imageEmptyCell = true,
imageRightNone = true,
templatestyles = 'Module:Message box/ombox.css'
},
tmbox = {
types = {
speedy = {
class = 'tmbox-speedy',
image = 'Ambox warning pn.svg'
},
delete = {
class = 'tmbox-delete',
image = 'Ambox warning pn.svg'
},
content = {
class = 'tmbox-content',
image = 'Ambox important.svg'
},
style = {
class = 'tmbox-style',
image = 'Edit-clear.svg'
},
move = {
class = 'tmbox-move',
image = 'Merge-split-transwiki default.svg'
},
protection = {
class = 'tmbox-protection',
image = 'Semi-protection-shackle-keyhole.svg'
},
notice = {
class = 'tmbox-notice',
image = 'Information icon4.svg'
}
},
default = 'notice',
showInvalidTypeError = true,
classes = {'tmbox'},
allowSmall = true,
imageRightNone = true,
imageEmptyCell = true,
templateCategory = 'Talk message boxes',
templatestyles = 'Module:Message box/tmbox.css'
}
}
27f00af5cf3939613e9156acd5e62a3469d03d81
Template:Infobox/doc
10
79
162
2023-09-09T08:06:21Z
[[w>Tjmj
0
/* Examples */ Suppress [[Category:Pages using infobox templates with ignored data cells]]
wikitext
text/x-wiki
{{Documentation subpage}}
<!-- Please place categories where indicated at the bottom of this page and interwikis at Wikidata (see [[Wikipedia:Wikidata]]) -->
{{distinguish|Template:Userbox}}
{{#ifeq:{{SUBPAGENAME}}|sandbox||{{High-use}}}}
{{Lua|Module:Infobox}}
{{Parameter names example
|name={{PAGENAME}} <!--|child |subbox |decat--> |title |above |subheader |subheader1 |subheader2={{{subheader2}}}<br/>......
|image|caption |image1|caption1 |image2|caption2={{{caption2}}}<br/>......
|header1=<div style="border-top:1px dashed #ccc;">{{{header1}}}<br/>{{nobold|( ''or'' )}}</div>
|label2={{{label1}}} |data2={{{data1}}}
|data3=( ''or'' ) |data4=<div style="padding-bottom:0.25em;border-bottom:1px dashed #ccc;">{{{data1}}}</div>
|header5={{{header2}}}<br/><div style="padding:0.75em 0 0.5em;">{{nobold|( ''or'' )}}</div>
|label6={{{label2}}} |data6={{{data2}}}
|data7=( ''or'' ) |data8=<div style="padding-bottom:0.25em;border-bottom:1px dashed #ccc;">{{{data2}}}</div>
|data9=<div style="padding:0.75em 0 0.5em;">( ''etc'' )</div>
|below
}}
This template is intended as a meta template: a template used for constructing other templates. '''Note''': In general, it is not meant for use directly in an article, but can be used on a one-off basis if required. [[Help:Infobox]] contains an introduction about the recommended content and design of infoboxes; [[Wikipedia:Manual of Style/Infoboxes]] contains additional style guidelines. See [[WP:List of infoboxes]] and [[:Category:Infobox templates]] for lists of prepared topic-specific infoboxes.
== Usage ==
{{tlf|Infobox}} is a meta-template: used to organise an actual <nowiki>{{Infobox sometopic}}</nowiki> template (like {{tl|Infobox building}}).
For <code><nowiki>[[Template:Infobox sometopic]]</nowiki></code>, template code then looks like this, simplified:
<syntaxhighlight lang="wikitext">
{{Infobox
| name = {{{name|{{PAGENAME}}}}}
| image = {{{image|}}}
| caption1 = {{{caption|}}}
| label1 = Former names
| data1 = {{{former_names|}}}
| header2 = General information
| label3 = Status
| data3 = {{{status|}}}
... <!-- etc. -->
}}
</syntaxhighlight>
== Optional control parameters ==
; name : If this parameter is present, "view/talk/edit" links will be added to the bottom of the infobox pointing to the named page, prefixed by <code>Template:</code> if no namespace is specified. You may use the value <nowiki>{{subst:PAGENAME}}</nowiki>; however, this is rarely what you want because it will send users clicking these links in an infobox to the template code rather than the data in the infobox they probably want to change.
; child : See the [[#Embedding|Embedding]] section for details. If this is set to "yes", this child infobox should be titled but have no name parameter. This parameter is empty by default, set it to "yes" to activate it.
; subbox : See the [[#Subboxes|Subboxes]] section for details. If this is set to "yes", this subbox should be titled but have no name parameter. This parameter is empty by default, set to "yes" to activate it. It has no effect if the '''child''' parameter is also set to "yes".
; decat : If this is set to "yes", the current page will not be autocategorized in a maintenance category when the generated infobox has some problems or no visible data section. Leave empty by default or set to "yes" to activate it.
; autoheaders: If this is set to any non-blank value, headers which are not followed by data fields are suppressed. See the "[[#Hiding headers when all its data fields are empty|hiding headers when all its data fields are empty]]" section for more details.
== Content parameters ==
=== Title ===
There are two different ways to put a title on an infobox. One contains the title inside the infobox's border in the uppermost cell of the table, the other puts it as a caption on top of the table. You can use them both together, or just one or the other, or neither (though this is not recommended):
; title : Text to put in the caption over the top of the table (or as section header before the whole content of this table, if this is a child infobox). For [[Wikipedia:Manual of Style/Accessibility#Tables|accessibility reasons]], this is the most recommended alternative.
; above : Text to put within the uppermost cell of the table.
; subheader(n) : additional title fields which fit below {{{title}}} and {{{above}}}, but before images.
Examples:
{{Infobox
| name = Infobox/doc
| title = Text in caption over infobox
| subheader = Subheader of the infobox
| header = (the rest of the infobox goes here)
}}
<syntaxhighlight lang="wikitext" style="overflow:auto">
{{Infobox
| name = {{subst:PAGENAME}}
| title = Text in caption over infobox
| subheader = Subheader of the infobox
| header = (the rest of the infobox goes here)
}}
</syntaxhighlight>{{clear}}
{{Infobox
| name = Infobox/doc
| above = Text in uppermost cell of infobox
| subheader = Subheader of the infobox
| subheader2 = Second subheader of the infobox
| header = (the rest of the infobox goes here)
}}
<syntaxhighlight lang="wikitext" style="overflow:auto">
{{Infobox
| name = {{subst:PAGENAME}}
| above = Text in uppermost cell of infobox
| subheader = Subheader of the infobox
| subheader2 = Second subheader of the infobox
| header = (the rest of the infobox goes here)
}}
</syntaxhighlight>{{clear}}
=== Illustration images ===
; image(n) : images to display at the top of the template. Use full image syntax, for example <nowiki>[[File:example.png|200px|alt=Example alt text]]</nowiki>. Image is centered by default. See [[WP:ALT]] for more on alt text.
; caption(n) : Text to put underneath the images.
=== Main data ===
; header(n) : Text to use as a header in row n.
; label(n) : Text to use as a label in row n.
; data(n) : Text to display as data in row n.
Note: for any given value for (n), not all combinations of parameters are permitted. The presence of a {{para|header''(n)''}} will cause the corresponding {{para|data''(n)''}} (and {{para|rowclass''(n)''}} {{para|label''(n)''}}, see below) to be ignored; the absence of a {{para|data''(n)''}} will cause the corresponding {{para|label''(n)''}} to be ignored. Valid combinations for any single row are:
* {{para|class''(n)''}} {{para|header''(n)''}}
* {{para|rowclass''(n)''}} {{para|class''(n)''}} {{para|data''(n)''}}
* {{para|rowclass''(n)''}} {{para|label''(n)''}} {{para|class''(n)''}} {{para|data''(n)''}}
See the rendering of header4, label4, and data4 in the [[#Examples|Examples]] section below.
==== Number ranges ====
To allow flexibility when the layout of an infobox is changed, it may be helpful when developing an infobox to use non-contiguous numbers for header and label/data rows. Parameters for new rows can then be inserted in future without having to renumber existing parameters. For example:
<syntaxhighlight lang="wikitext" style="overflow:auto">
| header3 = Section 1
| label5 = Label A
| data5 = Data A
| label7 = Label C
| data7 = Data C
| header10 = Section 2
| label12 = Label D
| data12 = Data D
</syntaxhighlight>{{clear}}
It is also possible to automatically renumber parameter names by using [[User:Frietjes/infoboxgap.js]] or [[Module:IncrementParams]].
There is no upper limit on numbers but there must be at most 50 between each used number.
==== Making data fields optional ====
A row with a label but no data is not displayed. This allows for the easy creation of optional infobox content rows. To make a row optional use a parameter that defaults to an empty string, like so:
<syntaxhighlight lang="wikitext" style="overflow:auto">
| label5 = Population
| data5 = {{{population|}}}
</syntaxhighlight>{{clear}}
This way if an article doesn't define the population parameter in its infobox the row won't be displayed.
For more complex fields with pre-formatted contents that would still be present even if the parameter wasn't set, you can wrap it all in an "#if" statement to make the whole thing vanish when the parameter is not used. For instance, the "#if" statement in the following example reads "#if:the parameter ''mass'' has been supplied |then display it, followed by 'kg'":
<syntaxhighlight lang="wikitext" style="overflow:auto">
| label6 = Mass
| data6 = {{ #if: {{{mass|}}} | {{{mass}}} kg }}
</syntaxhighlight>{{clear}}
For more on #if, see [[meta:ParserFunctions##if:|here]].
==== Hiding headers when all its data fields are empty ====
You can also make headers automatically hide when their section is empty (has no data-row showing).
Consider this situation:
{{Infobox
| title = Example: header with & without data
| headerstyle = background:lightgrey
| header1 = Header1 with empty section
| label2 = label2 text | data2 =
| label3 = label3 text | data3 =
| label4 = label4 text | data4 =
| header5 = Header5 with data below
| label6 = label6 text | data6 = Some value
}}
<syntaxhighlight lang="wikitext" style="overflow:auto">
{{Infobox
| title = Example: header with & without data
| headerstyle = background:lightgrey
| header1 = Header1 with empty section
| label2 = label2 text | data2 =
| label3 = label3 text | data3 =
| label4 = label4 text | data4 =
| header5 = Header5 with data below
| label6 = label6 text | data6 = Some value
}}
</syntaxhighlight>{{clear}}
If you want hide the header when no {{para|data''N''}} values are present, use '''{{para|autoheaders|y}}''':
{{Infobox
| title = Example: header with & without data
| autoheaders = y
| headerstyle = background:lightgrey
| header1 = Header1 with empty section
| label2 = label2 text | data2 =
| label3 = label3 text | data3 =
| label4 = label4 text | data4 =
| header5 = Header5 with data below
| label6 = label6 text | data6 = Some value
}}
<syntaxhighlight lang="wikitext" style="overflow:auto">
{{Infobox
| title = Example: header with & without data
| autoheaders = y
| headerstyle = background:lightgrey
| header1 = Header1 with empty section
| label2 = label2 text | data2 =
| label3 = label3 text | data3 =
| label4 = label4 text | data4 =
| header5 = Header5 with data below
| label6 = label6 text | data6 = Some value
}}
</syntaxhighlight>{{clear}}
So, header1 will be shown if any of item1, item2, or item3 is defined. If none of the three parameters are defined the header won't be shown and no empty row appears before the next visible content.
Note: if the data has empty css elements, like {{para|data|2=<span style="background:yellow;"></span>}}, this will be treated as non-empty (having data).
If {{para|autoheaders|y}} but there are items that you ''do not'' want to trigger a header, place {{para|headerX|_BLANK_}}. This will serve as an empty header and separate it from the subsequent items.
{{Infobox
| title = Example: blank header with & without data
| autoheaders = y
| headerstyle = background:lightgrey
| header1 = Header1 with empty section
| label2 = label2 text | data2 =
| label3 = label3 text | data3 =
| label4 = label4 text | data4 =
| header5 = _BLANK_
| label6 = label6 text | data6 = Some value, but does not trigger header1 or show header5
}}
<syntaxhighlight lang="wikitext" style="overflow:auto">
{{Infobox
| title = Example: header with & without data
| autoheaders = y
| headerstyle = background:lightgrey
| header1 = Header1 with empty section
| label2 = label2 text | data2 =
| label3 = label3 text | data3 =
| label4 = label4 text | data4 =
| header5 = _BLANK_
| label6 = label6 text | data6 = Some value, but does not trigger header1 or show header5
}}
</syntaxhighlight>{{clear}}
=== Footer ===
; below : Text to put in the bottom cell. The bottom cell is intended for footnotes, see-also, and other such information.
== Presentation parameters ==
=== Italic titles ===
Titles of articles with infoboxes may be made italic, in line with [[WP:ITALICTITLE]], by passing the <code>italic title</code> parameter.
* Turn on italic titles by passing {{para|italic title|<nowiki>{{{italic title|}}}</nowiki>}} from the infobox.
* Turn off by default (notably because only Latin script may be safely rendered in this style and italic may be needed to distinguish foreign language from local English language only in that script, but would be difficult to read for other scripts) but allow some instances to be made italic by passing {{para|italic title|<nowiki>{{{italic title|no}}}</nowiki>}}
* Do not make any titles italic by not passing the parameter at all.
=== CSS styling ===
{{div col}}
; bodystyle : Applies to the infobox table as a whole
; titlestyle : Applies only to the title caption. Adding a background color is usually inadvisable since the text is rendered "outside" the infobox.
; abovestyle : Applies only to the "above" cell at the top. The default style has font-size:125%; since this cell is usually used for a title, if you want to use the above cell for regular-sized text include "font-size:100%;" in the abovestyle.
; imagestyle : Applies to the cell the image is in. This includes the text of the image caption, but you should set text properties with captionstyle instead of imagestyle in case the caption is moved out of this cell in the future.
; captionstyle : Applies to the text of the image caption.
; rowstyle(n) : This parameter is inserted into the <code>style</code> attribute for the specified row.
; headerstyle : Applies to all header cells
; subheaderstyle : Applies to all subheader cells
; labelstyle : Applies to all label cells
; datastyle : Applies to all data cells
; belowstyle : Applies only to the below cell
{{div col end}}
=== HTML classes and microformats ===
{{div col}}
; bodyclass : This parameter is inserted into the <code>class</code> attribute for the infobox as a whole.
; titleclass : This parameter is inserted into the <code>class</code> attribute for the infobox's '''title''' caption.
<!-- currently not implemented in Lua module
; aboverowclass : This parameter is inserted into the <code>class</code> attribute for the complete table row the '''above''' cell is on.
-->
; aboveclass : This parameter is inserted into the <code>class</code> attribute for the infobox's '''above''' cell.
; subheaderrowclass(n) : This parameter is inserted into the <code>class</code> attribute for the complete table row the '''subheader''' is on.
; subheaderclass(n) : This parameter is inserted into the <code>class</code> attribute for the infobox's '''subheader'''.
; imagerowclass(n) : These parameters are inserted into the <code>class</code> attribute for the complete table row their respective '''image''' is on.
; imageclass : This parameter is inserted into the <code>class</code> attribute for the '''image'''.
; rowclass(n) : This parameter is inserted into the <code>class</code> attribute for the specified row including the '''label''' and '''data''' cells.
; class(n) : This parameter is inserted into the <code>class</code> attribute for the '''data''' cell of the specified row. If there's no '''data''' cell it has no effect.
<!-- currently not implemented in Lua module
; belowrowclass : This parameter is inserted into the <code>class</code> attribute for the complete table row the '''below''' cell is on.
-->
; belowclass : This parameter is inserted into the <code>class</code> attribute for the infobox's '''below''' cell.
{{div col end}}
This template supports the addition of microformat information. This is done by adding "class" attributes to various data cells, indicating what kind of information is contained within. Multiple class names may be specified, separated by spaces, some of them being used as selectors for custom styling according to a project policy or to the skin selected in user preferences, others being used for microformats.
To flag an infobox as containing [[hCard]] information, for example, add the following parameter:
<syntaxhighlight lang="wikitext" style="overflow:auto">
| bodyclass = vcard
</syntaxhighlight>{{clear}}
And for each row containing a data cell that's part of the vcard, add a corresponding class parameter:
<syntaxhighlight lang="wikitext" style="overflow:auto">
| class1 = fn
| class2 = org
| class3 = tel
</syntaxhighlight>{{clear}}
...and so forth. "above" and "title" can also be given classes, since these are usually used to display the name of the subject of the infobox.
See [[Wikipedia:WikiProject Microformats]] for more information on adding microformat information to Wikipedia, and [[microformat]] for more information on microformats in general.
== Examples ==
Notice how the row doesn't appear in the displayed infobox when a '''label''' is defined without an accompanying '''data''' cell, and how all of them are displayed when a '''header''' is defined on the same row as a '''data''' cell. Also notice that '''subheaders''' are not bold by default like the '''headers''' used to split the main data section, because this role is meant to be for the '''above''' cell :
{{Suppress categories|
{{Infobox
|name = Infobox/doc
|bodystyle =
|titlestyle =
|abovestyle = background:#cfc;
|subheaderstyle =
|title = Test Infobox
|above = Above text
|subheader = Subheader above image
|subheader2 = Second subheader
|imagestyle =
|captionstyle =
|image = [[File:Example-serious.jpg|200px|alt=Example alt text]]
|caption = Caption displayed below File:Example-serious.jpg
|headerstyle = background:#ccf;
|labelstyle = background:#ddf;
|datastyle =
|header1 = Header defined alone
| label1 =
| data1 =
|header2 =
| label2 = Label defined alone does not display (needs data, or is suppressed)
| data2 =
|header3 =
| label3 =
| data3 = Data defined alone
|header4 = All three defined (header, label, data, all with same number)
| label4 = does not display (same number as a header)
| data4 = does not display (same number as a header)
|header5 =
| label5 = Label and data defined (label)
| data5 = Label and data defined (data)
|belowstyle = background:#ddf;
|below = Below text
}}
}}
<syntaxhighlight lang="wikitext">
{{Infobox
|name = Infobox/doc
|bodystyle =
|titlestyle =
|abovestyle = background:#cfc;
|subheaderstyle =
|title = Test Infobox
|above = Above text
|subheader = Subheader above image
|subheader2 = Second subheader
|imagestyle =
|captionstyle =
|image = [[File:Example-serious.jpg|200px|alt=Example alt text]]
|caption = Caption displayed below File:Example-serious.jpg
|headerstyle = background:#ccf;
|labelstyle = background:#ddf;
|datastyle =
|header1 = Header defined alone
| label1 =
| data1 =
|header2 =
| label2 = Label defined alone does not display (needs data, or is suppressed)
| data2 =
|header3 =
| label3 =
| data3 = Data defined alone
|header4 = All three defined (header, label, data, all with same number)
| label4 = does not display (same number as a header)
| data4 = does not display (same number as a header)
|header5 =
| label5 = Label and data defined (label)
| data5 = Label and data defined (data)
|belowstyle = background:#ddf;
|below = Below text
}}
</syntaxhighlight>
For this example, the {{para|bodystyle}} and {{para|labelstyle}} parameters are used to adjust the infobox width and define a default width for the column of labels:
{{Infobox
|name = Infobox/doc
|bodystyle = width:20em
|titlestyle =
|title = Test Infobox
|headerstyle =
|labelstyle = width:33%
|datastyle =
|header1 =
| label1 = Label 1
| data1 = Data 1
|header2 =
| label2 = Label 2
| data2 = Data 2
|header3 =
| label3 = Label 3
| data3 = Data 3
|header4 = Header 4
| label4 =
| data4 =
|header5 =
| label5 = Label 5
| data5 = Data 5: Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
|belowstyle =
|below = Below text
}}
<syntaxhighlight lang="wikitext">
{{Infobox
|name = Infobox/doc
|bodystyle = width:20em
|titlestyle =
|title = Test Infobox
|headerstyle =
|labelstyle = width:33%
|datastyle =
|header1 =
| label1 = Label 1
| data1 = Data 1
|header2 =
| label2 = Label 2
| data2 = Data 2
|header3 =
| label3 = Label 3
| data3 = Data 3
|header4 = Header 4
| label4 =
| data4 =
|header5 =
| label5 = Label 5
| data5 = Data 5: Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
|belowstyle =
|below = Below text
}}
</syntaxhighlight>
== Embedding ==
<!--Linked from [[Template:Subinfobox bodystyle/doc]]-->
One infobox template can be embedded into another using the {{para|child}} parameter. This feature can be used to create a modular infobox, or to create better-defined logical sections. Long ago, it was necessary to use embedding in order to create infoboxes with more than 99 rows; but nowadays there's no limit to the number of rows that can be defined in a single instance of <code><nowiki>{{infobox}}</nowiki></code>.
{{Infobox
| title = Top level title
| data1 = {{Infobox | decat = yes | child = yes
| title = First subsection
| label1= Label 1.1
| data1 = Data 1.1
}}
| data2 = {{Infobox | decat = yes | child = yes
|title = Second subsection
| label1= Label 2.1
| data1 = Data 2.1
}}
| belowstyle =
| below = Below text
}}
<syntaxhighlight lang="wikitext" style="overflow:auto">
{{Infobox
| title = Top level title
| data1 = {{Infobox | decat = yes | child = yes
| title = First subsection
| label1= Label 1.1
| data1 = Data 1.1
}}
| data2 = {{Infobox | decat = yes | child = yes
|title = Second subsection
| label1= Label 2.1
| data1 = Data 2.1
}}
| belowstyle =
| below = Below text
}}
</syntaxhighlight>{{clear}}
Note, in the examples above, the child infobox is placed in a <code>data</code> field, not a <code>header</code> field. Notice that the section subheadings are not in bold font if bolding is not explicitly specified. To obtain bold section headings, place the child infobox in a '''header''' field (but not in a '''label''' field because it would not be displayed!), either using
{{Infobox
| title = Top level title
| header1 = {{Infobox | decat = yes | child = yes
| title = First subsection
| label1= Label 1.1
| data1 = Data 1.1
}}
| header2 = {{Infobox | decat = yes | child = yes
| title = Second subsection
| label1= Label 2.1
| data1 = Data 2.1
}}
| belowstyle =
| below = Below text
}}
<syntaxhighlight lang="wikitext" style="overflow:auto">
{{Infobox
| title = Top level title
| header1 = {{Infobox | decat = yes | child = yes
| title = First subsection
| label1= Label 1.1
| data1 = Data 1.1
}}
| header2 = {{Infobox | decat = yes | child = yes
| title = Second subsection
| label1= Label 2.1
| data1 = Data 2.1
}}
| belowstyle =
| below = Below text
}}
</syntaxhighlight>{{clear}}
or,
{{Infobox
| title = Top level title
| header1 = First subsection
{{Infobox | decat = yes | child = yes
| label1 = Label 1.1
| data1 = Data 1.1
}}
| header2 = Second subsection
{{Infobox | decat = yes | child = yes
| label1 = Label 2.1
| data1 = Data 2.1
}}
| belowstyle =
| below = Below text
}}
<syntaxhighlight lang="wikitext" style="overflow:auto">
{{Infobox
| title = Top level title
| header1 = First subsection
{{Infobox | decat = yes | child = yes
| label1 = Label 1.1
| data1 = Data 1.1
}}
| header2 = Second subsection
{{Infobox | decat = yes | child = yes
| label1 = Label 2.1
| data1 = Data 2.1
}}
| belowstyle =
| below = Below text
}}
</syntaxhighlight>{{clear}}
Note that omitting the {{para|title}} parameter, and not including any text preceding the embedded infobox, may result in spurious blank table rows, creating gaps in the visual presentation. The garbage output can be suppressed using {{para|rowstyleN|display: none}}, replacing N with the data/header number.
[[Wikipedia:WikiProject Infoboxes/embed]] includes some links to Wikipedia articles which include infoboxes embedded within other infoboxes.
== Subboxes ==
An alternative method for embedding is to use {{para|subbox|yes}}, which removes the outer border from the infobox, but preserves the interior structure. One feature of this approach is that the parent and child boxes need not have the same structure, and the label and data fields are not aligned between the parent and child boxes because they are not in the same parent table.
{{Infobox
| headerstyle = background-color:#eee;
| labelstyle = background-color:#eee;
| header1 = Main 1
| header2 = Main 2
| data3 = {{Infobox | subbox = yes
| headerstyle = background-color:#ccc;
| labelstyle = background-color:#ddd;
| header1 = Sub 3-1
| header2 = Sub 3-2
| label3 = Label 3-3 | data3 = Data 3-3
}}
| data4 = {{Infobox | subbox = yes
| labelstyle = background-color:#ccc;
| label1 = Label 4-1 | data1 = Data 4-1
}}
| label5 = Label 5 | data5 = Data 5
| header6 = Main 6
}}
<syntaxhighlight lang="wikitext" style="overflow:auto">
{{Infobox
| headerstyle = background-color:#eee;
| labelstyle = background-color:#eee;
| header1 = Main 1
| header2 = Main 2
| data3 = {{Infobox | subbox = yes
| headerstyle = background-color:#ccc;
| labelstyle = background-color:#ddd;
| header1 = Sub 3-1
| header2 = Sub 3-2
| label3 = Label 3-3 | data3 = Data 3-3
}}
| data4 = {{Infobox | subbox = yes
| labelstyle = background-color:#ccc;
| label1 = Label 4-1 | data1 = Data 4-1
}}
| label5 = Label 5 | data5 = Data 5
| header6 = Main 6
}}
</syntaxhighlight>{{clear}}
Similar embedding techniques may be used within content parameters of some other templates generating tables (such as [[:Template:Sidebar|Sidebar]]) :
{{Sidebar
| navbar = off
| headingstyle = background-color:#eee;
| heading1 = Heading 1
| heading2 = Heading 2
| content3 = {{Infobox | subbox = yes
| headerstyle = background-color:#ccc;
| labelstyle = background-color:#ddd;
| header1 = Sub 3-1
| header2 = Sub 3-2
| label3 = Label 3-3 | data3 = Data 3-3
}}
| content4 = {{Infobox | subbox = yes
| labelstyle = background-color:#ccc;
| label1 = Label 4-1 | data1 = Data 4-1
}}
| heading5 = Heading 5
}}
<syntaxhighlight lang="wikitext" style="overflow:auto">
{{Sidebar
| navbar = off
| headingstyle = background-color:#eee;
| heading1 = Heading 1
| heading2 = Heading 2
| content3 = {{Infobox | subbox = yes
| headerstyle = background-color:#ccc;
| labelstyle = background-color:#ddd;
| header1 = Sub 3-1
| header2 = Sub 3-2
| label3 = Label 3-3 | data3 = Data 3-3
}}
| content4 = {{Infobox | subbox = yes
| labelstyle = background-color:#ccc;
| label1 = Label 4-1 | data1 = Data 4-1
}}
| heading5 = Heading 5
}}
</syntaxhighlight>{{clear}}
Note that the default padding of the parent data cell containing each subbox is still visible, so the subboxes are slightly narrower than the parent box and there's a higher vertical spacing between standard cells of the parent box than between cells of distinct subboxes.
== Controlling line-breaking in embedded bulletless lists ==
Template {{tlx|nbsp}} may be used with {{tlx|wbr}} and {{tlx|nowrap}} to control line-breaking in bulletless lists embedded in infoboxes (e.g. cast list in {{tlx|Infobox film}}), to prevent wrapped long entries from being confused with multiple entries. See [[Template:Wbr/doc#Controlling line-breaking in infoboxes]] for details.
== Full blank syntax ==
(Note: there is no limit to the number of possible rows; only 20 are given below since infoboxes larger than that will be relatively rare. Just extend the numbering as needed. The microformat "class" parameters are also omitted as they are not commonly used.)
<syntaxhighlight lang="wikitext" style="overflow:auto">
{{Infobox
| name = {{subst:PAGENAME}}
| child = {{{child|}}}
| subbox = {{{subbox|}}}
| italic title = {{{italic title|no}}}
| templatestyles =
| child templatestyles =
| grandchild templatestyles =
| bodystyle =
| titlestyle =
| abovestyle =
| subheaderstyle =
| title =
| above =
| subheader =
| imagestyle =
| captionstyle =
| image =
| caption =
| image2 =
| caption2 =
| headerstyle =
| labelstyle =
| datastyle =
| header1 =
| label1 =
| data1 =
| header2 =
| label2 =
| data2 =
| header3 =
| label3 =
| data3 =
| header4 =
| label4 =
| data4 =
| header5 =
| label5 =
| data5 =
| header6 =
| label6 =
| data6 =
| header7 =
| label7 =
| data7 =
| header8 =
| label8 =
| data8 =
| header9 =
| label9 =
| data9 =
| header10 =
| label10 =
| data10 =
| header11 =
| label11 =
| data11 =
| header12 =
| label12 =
| data12 =
| header13 =
| label13 =
| data13 =
| header14 =
| label14 =
| data14 =
| header15 =
| label15 =
| data15 =
| header16 =
| label16 =
| data16 =
| header17 =
| label17 =
| data17 =
| header18 =
| label18 =
| data18 =
| header19 =
| label19 =
| data19 =
| header20 =
| label20 =
| data20 =
| belowstyle =
| below =
}}
</syntaxhighlight>{{clear}}
{{Help:Infobox/user style}}
== Porting to other MediaWikis ==
The infobox template requires the [[:mw:Extension:Scribunto|Scribunto]] and [[:mw:Extension:TemplateStyles|TemplateStyles]] extensions. [[Wikipedia:WikiProject Transwiki|WikiProject Transwiki]] has a version of this template that has been modified to work on other MediaWikis.
== TemplateData ==
{{TemplateData header}}
<templatedata>
{
"description": "This template is intended as a meta template, a template used for constructing other templates. In general, it is not meant for use directly in an article but can be used on a one-off basis if required.",
"format": "{{_\n| ________________ = _\n}}\n",
"params": {
"title": {
"label": "Title",
"description": "Title displayed above the infobox",
"type": "string",
"suggested": true
},
"image": {
"label": "Image",
"description": "Image illustrating the topic. Use full image syntax.",
"type": "content",
"suggested": true,
"example": "[[File:example.png|200px|alt=Example alt text]]"
},
"caption": {
"label": "Caption",
"description": "caption for the image",
"type": "content",
"suggested": true
}
},
"paramOrder": [
"title",
"image",
"caption"
]
}
</templatedata>
==Tracking categories==
* {{Category link with count|Articles with missing Wikidata information}}
* {{Category link with count|Articles using infobox templates with no data rows}}
* {{Category link with count|Pages using embedded infobox templates with the title parameter}}
==See also==
* [[Module:Infobox]], the [[WP:LUA|Lua]] module on which this template is based
* [[Module:Check for unknown parameters]]
* {{tl|Infobox3cols}}
* {{tl|Navbox}} and {{tl|Sidebar}}
* [[Wikipedia:List of infoboxes|List of infoboxes]]
* [[:Module:InfoboxImage]]
<includeonly>{{Sandbox other||
<!-- Categories below this line, please; interwikis at Wikidata -->
[[Category:Infobox templates| ]]
[[Category:Wikipedia metatemplates|Infobox]]
[[Category:Templates generating microformats]]
[[Category:Templates that add a tracking category]]
[[Category:Templates based on the Infobox Lua module]]
}}</includeonly>
b7ba187ea76ee960bbe295ad01c44c646eaedadb
Module:Unicode data
828
182
369
2023-09-12T16:56:59Z
[[w>Drmccreedy
0
Add new block for Unicode v15.1
Scribunto
text/plain
local p = {}
local floor = math.floor
local function errorf(level, ...)
if type(level) == "number" then
return error(string.format(...), level + 1)
else -- level is actually the format string.
return error(string.format(level, ...), 2)
end
end
local function binary_range_search(codepoint, ranges)
local low, mid, high
low, high = 1, ranges.length or require "Module:TableTools".length(ranges)
while low <= high do
mid = floor((low + high) / 2)
local range = ranges[mid]
if codepoint < range[1] then
high = mid - 1
elseif codepoint <= range[2] then
return range, mid
else
low = mid + 1
end
end
return nil, mid
end
p.binary_range_search = binary_range_search
--[[
local function linear_range_search(codepoint, ranges)
for i, range in ipairs(ranges) do
if range[1] <= codepoint and codepoint <= range[2] then
return range
end
end
end
--]]
-- Load a module by indexing "loader" with the name of the module minus the
-- "Module:Unicode data/" part. For instance, loader.blocks returns
-- [[Module:Unicode data/blocks]]. If a module cannot be loaded, false will be
-- returned.
local loader = setmetatable({}, {
__index = function (self, key)
local success, data = pcall(mw.loadData, "Module:Unicode data/" .. key)
if not success then
data = false
end
self[key] = data
return data
end
})
-- For the algorithm used to generate Hangul Syllable names,
-- see "Hangul Syllable Name Generation" in section 3.12 of the
-- Unicode Specification:
-- https://www.unicode.org/versions/Unicode11.0.0/ch03.pdf
local name_hooks = {
{ 0x00, 0x1F, "<control-%04X>" }, -- C0 control characters
{ 0x7F, 0x9F, "<control-%04X>" }, -- DEL and C1 control characters
{ 0x3400, 0x4DBF, "CJK UNIFIED IDEOGRAPH-%04X" }, -- CJK Ideograph Extension A
{ 0x4E00, 0x9FFF, "CJK UNIFIED IDEOGRAPH-%04X" }, -- CJK Ideograph
{ 0xAC00, 0xD7A3, function (codepoint) -- Hangul Syllables
local Hangul_data = loader.Hangul
local syllable_index = codepoint - 0xAC00
return ("HANGUL SYLLABLE %s%s%s"):format(
Hangul_data.leads[floor(syllable_index / Hangul_data.final_count)],
Hangul_data.vowels[floor((syllable_index % Hangul_data.final_count)
/ Hangul_data.trail_count)],
Hangul_data.trails[syllable_index % Hangul_data.trail_count]
)
end },
-- High Surrogates, High Private Use Surrogates, Low Surrogates
{ 0xD800, 0xDFFF, "<surrogate-%04X>" },
{ 0xE000, 0xF8FF, "<private-use-%04X>" }, -- Private Use
-- CJK Compatibility Ideographs
{ 0xF900, 0xFA6D, "CJK COMPATIBILITY IDEOGRAPH-%04X" },
{ 0xFA70, 0xFAD9, "CJK COMPATIBILITY IDEOGRAPH-%04X" },
{ 0x17000, 0x187F7, "TANGUT IDEOGRAPH-%04X" }, -- Tangut Ideograph
{ 0x18800, 0x18AFF, function (codepoint)
return ("TANGUT COMPONENT-%03d"):format(codepoint - 0x187FF)
end },
{ 0x18D00, 0x18D08, "TANGUT IDEOGRAPH-%04X" }, -- Tangut Ideograph Supplement
{ 0x1B170, 0x1B2FB, "NUSHU CHARACTER-%04X" }, -- Nushu
{ 0x20000, 0x2A6DF, "CJK UNIFIED IDEOGRAPH-%04X" }, -- CJK Ideograph Extension B
{ 0x2A700, 0x2B739, "CJK UNIFIED IDEOGRAPH-%04X" }, -- CJK Ideograph Extension C
{ 0x2B740, 0x2B81D, "CJK UNIFIED IDEOGRAPH-%04X" }, -- CJK Ideograph Extension D
{ 0x2B820, 0x2CEA1, "CJK UNIFIED IDEOGRAPH-%04X" }, -- CJK Ideograph Extension E
{ 0x2CEB0, 0x2EBE0, "CJK UNIFIED IDEOGRAPH-%04X" }, -- CJK Ideograph Extension F
-- CJK Compatibility Ideographs Supplement (Supplementary Ideographic Plane)
{ 0x2F800, 0x2FA1D, "CJK COMPATIBILITY IDEOGRAPH-%04X" },
{ 0xE0100, 0xE01EF, function (codepoint) -- Variation Selectors Supplement
return ("VARIATION SELECTOR-%d"):format(codepoint - 0xE0100 + 17)
end},
{ 0x30000, 0x3134A, "CJK UNIFIED IDEOGRAPH-%04X" }, -- CJK Ideograph Extension G
{ 0x31350, 0x323AF, "CJK UNIFIED IDEOGRAPH-%04X" }, -- CJK Ideograph Extension H
{ 0x2EBF0, 0x2EE5D, "CJK UNIFIED IDEOGRAPH-%04X" }, -- CJK Ideograph Extension I
{ 0xF0000, 0xFFFFD, "<private-use-%04X>" }, -- Plane 15 Private Use
{ 0x100000, 0x10FFFD, "<private-use-%04X>" } -- Plane 16 Private Use
}
name_hooks.length = #name_hooks
local name_range_cache
local function generate_name(data, codepoint)
if type(data) == "string" then
return data:format(codepoint)
else
return data(codepoint)
end
end
--[[
-- Checks that the code point is a number and in range.
-- Does not check whether code point is an integer.
-- Not used
local function check_codepoint(funcName, argIdx, val)
require 'libraryUtil'.checkType(funcName, argIdx, val, 'number')
if codepoint < 0 or 0x10FFFF < codepoint then
errorf("Codepoint %04X out of range", codepoint)
end
end
--]]
-- https://www.unicode.org/versions/Unicode11.0.0/ch04.pdf, section 4.8
function p.lookup_name(codepoint)
-- U+FDD0-U+FDEF and all code points ending in FFFE or FFFF are Unassigned
-- (Cn) and specifically noncharacters:
-- https://www.unicode.org/faq/private_use.html#nonchar4
if 0xFDD0 <= codepoint and (codepoint <= 0xFDEF
or floor(codepoint % 0x10000) >= 0xFFFE) then
return ("<noncharacter-%04X>"):format(codepoint)
end
if name_range_cache -- Check if previously used "name hook" applies to this code point.
and codepoint >= name_range_cache[1]
and codepoint <= name_range_cache[2] then
return generate_name(name_range_cache[3], codepoint)
end
local range = binary_range_search(codepoint, name_hooks)
if range then
name_range_cache = range
return generate_name(range[3], codepoint)
end
local data = loader[('names/%03X'):format(codepoint / 0x1000)]
if data and data[codepoint] then
return data[codepoint]
-- Unassigned (Cn) consists of noncharacters and reserved characters.
-- The character has been established not to be a noncharacter,
-- and if it were assigned, its name would already been retrieved,
-- so it must be reserved.
else
return ("<reserved-%04X>"):format(codepoint)
end
end
--[[
-- No image data modules on Wikipedia yet.
function p.lookup_image(codepoint)
local data = loader[('images/%03X'):format(codepoint / 0x1000)]
if data then
return data[codepoint]
end
end
--]]
local planes = {
[ 0] = "Basic Multilingual Plane";
[ 1] = "Supplementary Multilingual Plane";
[ 2] = "Supplementary Ideographic Plane";
[ 3] = "Tertiary Ideographic Plane";
[14] = "Supplementary Special-purpose Plane";
[15] = "Supplementary Private Use Area-A";
[16] = "Supplementary Private Use Area-B";
}
-- Load [[Module:Unicode data/blocks]] if needed and assign it to this variable.
local blocks
local function block_iter(blocks, i)
i = i + 1
local data = blocks[i]
if data then
-- Unpack doesn't work on tables loaded with mw.loadData.
return i, data[1], data[2], data[3]
end
end
-- An ipairs-type iterator generator for the list of blocks.
function p.enum_blocks()
local blocks = loader.blocks
return block_iter, blocks, 0
end
function p.lookup_plane(codepoint)
local i = floor(codepoint / 0x10000)
return planes[i] or ("Plane %u"):format(i)
end
function p.lookup_block(codepoint)
local blocks = loader.blocks
local range = binary_range_search(codepoint, blocks)
if range then
return range[3]
else
return "No Block"
end
end
function p.get_block_info(name)
for i, block in ipairs(loader.blocks) do
if block[3] == name then
return block
end
end
end
function p.is_valid_pagename(pagename)
local has_nonws = false
for cp in mw.ustring.gcodepoint(pagename) do
if (cp == 0x0023) -- #
or (cp == 0x005B) -- [
or (cp == 0x005D) -- ]
or (cp == 0x007B) -- {
or (cp == 0x007C) -- |
or (cp == 0x007D) -- }
or (cp == 0x180E) -- MONGOLIAN VOWEL SEPARATOR
or ((cp >= 0x2000) and (cp <= 0x200A)) -- spaces in General Punctuation block
or (cp == 0xFFFD) -- REPLACEMENT CHARACTER
then
return false
end
local printable, result = p.is_printable(cp)
if not printable then
return false
end
if result ~= "space-separator" then
has_nonws = true
end
end
return has_nonws
end
local function manual_unpack(what, from)
if what[from + 1] == nil then
return what[from]
end
local result = {}
from = from or 1
for i, item in ipairs(what) do
if i >= from then
table.insert(result, item)
end
end
return unpack(result)
end
local function compare_ranges(range1, range2)
return range1[1] < range2[1]
end
-- Creates a function to look up data in a module that contains "singles" (a
-- code point-to-data map) and "ranges" (an array containing arrays that contain
-- the low and high code points of a range and the data associated with that
-- range).
-- "loader" loads and returns the "singles" and "ranges" tables.
-- "match_func" is passed the code point and either the data or the "dots", and
-- generates the final result of the function.
-- The varargs ("dots") describes the default data to be returned if there wasn't
-- a match.
-- In case the function is used more than once, "cache" saves ranges that have
-- already been found to match, or a range whose data is the default if there
-- was no match.
local function memo_lookup(data_module_subpage, match_func, ...)
local dots = { ... }
local cache = {}
local singles, ranges
return function (codepoint)
if not singles then
local data_module = loader[data_module_subpage]
singles, ranges = data_module.singles, data_module.ranges
end
if singles[codepoint] then
return match_func(codepoint, singles[codepoint])
end
local range = binary_range_search(codepoint, cache)
if range then
return match_func(codepoint, manual_unpack(range, 3))
end
local range, index = binary_range_search(codepoint, ranges)
if range then
table.insert(cache, range)
table.sort(cache, compare_ranges)
return match_func(codepoint, manual_unpack(range, 3))
end
if ranges[index] then
local dots_range
if codepoint > ranges[index][2] then
dots_range = {
ranges[index][2] + 1,
ranges[index + 1] and ranges[index + 1][1] - 1 or 0x10FFFF,
unpack(dots)
}
else -- codepoint < range[index][1]
dots_range = {
ranges[index - 1] and ranges[index - 1][2] + 1 or 0,
ranges[index][1] - 1,
unpack(dots)
}
end
table.sort(cache, compare_ranges)
end
return match_func(codepoint)
end
end
-- Get a code point's combining class value in [[Module:Unicode data/combining]],
-- and return whether this value is not zero. Zero is assigned as the default
-- if the combining class value is not found in this data module.
-- That is, return true if character is combining, or false if it is not.
-- See https://www.unicode.org/reports/tr44/#Canonical_Combining_Class_Values for
-- more information.
p.is_combining = memo_lookup(
"combining",
function (codepoint, combining_class)
return combining_class and combining_class ~= 0 or false
end,
0)
function p.add_dotted_circle(str)
return (mw.ustring.gsub(str, ".",
function(char)
if p.is_combining(mw.ustring.codepoint(char)) then
return '◌' .. char
end
end))
end
local lookup_control = memo_lookup(
"control",
function (codepoint, ccc)
return ccc or "assigned"
end,
"assigned")
p.lookup_control = lookup_control
function p.is_assigned(codepoint)
return lookup_control(codepoint) ~= "unassigned"
end
function p.is_printable(codepoint)
local result = lookup_control(codepoint)
return (result == "assigned") or (result == "space-separator"), result
end
function p.is_whitespace(codepoint)
local result = lookup_control(codepoint)
return (result == "space-separator"), result
end
p.lookup_category = memo_lookup(
"category",
function (codepoint, category)
return category
end,
"Cn")
local lookup_script = memo_lookup(
"scripts",
function (codepoint, script_code)
return script_code or 'Zzzz'
end,
"Zzzz")
p.lookup_script = lookup_script
function p.get_best_script(str)
-- Check type of argument, because mw.text.decode coerces numbers to strings!
require "libraryUtil".checkType("get_best_script", 1, str, "string")
-- Convert HTML character references (including named character references,
-- or character entities) to characters.
str = mw.text.decode(str, true)
local scripts = {}
for codepoint in mw.ustring.gcodepoint(str) do
local script = lookup_script(codepoint)
-- Ignore "Inherited", "Undetermined", or "Uncoded" scripts.
if not (script == "Zyyy" or script == "Zinh" or script == "Zzzz") then
scripts[script] = true
end
end
-- If scripts does not contain two or more keys,
-- return first and only key (script code) in table.
if not next(scripts, next(scripts)) then
return next(scripts)
end -- else return majority script, or else "Zzzz"?
end
function p.is_Latin(str)
require "libraryUtil".checkType("get_best_script", 1, str, "string")
str = mw.text.decode(str, true)
-- Search for the leading bytes that introduce the UTF-8 encoding of the
-- code points U+0340-U+10FFFF. If they are not found and there is at least
-- one Latin-script character, the string counts as Latin, because the rest
-- of the characters can only be Zyyy, Zinh, and Zzzz.
-- The only scripts found below U+0370 (the first code point of the Greek
-- and Coptic block) are Latn, Zyyy, Zinh, and Zzzz.
-- See the codepage in the [[UTF-8]] article.
if not str:find "[\205-\244]" then
for codepoint in mw.ustring.gcodepoint(str) do
if lookup_script(codepoint) == "Latn" then
return true
end
end
end
local Latn = false
for codepoint in mw.ustring.gcodepoint(str) do
local script = lookup_script(codepoint)
if script == "Latn" then
Latn = true
elseif not (script == "Zyyy" or script == "Zinh"
or script == "Zzzz") then
return false
end
end
return Latn
end
-- Checks that a string contains only characters belonging to right-to-left
-- scripts, or characters of ignorable scripts.
function p.is_rtl(str)
require "libraryUtil".checkType("get_best_script", 1, str, "string")
str = mw.text.decode(str, true)
-- Search for the leading bytes that introduce the UTF-8 encoding of the
-- code points U+0580-U+10FFFF. If they are not found, the string can only
-- have characters from a left-to-right script, because the first code point
-- in a right-to-left script is U+0591, in the Hebrew block.
if not str:find "[\214-\244]" then
return false
end
local result = false
local rtl = loader.scripts.rtl
for codepoint in mw.ustring.gcodepoint(str) do
local script = lookup_script(codepoint)
if rtl[script] then
result = true
elseif not (script == "Zyyy" or script == "Zinh"
or script == "Zzzz") then
return false
end
end
return result
end
--[[--------------------------< I S _ R T L _ F R A M E >------------------------------------------------------
external entry from an {{#invoke:}} to determine if a string of text is rtl. Strips html and html-like tags so
that those tags don't corrupt the is-rtl-is-not-rtl determination; this added for the cases where the rtl text
has <br /> tags.
]]
function p.is_rtl_frame (frame)
local str = frame.args[1]; -- get the string from the {{#invoke:}} frame
str = str:gsub ('%b<>', ''); -- strip any html and html-like tags
return p.is_rtl (str); -- return if whatever remains rtl; false else
end
local function get_codepoint(args, arg)
local codepoint_string = args[arg]
or errorf(2, "Parameter %s is required", tostring(arg))
local codepoint = tonumber(codepoint_string, 16)
or errorf(2, "Parameter %s is not a code point in hexadecimal base",
tostring(arg))
if not (0 <= codepoint and codepoint <= 0x10FFFF) then
errorf(2, "code point in parameter %s out of range", tostring(arg))
end
return codepoint
end
local function get_func(args, arg, prefix)
local suffix = args[arg]
or errorf(2, "Parameter %s is required", tostring(arg))
suffix = mw.text.trim(suffix)
local func_name = prefix .. suffix
local func = p[func_name]
or errorf(2, "There is no function '%s'", func_name)
return func
end
-- This function allows any of the "lookup" functions to be invoked. The first
-- parameter is the word after "lookup_"; the second parameter is the code point
-- in hexadecimal base.
function p.lookup(frame)
local func = get_func(frame.args, 1, "lookup_")
local codepoint = get_codepoint(frame.args, 2)
local result = func(codepoint)
if func == p.lookup_name then
-- Prevent code point labels such as <control-0000> from being
-- interpreted as HTML tags.
result = result:gsub("<", "<")
end
return result
end
function p.is(frame)
local func = get_func(frame.args, 1, "is_")
-- is_Latin and is_valid_pagename take strings.
if func == p.is_Latin or func == p.is_valid_pagename or func == p.is_rtl then
return (func(frame.args[2]))
else -- The rest take code points.
local codepoint = get_codepoint(frame.args, 2)
return (func(codepoint)) -- Adjust to one result.
end
end
return p
898b5f0689e2646f633acbbd08143920c87abef2
Main Page
0
1
1
2023-09-13T16:44:34Z
MediaWiki default
1
Create main page
wikitext
text/x-wiki
__NOTOC__
== Welcome to {{SITENAME}}! ==
This Main Page was created automatically and it seems it hasn't been replaced yet.
=== For the bureaucrat(s) of this wiki ===
Hello, and welcome to your new wiki! Thank you for choosing Miraheze for the hosting of your wiki, we hope you will enjoy our hosting.
You can immediately start working on your wiki or whenever you want.
Need help? No problem! We will help you with your wiki as needed. To start, try checking out these helpful links:
* [[mw:Special:MyLanguage/Help:Contents|MediaWiki guide]] (e.g. navigation, editing, deleting pages, blocking users)
* [[meta:Special:MyLanguage/FAQ|Miraheze FAQ]]
* [[meta:Special:MyLanguage/Request features|Request settings changes on your wiki]]. (Extensions, Skin and Logo/Favicon changes should be done through [[Special:ManageWiki]] on your wiki, see [[meta:Special:MyLanguage/ManageWiki|ManageWiki]] for more information.)
==== I still don't understand X! ====
Well, that's no problem. Even if something isn't explained in the documentation/FAQ, we are still happy to help you. You can find us here:
* [[meta:Special:MyLanguage/Help center|On our own Miraheze wiki]]
* On [[phab:|Phabricator]]
* On [https://miraheze.org/discord Discord]
* On IRC in #miraheze on irc.libera.chat ([irc://irc.libera.chat/%23miraheze direct link]; [https://web.libera.chat/?channel=#miraheze webchat])
=== For visitors of this wiki ===
Hello, the default Main Page of this wiki (this page) has not yet been replaced by the bureaucrat(s) of this wiki. The bureaucrat(s) might still be working on a Main Page, so please check again later!
21236ac3f8d65e5563b6da6b70815ca6bf1e6616
2
1
2023-09-13T16:58:08Z
Ilovethehitgameomori
2
/* Welcome to {{SITENAME}}! */
wikitext
text/x-wiki
__NOTOC__
== Welcome to {{SITENAME}}! ==
Welcome to ''Class Leads Nations I''! This is a site providing information for the game.
edc3e4a404e1ea5171f16b0f3c627d7aef9ca315
7
2
2023-09-13T20:46:03Z
2601:546:C000:5C30:414D:F99E:F0FB:B340
0
/* Welcome to Class Leads Nations I! */
wikitext
text/x-wiki
__NOTOC__
== Welcome to {{SITENAME}}! ==
Welcome to ''Class Leads Nations I''! This is a site providing information for the map game’s first season.
<h2 id="mp-otd-h2" style="clear:both; margin:0.5em; background:#cedff2; font-family:inherit; font-size:120%; font-weight:italic; border:1px solid #a3b0bf; color:#000; padding:0.2em 0.4em;">In the CLN News</h2>
<div id="mp-otd" style="padding:0.1em 0.6em 0.5em;"></div>
* The [[Tibetan Empire|Khaganate of Tibet]] has declared war on the Indian Empire, led by Emperor Ivan Sprout. The Sundanese Empire and Binbowien Empire also are participating in this war.</div>
7ffbf07ef11715ed59a8eec3746eedec48ab950f
8
7
2023-09-13T20:50:57Z
Ilovethehitgameomori
2
wikitext
text/x-wiki
__NOTOC__
== Welcome to {{SITENAME}}! ==
Welcome to ''Class Leads Nations I''! This is a site providing information for the map game’s first season.
* Confused on how to make a page? First, search the article you want to make - obviously, it will not exist. Press the redlink. It will allow you to make the page. Now, go to the pages [[Template:Infobox country]] or [[Template:Infobox person]] and paste the source-code into the source editing feature. Add additional text under the template about your country.</small>
<h2 id="mp-otd-h2" style="clear:both; margin:0.5em; background:#cedff2; font-family:inherit; font-size:120%; font-weight:italic; border:1px solid #a3b0bf; color:#000; padding:0.2em 0.4em;">In the CLN News</h2>
<div id="mp-otd" style="padding:0.1em 0.6em 0.5em;"></div>
* The [[Tibetan Empire|Khaganate of Tibet]] has declared war on the Indian Empire, led by Emperor Ivan Sprout. The Sundanese Empire and Binbowien Empire also are participating in this war.</div>
3610c5509378646edea61703478acee859d943ab
18
8
2023-09-13T21:51:14Z
Ilovethehitgameomori
2
wikitext
text/x-wiki
__NOTOC__
== Welcome to {{SITENAME}}! ==
Welcome to ''Class Leads Nations I''! This is a site providing information for the map game’s first season.
* Confused on how to make a page? First, search the article you want to make - obviously, it will not exist. Press the redlink. It will allow you to make the page. Now, go to the pages [[Template:Infobox country]] or [[Template:Infobox person]] (alternatively, use [[Nation template]] to work faster) and paste the source-code into the source editing feature. Add additional text under the template about your country.</small>
<h2 id="mp-otd-h2" style="clear:both; margin:0.5em; background:#cedff2; font-family:inherit; font-size:120%; font-weight:italic; border:1px solid #a3b0bf; color:#000; padding:0.2em 0.4em;">In the CLN News</h2>
<div id="mp-otd" style="padding:0.1em 0.6em 0.5em;"></div>
* The [[Tibetan Empire|Khaganate of Tibet]] has declared war on the Indian Empire, led by Emperor Ivan Sprout. The Sundanese Empire and Binbowien Empire also are participating in this war.</div>
cdcea0e8963aaaa84ae18d0e929fb9b03d9f6c9b
22
18
2023-09-13T23:05:46Z
Ilovethehitgameomori
2
New comments
wikitext
text/x-wiki
__NOTOC__
== Welcome to {{SITENAME}}! ==
Welcome to ''Class Leads Nations I''! This is a site providing information for the map game’s first season.
* Confused on how to make a page? First, search the article you want to make - obviously, it will not exist. Press the redlink. It will allow you to make the page. Now, go to the pages [[Template:Infobox country]] or [[Template:Infobox person]] (alternatively, use [[Nation template]] to work faster) and paste the source-code into the source editing feature. Add additional text under the template about your country.</small>
<h2 id="mp-otd-h2" style="clear:both; margin:0.5em; background:#cedff2; font-family:inherit; font-size:120%; font-weight:italic; border:1px solid #a3b0bf; color:#000; padding:0.2em 0.4em;">In the CLN News</h2>
<div id="mp-otd" style="padding:0.1em 0.6em 0.5em;"></div>
* The [[Tibetan Empire|Khaganate of Tibet]] has declared war on the Indian Empire, led by Emperor Ivan Sprout. The Sundanese Empire and Binbowien Empire also are participating in this war.</div>
== Comments ==
e
<br />-- [[User:Ilovethehitgameomori|Ilovethehitgameomori]] ([[User talk:Ilovethehitgameomori|talk]]) 23:05, 13 September 2023 (UTC)
36bb772ab76b2f0f82d2730d7bd8ecda259b4c36
23
22
2023-09-13T23:06:21Z
Ilovethehitgameomori
2
/* Comments */
wikitext
text/x-wiki
__NOTOC__
== Welcome to {{SITENAME}}! ==
Welcome to ''Class Leads Nations I''! This is a site providing information for the map game’s first season.
* Confused on how to make a page? First, search the article you want to make - obviously, it will not exist. Press the redlink. It will allow you to make the page. Now, go to the pages [[Template:Infobox country]] or [[Template:Infobox person]] (alternatively, use [[Nation template]] to work faster) and paste the source-code into the source editing feature. Add additional text under the template about your country.</small>
<h2 id="mp-otd-h2" style="clear:both; margin:0.5em; background:#cedff2; font-family:inherit; font-size:120%; font-weight:italic; border:1px solid #a3b0bf; color:#000; padding:0.2em 0.4em;">In the CLN News</h2>
<div id="mp-otd" style="padding:0.1em 0.6em 0.5em;"></div>
* The [[Tibetan Empire|Khaganate of Tibet]] has declared war on the Indian Empire, led by Emperor Ivan Sprout. The Sundanese Empire and Binbowien Empire also are participating in this war.</div>
== Comments ==
This is a test for the WikiForum. <br />-- [[User:Ilovethehitgameomori|Ilovethehitgameomori]] ([[User talk:Ilovethehitgameomori|talk]]) 23:05, 13 September 2023 (UTC)
e4d744b7de57c9b3222d5cae80f5a04955b20b10
File:Tibet empire.jpeg
6
4
5
2023-09-13T19:24:26Z
Ilovethehitgameomori
2
Tibet empire
wikitext
text/x-wiki
== Summary ==
Tibet empire
bf446b308ef8157cb6160befebaafc381d492639
Khaganate of Tibet
0
5
6
2023-09-13T19:25:21Z
Ilovethehitgameomori
2
Created page with "{| style="float: right; padding: 5px; background: #eaecf0; border: 3px solid #000000; width: 25%; margin-left: 3px" ! colspan="2" | {{{subj|Khaganate of Tibet}}} |- ! colspan="2" | [[File:{{{img|Tibet empire.jpeg}}}|200px]] |- | colspan="2" style="text-align: center" | <small>{{{capt|Flag of country name}}}</small> |- ! style="text-align: left;" | Capital city | {{{Capital city|City name}}} |- ! style="text-align: left;" | Government type | {{{Government type|Government..."
wikitext
text/x-wiki
{| style="float: right; padding: 5px; background: #eaecf0; border: 3px solid #000000; width: 25%; margin-left: 3px"
! colspan="2" | {{{subj|Khaganate of Tibet}}}
|-
! colspan="2" | [[File:{{{img|Tibet empire.jpeg}}}|200px]]
|-
| colspan="2" style="text-align: center" | <small>{{{capt|Flag of country name}}}</small>
|-
! style="text-align: left;" | Capital city
| {{{Capital city|City name}}}
|-
! style="text-align: left;" | Government type
| {{{Government type|Government type}}}
|-
! style="text-align: left;" | Leader
| {{{Leader|Leader name}}}
|-
! style="text-align: left;" | Legislature
| {{{Legislature|Legislature name}}}
|-
! style="text-align: left;" | Currency
| {{{Currency|Currency name}}}
|-
|}
The Khaganate of Tibet is a monarchy located in modern-day Tibet, aswell as Nepal and Bhutan in East Asia. It is allies with the nation to its right, the [[Binbowien dynasty]]. It also has good relations with the [[Sundanese Empire]].
The current Khaganate, Jaden the Great’s leadership was a byproduct of the passing of U Dum Tsen, the predecessor to his ruling.
In the POTENTIA Scale, Tibet is a 3.3/5.
61ecbf85fc26f36f11b3f7b7781d57594c9e5bbc
9
6
2023-09-13T20:51:28Z
Ilovethehitgameomori
2
Ilovethehitgameomori moved page [[Tibetan Empire]] to [[Khaganate of Tibet]]: forgot what i changed the name to LOL
wikitext
text/x-wiki
{| style="float: right; padding: 5px; background: #eaecf0; border: 3px solid #000000; width: 25%; margin-left: 3px"
! colspan="2" | {{{subj|Khaganate of Tibet}}}
|-
! colspan="2" | [[File:{{{img|Tibet empire.jpeg}}}|200px]]
|-
| colspan="2" style="text-align: center" | <small>{{{capt|Flag of country name}}}</small>
|-
! style="text-align: left;" | Capital city
| {{{Capital city|City name}}}
|-
! style="text-align: left;" | Government type
| {{{Government type|Government type}}}
|-
! style="text-align: left;" | Leader
| {{{Leader|Leader name}}}
|-
! style="text-align: left;" | Legislature
| {{{Legislature|Legislature name}}}
|-
! style="text-align: left;" | Currency
| {{{Currency|Currency name}}}
|-
|}
The Khaganate of Tibet is a monarchy located in modern-day Tibet, aswell as Nepal and Bhutan in East Asia. It is allies with the nation to its right, the [[Binbowien dynasty]]. It also has good relations with the [[Sundanese Empire]].
The current Khaganate, Jaden the Great’s leadership was a byproduct of the passing of U Dum Tsen, the predecessor to his ruling.
In the POTENTIA Scale, Tibet is a 3.3/5.
61ecbf85fc26f36f11b3f7b7781d57594c9e5bbc
12
9
2023-09-13T21:25:25Z
Ilovethehitgameomori
2
wikitext
text/x-wiki
{| style="float: right; padding: 5px; background: #eaecf0; border: 1px solid #000000; width: 25%; margin-left: 3px"
! colspan="2" | {{{subj|Khaganate of Tibet}}}
|-
! colspan="2" | [[File:{{{img|Tibet empire.jpeg}}}|200px]]
|-
| colspan="2" style="text-align: center" | <small>{{{capt|Flag of country name}}}</small>
|-
! style="text-align: left;" | Capital city
| {{{Capital city|City name}}}
|-
! style="text-align: left;" | Government type
| {{{Government type|Government type}}}
|-
! style="text-align: left;" | Leader
| {{{Leader|Leader name}}}
|-
! style="text-align: left;" | Legislature
| {{{Legislature|Legislature name}}}
|-
! style="text-align: left;" | Currency
| {{{Currency|Currency name}}}
|-
|}
The '''Khaganate of Tibet''', or simply '''Tibet''', is a monarchy located in Eastern Asia, formed
in 612 AD. It has good relations with its Asian neighbors, besides the Indian Empire which is
located to the south of it. The most commonly practiced religion is Tibetan Buddhism.
The leadership of Khagan Jaden was a result of U Dum Tsen dropping the throne, allowing for a new
leader to step up.
== History ==
The formation of the Khaganate of Tibet was due to the power vacuum within the nation at the start
of its decline; however, the crisis was averted due to the Khagan, Jaden, taking up the throne —
allowing for it to flourish and rise again.
==== The Indo-Tibetan War (Ongoing) ====
The Indo-Tibetan War started due to the idea that India was a “threat to Asia’s national security”, as it is a very big nation. While attempts to stop the war were proposed, they were quickly denied as the Khagan was adamant.
== Politics and state organization ==
The states of Tibet are ruled by various chiefs, appointed by the Khagan.
At any point, it is allowed to get rid of these states in case of in emergency, or edit its law structure.
== References ==
( Self explanatory )
c2e5e92c11572390900d68300333aa11258fc3b0
13
12
2023-09-13T21:25:36Z
Ilovethehitgameomori
2
/* References */
wikitext
text/x-wiki
{| style="float: right; padding: 5px; background: #eaecf0; border: 1px solid #000000; width: 25%; margin-left: 3px"
! colspan="2" | {{{subj|Khaganate of Tibet}}}
|-
! colspan="2" | [[File:{{{img|Tibet empire.jpeg}}}|200px]]
|-
| colspan="2" style="text-align: center" | <small>{{{capt|Flag of country name}}}</small>
|-
! style="text-align: left;" | Capital city
| {{{Capital city|City name}}}
|-
! style="text-align: left;" | Government type
| {{{Government type|Government type}}}
|-
! style="text-align: left;" | Leader
| {{{Leader|Leader name}}}
|-
! style="text-align: left;" | Legislature
| {{{Legislature|Legislature name}}}
|-
! style="text-align: left;" | Currency
| {{{Currency|Currency name}}}
|-
|}
The '''Khaganate of Tibet''', or simply '''Tibet''', is a monarchy located in Eastern Asia, formed
in 612 AD. It has good relations with its Asian neighbors, besides the Indian Empire which is
located to the south of it. The most commonly practiced religion is Tibetan Buddhism.
The leadership of Khagan Jaden was a result of U Dum Tsen dropping the throne, allowing for a new
leader to step up.
== History ==
The formation of the Khaganate of Tibet was due to the power vacuum within the nation at the start
of its decline; however, the crisis was averted due to the Khagan, Jaden, taking up the throne —
allowing for it to flourish and rise again.
==== The Indo-Tibetan War (Ongoing) ====
The Indo-Tibetan War started due to the idea that India was a “threat to Asia’s national security”, as it is a very big nation. While attempts to stop the war were proposed, they were quickly denied as the Khagan was adamant.
== Politics and state organization ==
The states of Tibet are ruled by various chiefs, appointed by the Khagan.
At any point, it is allowed to get rid of these states in case of in emergency, or edit its law structure.
== References ==
f066b4acf1167cbc58800fbb33b5f26f90026aee
17
13
2023-09-13T21:29:54Z
Ilovethehitgameomori
2
wikitext
text/x-wiki
{| style="float: right; padding: 5px; background: #eaecf0; border: 1px solid #000000; width: 25%; margin-left: 3px"
! colspan="2" | {{{subj|Khaganate of Tibet}}}
|-
! colspan="2" | [[File:{{{img|Tibet empire.jpeg}}}|200px]]
|-
| colspan="2" style="text-align: center" | <small>{{{capt|Flag of the Khaganate}}}</small>
|-
! style="text-align: left;" | Capital city
| {{{Capital city|Lhasa}}}
|-
! style="text-align: left;" | Government type
| {{{Government type|Monarchy}}}
|-
! style="text-align: left;" | Khaganate
| {{{Leader|Jaden the Great}}}
|-
! style="text-align: left;" | Legislature
| {{{Legislature|Tibetan Congress}}}
|-
! style="text-align: left;" | Currency
| {{{Currency|''Phyug-po gser'' coins}}}
|-
|}
The '''Khaganate of Tibet''', or simply '''Tibet''', is a monarchy located in Eastern Asia, formed
in 612 AD. It has good relations with its Asian neighbors, besides the Indian Empire which is
located to the south of it. The most commonly practiced religion is Tibetan Buddhism.
The leadership of Khagan Jaden was a result of U Dum Tsen dropping the throne, allowing for a new
leader to step up.
== History ==
The formation of the Khaganate of Tibet was due to the power vacuum within the nation at the start
of its decline; however, the crisis was averted due to the Khagan, Jaden, taking up the throne —
allowing for it to flourish and rise again.
==== The Indo-Tibetan War (Ongoing) ====
The Indo-Tibetan War started due to the idea that India was a “threat to Asia’s national security”, as it is a very big nation. While attempts to stop the war were proposed, they were quickly denied as the Khagan was adamant.
== Politics and state organization ==
The states of Tibet are ruled by various chiefs, appointed by the Khagan.
At any point, it is allowed to get rid of these states in case of in emergency, or edit its law structure.
== References ==
b73a2c8dba889f665b076f8c3779e7aa1b9e270d
24
17
2023-09-14T00:44:53Z
Ilovethehitgameomori
2
wikitext
text/x-wiki
{| style="float: right; padding: 5px; background: #eaecf0; border: 1px solid #000000; width: 25%; margin-left: 3px"
! colspan="2" | {{{subj|Khaganate of Tibet}}}
|-
! colspan="2" | [[File:{{{img|Tibet empire.jpeg}}}|200px]]
|-
| colspan="2" style="text-align: center" | <small>{{{capt|Flag of the Khaganate}}}</small>
|-
! style="text-align: left;" | Capital city
| {{{Capital city|Lhasa}}}
|-
! style="text-align: left;" | Government type
| {{{Government type|Monarchy}}}
|-
! style="text-align: left;" | Khaganate
| {{{Leader|Jaden the Great}}}
|-
! style="text-align: left;" | Legislature
| {{{Legislature|Tibetan Congress}}}
|-
! style="text-align: left;" | Currency
| {{{Currency|''Phyug-po gser'' coins}}}
|-
|}
The '''Khaganate of Tibet''' (Tibetan: ཁགནཏེཨོཕ༹་ཏིབེཏ), or simply '''Tibet''', is a country located in East Asia, and modern-day Western China.
It was founded in 621 AD, tracing its roots to the Yarlung dynasty’s expansion, forming the Khaganate. After a harsh period of decline in the nation, and after Langdarma died, it left for a state of Interregnum, which Jaden the Great, sometimes known by his nickname Rgyalmi-dmangs (Tibetan: Person-king). Following his ascent to the throne, this halted the decline of the nation and gradually brought Tibet to a stable and prosperous nation.
To this day, it has global ties with many nations and is in the Imperial Alliance alongside the [[Spartan Empire]].
== History ==
==== Formation ====
Following the expansion of the Yarlung dynasty, the Khaganate formed. Around 838, there was a period of decline in the Khaganate. A couple years later, Langdarma took the throne, however died a year after his ascent to the throne of the nation. Because of this, there was a period of brief interregnum, before the eventual ascent to the throne of Jaden, or Rgyalmi-dmangs.
His idea was to make alliances with growing states, which allowed the Khaganate to grow with trade and improve its declining economy and state.
==== Alliances ====
Because of the decline, Tibet was able to rescue itself by becoming allies with local nations in the region, such as the [[Binbowien Empire]] and the [[Sundanese Empire]], aswell as maintaining good relations with the [[Spartan Empire]] before forming the Imperial Alliance.
==== War period (Present) ====
{{see also|Indo-Tibetan War}}
Following a top secret plan after a meeting with the leader of the Binbowien Empire and the Sundanese Empire, the Indo-Tibetan war was declared on the reasoning that the [[Indian Empire]] is a threat to the national security of Asia. Since then, there have been no changes to the current borders of all nations involved.
== References ==
f0860c59f6ae1939c81429fc50bd639153596dc0
Module:Unicode data/scripts
828
211
428
2023-09-13T19:41:55Z
[[w>Drmccreedy
0
Update for Unicode v15.1
Scribunto
text/plain
--[=[
-- Official Unicode script values for individual codepoints and ranges of
-- codepoints.
-- https://www.unicode.org/Public/UNIDATA/Scripts.txt provided
-- the script names, and https://www.unicode.org/Public/UNIDATA/PropertyValueAliases.txt
-- provided script codes corresponding to the names (see [[Script (Unicode)]]).
--]=]
local data = {
singles = {
[0x000AA] = "Latn",
[0x000BA] = "Latn",
[0x000D7] = "Zyyy",
[0x000F7] = "Zyyy",
[0x00374] = "Zyyy",
[0x0037E] = "Zyyy",
[0x0037F] = "Grek",
[0x00384] = "Grek",
[0x00385] = "Zyyy",
[0x00386] = "Grek",
[0x00387] = "Zyyy",
[0x0038C] = "Grek",
[0x00605] = "Zyyy",
[0x0060C] = "Zyyy",
[0x0061B] = "Zyyy",
[0x0061F] = "Zyyy",
[0x00640] = "Zyyy",
[0x00670] = "Zinh",
[0x006DD] = "Zyyy",
[0x0085E] = "Mand",
[0x008E2] = "Zyyy",
[0x009B2] = "Beng",
[0x009D7] = "Beng",
[0x00A3C] = "Guru",
[0x00A51] = "Guru",
[0x00A5E] = "Guru",
[0x00AD0] = "Gujr",
[0x00B9C] = "Taml",
[0x00BD0] = "Taml",
[0x00BD7] = "Taml",
[0x00C5D] = "Telu",
[0x00DBD] = "Sinh",
[0x00DCA] = "Sinh",
[0x00DD6] = "Sinh",
[0x00E3F] = "Zyyy",
[0x00E84] = "Laoo",
[0x00EA5] = "Laoo",
[0x00EC6] = "Laoo",
[0x010C7] = "Geor",
[0x010CD] = "Geor",
[0x010FB] = "Zyyy",
[0x01258] = "Ethi",
[0x012C0] = "Ethi",
[0x0171F] = "Tglg",
[0x01804] = "Mong",
[0x01805] = "Zyyy",
[0x01940] = "Limb",
[0x01CD3] = "Zyyy",
[0x01CE1] = "Zyyy",
[0x01CED] = "Zinh",
[0x01CF4] = "Zinh",
[0x01CFA] = "Zyyy",
[0x01D2B] = "Cyrl",
[0x01D78] = "Cyrl",
[0x01DBF] = "Grek",
[0x01F59] = "Grek",
[0x01F5B] = "Grek",
[0x01F5D] = "Grek",
[0x02071] = "Latn",
[0x0207F] = "Latn",
[0x02126] = "Grek",
[0x02132] = "Latn",
[0x0214E] = "Latn",
[0x02D27] = "Geor",
[0x02D2D] = "Geor",
[0x02D7F] = "Tfng",
[0x03005] = "Hani",
[0x03006] = "Zyyy",
[0x03007] = "Hani",
[0x030A0] = "Zyyy",
[0x031EF] = "Zyyy",
[0x032FF] = "Zyyy",
[0x0A7D3] = "Latn",
[0x0A92E] = "Zyyy",
[0x0A92F] = "Kali",
[0x0A95F] = "Rjng",
[0x0A9CF] = "Zyyy",
[0x0AB5B] = "Zyyy",
[0x0AB65] = "Grek",
[0x0FB3E] = "Hebr",
[0x0FDCF] = "Arab",
[0x0FEFF] = "Zyyy",
[0x0FF70] = "Zyyy",
[0x101A0] = "Grek",
[0x101FD] = "Zinh",
[0x102E0] = "Zinh",
[0x1039F] = "Ugar",
[0x1056F] = "Aghb",
[0x10808] = "Cprt",
[0x1083C] = "Cprt",
[0x1083F] = "Cprt",
[0x1091F] = "Phnx",
[0x1093F] = "Lydi",
[0x1107F] = "Brah",
[0x110CD] = "Kthi",
[0x11288] = "Mult",
[0x1133B] = "Zinh",
[0x11350] = "Gran",
[0x11357] = "Gran",
[0x118FF] = "Wara",
[0x11909] = "Diak",
[0x11D3A] = "Gonm",
[0x11FB0] = "Lisu",
[0x11FFF] = "Taml",
[0x16FE0] = "Tang",
[0x16FE1] = "Nshu",
[0x16FE4] = "Kits",
[0x1B000] = "Kana",
[0x1B132] = "Hira",
[0x1B155] = "Kana",
[0x1D4A2] = "Zyyy",
[0x1D4BB] = "Zyyy",
[0x1D546] = "Zyyy",
[0x1E08F] = "Cyrl",
[0x1E2FF] = "Wcho",
[0x1EE24] = "Arab",
[0x1EE27] = "Arab",
[0x1EE39] = "Arab",
[0x1EE3B] = "Arab",
[0x1EE42] = "Arab",
[0x1EE47] = "Arab",
[0x1EE49] = "Arab",
[0x1EE4B] = "Arab",
[0x1EE54] = "Arab",
[0x1EE57] = "Arab",
[0x1EE59] = "Arab",
[0x1EE5B] = "Arab",
[0x1EE5D] = "Arab",
[0x1EE5F] = "Arab",
[0x1EE64] = "Arab",
[0x1EE7E] = "Arab",
[0x1F200] = "Hira",
[0x1F7F0] = "Zyyy",
[0xE0001] = "Zyyy",
},
ranges = {
{ 0x00000, 0x00040, "Zyyy" },
{ 0x00041, 0x0005A, "Latn" },
{ 0x0005B, 0x00060, "Zyyy" },
{ 0x00061, 0x0007A, "Latn" },
{ 0x0007B, 0x000A9, "Zyyy" },
{ 0x000AB, 0x000B9, "Zyyy" },
{ 0x000BB, 0x000BF, "Zyyy" },
{ 0x000C0, 0x000D6, "Latn" },
{ 0x000D8, 0x000F6, "Latn" },
{ 0x000F8, 0x002B8, "Latn" },
{ 0x002B9, 0x002DF, "Zyyy" },
{ 0x002E0, 0x002E4, "Latn" },
{ 0x002E5, 0x002E9, "Zyyy" },
{ 0x002EA, 0x002EB, "Bopo" },
{ 0x002EC, 0x002FF, "Zyyy" },
{ 0x00300, 0x0036F, "Zinh" },
{ 0x00370, 0x00373, "Grek" },
{ 0x00375, 0x00377, "Grek" },
{ 0x0037A, 0x0037D, "Grek" },
{ 0x00388, 0x0038A, "Grek" },
{ 0x0038E, 0x003A1, "Grek" },
{ 0x003A3, 0x003E1, "Grek" },
{ 0x003E2, 0x003EF, "Copt" },
{ 0x003F0, 0x003FF, "Grek" },
{ 0x00400, 0x00484, "Cyrl" },
{ 0x00485, 0x00486, "Zinh" },
{ 0x00487, 0x0052F, "Cyrl" },
{ 0x00531, 0x00556, "Armn" },
{ 0x00559, 0x0058A, "Armn" },
{ 0x0058D, 0x0058F, "Armn" },
{ 0x00591, 0x005C7, "Hebr" },
{ 0x005D0, 0x005EA, "Hebr" },
{ 0x005EF, 0x005F4, "Hebr" },
{ 0x00600, 0x00604, "Arab" },
{ 0x00606, 0x0060B, "Arab" },
{ 0x0060D, 0x0061A, "Arab" },
{ 0x0061C, 0x0061E, "Arab" },
{ 0x00620, 0x0063F, "Arab" },
{ 0x00641, 0x0064A, "Arab" },
{ 0x0064B, 0x00655, "Zinh" },
{ 0x00656, 0x0066F, "Arab" },
{ 0x00671, 0x006DC, "Arab" },
{ 0x006DE, 0x006FF, "Arab" },
{ 0x00700, 0x0070D, "Syrc" },
{ 0x0070F, 0x0074A, "Syrc" },
{ 0x0074D, 0x0074F, "Syrc" },
{ 0x00750, 0x0077F, "Arab" },
{ 0x00780, 0x007B1, "Thaa" },
{ 0x007C0, 0x007FA, "Nkoo" },
{ 0x007FD, 0x007FF, "Nkoo" },
{ 0x00800, 0x0082D, "Samr" },
{ 0x00830, 0x0083E, "Samr" },
{ 0x00840, 0x0085B, "Mand" },
{ 0x00860, 0x0086A, "Syrc" },
{ 0x00870, 0x0088E, "Arab" },
{ 0x00890, 0x00891, "Arab" },
{ 0x00898, 0x008E1, "Arab" },
{ 0x008E3, 0x008FF, "Arab" },
{ 0x00900, 0x00950, "Deva" },
{ 0x00951, 0x00954, "Zinh" },
{ 0x00955, 0x00963, "Deva" },
{ 0x00964, 0x00965, "Zyyy" },
{ 0x00966, 0x0097F, "Deva" },
{ 0x00980, 0x00983, "Beng" },
{ 0x00985, 0x0098C, "Beng" },
{ 0x0098F, 0x00990, "Beng" },
{ 0x00993, 0x009A8, "Beng" },
{ 0x009AA, 0x009B0, "Beng" },
{ 0x009B6, 0x009B9, "Beng" },
{ 0x009BC, 0x009C4, "Beng" },
{ 0x009C7, 0x009C8, "Beng" },
{ 0x009CB, 0x009CE, "Beng" },
{ 0x009DC, 0x009DD, "Beng" },
{ 0x009DF, 0x009E3, "Beng" },
{ 0x009E6, 0x009FE, "Beng" },
{ 0x00A01, 0x00A03, "Guru" },
{ 0x00A05, 0x00A0A, "Guru" },
{ 0x00A0F, 0x00A10, "Guru" },
{ 0x00A13, 0x00A28, "Guru" },
{ 0x00A2A, 0x00A30, "Guru" },
{ 0x00A32, 0x00A33, "Guru" },
{ 0x00A35, 0x00A36, "Guru" },
{ 0x00A38, 0x00A39, "Guru" },
{ 0x00A3E, 0x00A42, "Guru" },
{ 0x00A47, 0x00A48, "Guru" },
{ 0x00A4B, 0x00A4D, "Guru" },
{ 0x00A59, 0x00A5C, "Guru" },
{ 0x00A66, 0x00A76, "Guru" },
{ 0x00A81, 0x00A83, "Gujr" },
{ 0x00A85, 0x00A8D, "Gujr" },
{ 0x00A8F, 0x00A91, "Gujr" },
{ 0x00A93, 0x00AA8, "Gujr" },
{ 0x00AAA, 0x00AB0, "Gujr" },
{ 0x00AB2, 0x00AB3, "Gujr" },
{ 0x00AB5, 0x00AB9, "Gujr" },
{ 0x00ABC, 0x00AC5, "Gujr" },
{ 0x00AC7, 0x00AC9, "Gujr" },
{ 0x00ACB, 0x00ACD, "Gujr" },
{ 0x00AE0, 0x00AE3, "Gujr" },
{ 0x00AE6, 0x00AF1, "Gujr" },
{ 0x00AF9, 0x00AFF, "Gujr" },
{ 0x00B01, 0x00B03, "Orya" },
{ 0x00B05, 0x00B0C, "Orya" },
{ 0x00B0F, 0x00B10, "Orya" },
{ 0x00B13, 0x00B28, "Orya" },
{ 0x00B2A, 0x00B30, "Orya" },
{ 0x00B32, 0x00B33, "Orya" },
{ 0x00B35, 0x00B39, "Orya" },
{ 0x00B3C, 0x00B44, "Orya" },
{ 0x00B47, 0x00B48, "Orya" },
{ 0x00B4B, 0x00B4D, "Orya" },
{ 0x00B55, 0x00B57, "Orya" },
{ 0x00B5C, 0x00B5D, "Orya" },
{ 0x00B5F, 0x00B63, "Orya" },
{ 0x00B66, 0x00B77, "Orya" },
{ 0x00B82, 0x00B83, "Taml" },
{ 0x00B85, 0x00B8A, "Taml" },
{ 0x00B8E, 0x00B90, "Taml" },
{ 0x00B92, 0x00B95, "Taml" },
{ 0x00B99, 0x00B9A, "Taml" },
{ 0x00B9E, 0x00B9F, "Taml" },
{ 0x00BA3, 0x00BA4, "Taml" },
{ 0x00BA8, 0x00BAA, "Taml" },
{ 0x00BAE, 0x00BB9, "Taml" },
{ 0x00BBE, 0x00BC2, "Taml" },
{ 0x00BC6, 0x00BC8, "Taml" },
{ 0x00BCA, 0x00BCD, "Taml" },
{ 0x00BE6, 0x00BFA, "Taml" },
{ 0x00C00, 0x00C0C, "Telu" },
{ 0x00C0E, 0x00C10, "Telu" },
{ 0x00C12, 0x00C28, "Telu" },
{ 0x00C2A, 0x00C39, "Telu" },
{ 0x00C3C, 0x00C44, "Telu" },
{ 0x00C46, 0x00C48, "Telu" },
{ 0x00C4A, 0x00C4D, "Telu" },
{ 0x00C55, 0x00C56, "Telu" },
{ 0x00C58, 0x00C5A, "Telu" },
{ 0x00C60, 0x00C63, "Telu" },
{ 0x00C66, 0x00C6F, "Telu" },
{ 0x00C77, 0x00C7F, "Telu" },
{ 0x00C80, 0x00C8C, "Knda" },
{ 0x00C8E, 0x00C90, "Knda" },
{ 0x00C92, 0x00CA8, "Knda" },
{ 0x00CAA, 0x00CB3, "Knda" },
{ 0x00CB5, 0x00CB9, "Knda" },
{ 0x00CBC, 0x00CC4, "Knda" },
{ 0x00CC6, 0x00CC8, "Knda" },
{ 0x00CCA, 0x00CCD, "Knda" },
{ 0x00CD5, 0x00CD6, "Knda" },
{ 0x00CDD, 0x00CDE, "Knda" },
{ 0x00CE0, 0x00CE3, "Knda" },
{ 0x00CE6, 0x00CEF, "Knda" },
{ 0x00CF1, 0x00CF3, "Knda" },
{ 0x00D00, 0x00D0C, "Mlym" },
{ 0x00D0E, 0x00D10, "Mlym" },
{ 0x00D12, 0x00D44, "Mlym" },
{ 0x00D46, 0x00D48, "Mlym" },
{ 0x00D4A, 0x00D4F, "Mlym" },
{ 0x00D54, 0x00D63, "Mlym" },
{ 0x00D66, 0x00D7F, "Mlym" },
{ 0x00D81, 0x00D83, "Sinh" },
{ 0x00D85, 0x00D96, "Sinh" },
{ 0x00D9A, 0x00DB1, "Sinh" },
{ 0x00DB3, 0x00DBB, "Sinh" },
{ 0x00DC0, 0x00DC6, "Sinh" },
{ 0x00DCF, 0x00DD4, "Sinh" },
{ 0x00DD8, 0x00DDF, "Sinh" },
{ 0x00DE6, 0x00DEF, "Sinh" },
{ 0x00DF2, 0x00DF4, "Sinh" },
{ 0x00E01, 0x00E3A, "Thai" },
{ 0x00E40, 0x00E5B, "Thai" },
{ 0x00E81, 0x00E82, "Laoo" },
{ 0x00E86, 0x00E8A, "Laoo" },
{ 0x00E8C, 0x00EA3, "Laoo" },
{ 0x00EA7, 0x00EBD, "Laoo" },
{ 0x00EC0, 0x00EC4, "Laoo" },
{ 0x00EC8, 0x00ECE, "Laoo" },
{ 0x00ED0, 0x00ED9, "Laoo" },
{ 0x00EDC, 0x00EDF, "Laoo" },
{ 0x00F00, 0x00F47, "Tibt" },
{ 0x00F49, 0x00F6C, "Tibt" },
{ 0x00F71, 0x00F97, "Tibt" },
{ 0x00F99, 0x00FBC, "Tibt" },
{ 0x00FBE, 0x00FCC, "Tibt" },
{ 0x00FCE, 0x00FD4, "Tibt" },
{ 0x00FD5, 0x00FD8, "Zyyy" },
{ 0x00FD9, 0x00FDA, "Tibt" },
{ 0x01000, 0x0109F, "Mymr" },
{ 0x010A0, 0x010C5, "Geor" },
{ 0x010D0, 0x010FA, "Geor" },
{ 0x010FC, 0x010FF, "Geor" },
{ 0x01100, 0x011FF, "Hang" },
{ 0x01200, 0x01248, "Ethi" },
{ 0x0124A, 0x0124D, "Ethi" },
{ 0x01250, 0x01256, "Ethi" },
{ 0x0125A, 0x0125D, "Ethi" },
{ 0x01260, 0x01288, "Ethi" },
{ 0x0128A, 0x0128D, "Ethi" },
{ 0x01290, 0x012B0, "Ethi" },
{ 0x012B2, 0x012B5, "Ethi" },
{ 0x012B8, 0x012BE, "Ethi" },
{ 0x012C2, 0x012C5, "Ethi" },
{ 0x012C8, 0x012D6, "Ethi" },
{ 0x012D8, 0x01310, "Ethi" },
{ 0x01312, 0x01315, "Ethi" },
{ 0x01318, 0x0135A, "Ethi" },
{ 0x0135D, 0x0137C, "Ethi" },
{ 0x01380, 0x01399, "Ethi" },
{ 0x013A0, 0x013F5, "Cher" },
{ 0x013F8, 0x013FD, "Cher" },
{ 0x01400, 0x0167F, "Cans" },
{ 0x01680, 0x0169C, "Ogam" },
{ 0x016A0, 0x016EA, "Runr" },
{ 0x016EB, 0x016ED, "Zyyy" },
{ 0x016EE, 0x016F8, "Runr" },
{ 0x01700, 0x01715, "Tglg" },
{ 0x01720, 0x01734, "Hano" },
{ 0x01735, 0x01736, "Zyyy" },
{ 0x01740, 0x01753, "Buhd" },
{ 0x01760, 0x0176C, "Tagb" },
{ 0x0176E, 0x01770, "Tagb" },
{ 0x01772, 0x01773, "Tagb" },
{ 0x01780, 0x017DD, "Khmr" },
{ 0x017E0, 0x017E9, "Khmr" },
{ 0x017F0, 0x017F9, "Khmr" },
{ 0x01800, 0x01801, "Mong" },
{ 0x01802, 0x01803, "Zyyy" },
{ 0x01806, 0x01819, "Mong" },
{ 0x01820, 0x01878, "Mong" },
{ 0x01880, 0x018AA, "Mong" },
{ 0x018B0, 0x018F5, "Cans" },
{ 0x01900, 0x0191E, "Limb" },
{ 0x01920, 0x0192B, "Limb" },
{ 0x01930, 0x0193B, "Limb" },
{ 0x01944, 0x0194F, "Limb" },
{ 0x01950, 0x0196D, "Tale" },
{ 0x01970, 0x01974, "Tale" },
{ 0x01980, 0x019AB, "Talu" },
{ 0x019B0, 0x019C9, "Talu" },
{ 0x019D0, 0x019DA, "Talu" },
{ 0x019DE, 0x019DF, "Talu" },
{ 0x019E0, 0x019FF, "Khmr" },
{ 0x01A00, 0x01A1B, "Bugi" },
{ 0x01A1E, 0x01A1F, "Bugi" },
{ 0x01A20, 0x01A5E, "Lana" },
{ 0x01A60, 0x01A7C, "Lana" },
{ 0x01A7F, 0x01A89, "Lana" },
{ 0x01A90, 0x01A99, "Lana" },
{ 0x01AA0, 0x01AAD, "Lana" },
{ 0x01AB0, 0x01ACE, "Zinh" },
{ 0x01B00, 0x01B4C, "Bali" },
{ 0x01B50, 0x01B7E, "Bali" },
{ 0x01B80, 0x01BBF, "Sund" },
{ 0x01BC0, 0x01BF3, "Batk" },
{ 0x01BFC, 0x01BFF, "Batk" },
{ 0x01C00, 0x01C37, "Lepc" },
{ 0x01C3B, 0x01C49, "Lepc" },
{ 0x01C4D, 0x01C4F, "Lepc" },
{ 0x01C50, 0x01C7F, "Olck" },
{ 0x01C80, 0x01C88, "Cyrl" },
{ 0x01C90, 0x01CBA, "Geor" },
{ 0x01CBD, 0x01CBF, "Geor" },
{ 0x01CC0, 0x01CC7, "Sund" },
{ 0x01CD0, 0x01CD2, "Zinh" },
{ 0x01CD4, 0x01CE0, "Zinh" },
{ 0x01CE2, 0x01CE8, "Zinh" },
{ 0x01CE9, 0x01CEC, "Zyyy" },
{ 0x01CEE, 0x01CF3, "Zyyy" },
{ 0x01CF5, 0x01CF7, "Zyyy" },
{ 0x01CF8, 0x01CF9, "Zinh" },
{ 0x01D00, 0x01D25, "Latn" },
{ 0x01D26, 0x01D2A, "Grek" },
{ 0x01D2C, 0x01D5C, "Latn" },
{ 0x01D5D, 0x01D61, "Grek" },
{ 0x01D62, 0x01D65, "Latn" },
{ 0x01D66, 0x01D6A, "Grek" },
{ 0x01D6B, 0x01D77, "Latn" },
{ 0x01D79, 0x01DBE, "Latn" },
{ 0x01DC0, 0x01DFF, "Zinh" },
{ 0x01E00, 0x01EFF, "Latn" },
{ 0x01F00, 0x01F15, "Grek" },
{ 0x01F18, 0x01F1D, "Grek" },
{ 0x01F20, 0x01F45, "Grek" },
{ 0x01F48, 0x01F4D, "Grek" },
{ 0x01F50, 0x01F57, "Grek" },
{ 0x01F5F, 0x01F7D, "Grek" },
{ 0x01F80, 0x01FB4, "Grek" },
{ 0x01FB6, 0x01FC4, "Grek" },
{ 0x01FC6, 0x01FD3, "Grek" },
{ 0x01FD6, 0x01FDB, "Grek" },
{ 0x01FDD, 0x01FEF, "Grek" },
{ 0x01FF2, 0x01FF4, "Grek" },
{ 0x01FF6, 0x01FFE, "Grek" },
{ 0x02000, 0x0200B, "Zyyy" },
{ 0x0200C, 0x0200D, "Zinh" },
{ 0x0200E, 0x02064, "Zyyy" },
{ 0x02066, 0x02070, "Zyyy" },
{ 0x02074, 0x0207E, "Zyyy" },
{ 0x02080, 0x0208E, "Zyyy" },
{ 0x02090, 0x0209C, "Latn" },
{ 0x020A0, 0x020C0, "Zyyy" },
{ 0x020D0, 0x020F0, "Zinh" },
{ 0x02100, 0x02125, "Zyyy" },
{ 0x02127, 0x02129, "Zyyy" },
{ 0x0212A, 0x0212B, "Latn" },
{ 0x0212C, 0x02131, "Zyyy" },
{ 0x02133, 0x0214D, "Zyyy" },
{ 0x0214F, 0x0215F, "Zyyy" },
{ 0x02160, 0x02188, "Latn" },
{ 0x02189, 0x0218B, "Zyyy" },
{ 0x02190, 0x02426, "Zyyy" },
{ 0x02440, 0x0244A, "Zyyy" },
{ 0x02460, 0x027FF, "Zyyy" },
{ 0x02800, 0x028FF, "Brai" },
{ 0x02900, 0x02B73, "Zyyy" },
{ 0x02B76, 0x02B95, "Zyyy" },
{ 0x02B97, 0x02BFF, "Zyyy" },
{ 0x02C00, 0x02C5F, "Glag" },
{ 0x02C60, 0x02C7F, "Latn" },
{ 0x02C80, 0x02CF3, "Copt" },
{ 0x02CF9, 0x02CFF, "Copt" },
{ 0x02D00, 0x02D25, "Geor" },
{ 0x02D30, 0x02D67, "Tfng" },
{ 0x02D6F, 0x02D70, "Tfng" },
{ 0x02D80, 0x02D96, "Ethi" },
{ 0x02DA0, 0x02DA6, "Ethi" },
{ 0x02DA8, 0x02DAE, "Ethi" },
{ 0x02DB0, 0x02DB6, "Ethi" },
{ 0x02DB8, 0x02DBE, "Ethi" },
{ 0x02DC0, 0x02DC6, "Ethi" },
{ 0x02DC8, 0x02DCE, "Ethi" },
{ 0x02DD0, 0x02DD6, "Ethi" },
{ 0x02DD8, 0x02DDE, "Ethi" },
{ 0x02DE0, 0x02DFF, "Cyrl" },
{ 0x02E00, 0x02E5D, "Zyyy" },
{ 0x02E80, 0x02E99, "Hani" },
{ 0x02E9B, 0x02EF3, "Hani" },
{ 0x02F00, 0x02FD5, "Hani" },
{ 0x02FF0, 0x03004, "Zyyy" },
{ 0x03008, 0x03020, "Zyyy" },
{ 0x03021, 0x03029, "Hani" },
{ 0x0302A, 0x0302D, "Zinh" },
{ 0x0302E, 0x0302F, "Hang" },
{ 0x03030, 0x03037, "Zyyy" },
{ 0x03038, 0x0303B, "Hani" },
{ 0x0303C, 0x0303F, "Zyyy" },
{ 0x03041, 0x03096, "Hira" },
{ 0x03099, 0x0309A, "Zinh" },
{ 0x0309B, 0x0309C, "Zyyy" },
{ 0x0309D, 0x0309F, "Hira" },
{ 0x030A1, 0x030FA, "Kana" },
{ 0x030FB, 0x030FC, "Zyyy" },
{ 0x030FD, 0x030FF, "Kana" },
{ 0x03105, 0x0312F, "Bopo" },
{ 0x03131, 0x0318E, "Hang" },
{ 0x03190, 0x0319F, "Zyyy" },
{ 0x031A0, 0x031BF, "Bopo" },
{ 0x031C0, 0x031E3, "Zyyy" },
{ 0x031F0, 0x031FF, "Kana" },
{ 0x03200, 0x0321E, "Hang" },
{ 0x03220, 0x0325F, "Zyyy" },
{ 0x03260, 0x0327E, "Hang" },
{ 0x0327F, 0x032CF, "Zyyy" },
{ 0x032D0, 0x032FE, "Kana" },
{ 0x03300, 0x03357, "Kana" },
{ 0x03358, 0x033FF, "Zyyy" },
{ 0x03400, 0x04DBF, "Hani" },
{ 0x04DC0, 0x04DFF, "Zyyy" },
{ 0x04E00, 0x09FFF, "Hani" },
{ 0x0A000, 0x0A48C, "Yiii" },
{ 0x0A490, 0x0A4C6, "Yiii" },
{ 0x0A4D0, 0x0A4FF, "Lisu" },
{ 0x0A500, 0x0A62B, "Vaii" },
{ 0x0A640, 0x0A69F, "Cyrl" },
{ 0x0A6A0, 0x0A6F7, "Bamu" },
{ 0x0A700, 0x0A721, "Zyyy" },
{ 0x0A722, 0x0A787, "Latn" },
{ 0x0A788, 0x0A78A, "Zyyy" },
{ 0x0A78B, 0x0A7CA, "Latn" },
{ 0x0A7D0, 0x0A7D1, "Latn" },
{ 0x0A7D5, 0x0A7D9, "Latn" },
{ 0x0A7F2, 0x0A7FF, "Latn" },
{ 0x0A800, 0x0A82C, "Sylo" },
{ 0x0A830, 0x0A839, "Zyyy" },
{ 0x0A840, 0x0A877, "Phag" },
{ 0x0A880, 0x0A8C5, "Saur" },
{ 0x0A8CE, 0x0A8D9, "Saur" },
{ 0x0A8E0, 0x0A8FF, "Deva" },
{ 0x0A900, 0x0A92D, "Kali" },
{ 0x0A930, 0x0A953, "Rjng" },
{ 0x0A960, 0x0A97C, "Hang" },
{ 0x0A980, 0x0A9CD, "Java" },
{ 0x0A9D0, 0x0A9D9, "Java" },
{ 0x0A9DE, 0x0A9DF, "Java" },
{ 0x0A9E0, 0x0A9FE, "Mymr" },
{ 0x0AA00, 0x0AA36, "Cham" },
{ 0x0AA40, 0x0AA4D, "Cham" },
{ 0x0AA50, 0x0AA59, "Cham" },
{ 0x0AA5C, 0x0AA5F, "Cham" },
{ 0x0AA60, 0x0AA7F, "Mymr" },
{ 0x0AA80, 0x0AAC2, "Tavt" },
{ 0x0AADB, 0x0AADF, "Tavt" },
{ 0x0AAE0, 0x0AAF6, "Mtei" },
{ 0x0AB01, 0x0AB06, "Ethi" },
{ 0x0AB09, 0x0AB0E, "Ethi" },
{ 0x0AB11, 0x0AB16, "Ethi" },
{ 0x0AB20, 0x0AB26, "Ethi" },
{ 0x0AB28, 0x0AB2E, "Ethi" },
{ 0x0AB30, 0x0AB5A, "Latn" },
{ 0x0AB5C, 0x0AB64, "Latn" },
{ 0x0AB66, 0x0AB69, "Latn" },
{ 0x0AB6A, 0x0AB6B, "Zyyy" },
{ 0x0AB70, 0x0ABBF, "Cher" },
{ 0x0ABC0, 0x0ABED, "Mtei" },
{ 0x0ABF0, 0x0ABF9, "Mtei" },
{ 0x0AC00, 0x0D7A3, "Hang" },
{ 0x0D7B0, 0x0D7C6, "Hang" },
{ 0x0D7CB, 0x0D7FB, "Hang" },
{ 0x0F900, 0x0FA6D, "Hani" },
{ 0x0FA70, 0x0FAD9, "Hani" },
{ 0x0FB00, 0x0FB06, "Latn" },
{ 0x0FB13, 0x0FB17, "Armn" },
{ 0x0FB1D, 0x0FB36, "Hebr" },
{ 0x0FB38, 0x0FB3C, "Hebr" },
{ 0x0FB40, 0x0FB41, "Hebr" },
{ 0x0FB43, 0x0FB44, "Hebr" },
{ 0x0FB46, 0x0FB4F, "Hebr" },
{ 0x0FB50, 0x0FBC2, "Arab" },
{ 0x0FBD3, 0x0FD3D, "Arab" },
{ 0x0FD3E, 0x0FD3F, "Zyyy" },
{ 0x0FD40, 0x0FD8F, "Arab" },
{ 0x0FD92, 0x0FDC7, "Arab" },
{ 0x0FDF0, 0x0FDFF, "Arab" },
{ 0x0FE00, 0x0FE0F, "Zinh" },
{ 0x0FE10, 0x0FE19, "Zyyy" },
{ 0x0FE20, 0x0FE2D, "Zinh" },
{ 0x0FE2E, 0x0FE2F, "Cyrl" },
{ 0x0FE30, 0x0FE52, "Zyyy" },
{ 0x0FE54, 0x0FE66, "Zyyy" },
{ 0x0FE68, 0x0FE6B, "Zyyy" },
{ 0x0FE70, 0x0FE74, "Arab" },
{ 0x0FE76, 0x0FEFC, "Arab" },
{ 0x0FF01, 0x0FF20, "Zyyy" },
{ 0x0FF21, 0x0FF3A, "Latn" },
{ 0x0FF3B, 0x0FF40, "Zyyy" },
{ 0x0FF41, 0x0FF5A, "Latn" },
{ 0x0FF5B, 0x0FF65, "Zyyy" },
{ 0x0FF66, 0x0FF6F, "Kana" },
{ 0x0FF71, 0x0FF9D, "Kana" },
{ 0x0FF9E, 0x0FF9F, "Zyyy" },
{ 0x0FFA0, 0x0FFBE, "Hang" },
{ 0x0FFC2, 0x0FFC7, "Hang" },
{ 0x0FFCA, 0x0FFCF, "Hang" },
{ 0x0FFD2, 0x0FFD7, "Hang" },
{ 0x0FFDA, 0x0FFDC, "Hang" },
{ 0x0FFE0, 0x0FFE6, "Zyyy" },
{ 0x0FFE8, 0x0FFEE, "Zyyy" },
{ 0x0FFF9, 0x0FFFD, "Zyyy" },
{ 0x10000, 0x1000B, "Linb" },
{ 0x1000D, 0x10026, "Linb" },
{ 0x10028, 0x1003A, "Linb" },
{ 0x1003C, 0x1003D, "Linb" },
{ 0x1003F, 0x1004D, "Linb" },
{ 0x10050, 0x1005D, "Linb" },
{ 0x10080, 0x100FA, "Linb" },
{ 0x10100, 0x10102, "Zyyy" },
{ 0x10107, 0x10133, "Zyyy" },
{ 0x10137, 0x1013F, "Zyyy" },
{ 0x10140, 0x1018E, "Grek" },
{ 0x10190, 0x1019C, "Zyyy" },
{ 0x101D0, 0x101FC, "Zyyy" },
{ 0x10280, 0x1029C, "Lyci" },
{ 0x102A0, 0x102D0, "Cari" },
{ 0x102E1, 0x102FB, "Zyyy" },
{ 0x10300, 0x10323, "Ital" },
{ 0x1032D, 0x1032F, "Ital" },
{ 0x10330, 0x1034A, "Goth" },
{ 0x10350, 0x1037A, "Perm" },
{ 0x10380, 0x1039D, "Ugar" },
{ 0x103A0, 0x103C3, "Xpeo" },
{ 0x103C8, 0x103D5, "Xpeo" },
{ 0x10400, 0x1044F, "Dsrt" },
{ 0x10450, 0x1047F, "Shaw" },
{ 0x10480, 0x1049D, "Osma" },
{ 0x104A0, 0x104A9, "Osma" },
{ 0x104B0, 0x104D3, "Osge" },
{ 0x104D8, 0x104FB, "Osge" },
{ 0x10500, 0x10527, "Elba" },
{ 0x10530, 0x10563, "Aghb" },
{ 0x10570, 0x1057A, "Vith" },
{ 0x1057C, 0x1058A, "Vith" },
{ 0x1058C, 0x10592, "Vith" },
{ 0x10594, 0x10595, "Vith" },
{ 0x10597, 0x105A1, "Vith" },
{ 0x105A3, 0x105B1, "Vith" },
{ 0x105B3, 0x105B9, "Vith" },
{ 0x105BB, 0x105BC, "Vith" },
{ 0x10600, 0x10736, "Lina" },
{ 0x10740, 0x10755, "Lina" },
{ 0x10760, 0x10767, "Lina" },
{ 0x10780, 0x10785, "Latn" },
{ 0x10787, 0x107B0, "Latn" },
{ 0x107B2, 0x107BA, "Latn" },
{ 0x10800, 0x10805, "Cprt" },
{ 0x1080A, 0x10835, "Cprt" },
{ 0x10837, 0x10838, "Cprt" },
{ 0x10840, 0x10855, "Armi" },
{ 0x10857, 0x1085F, "Armi" },
{ 0x10860, 0x1087F, "Palm" },
{ 0x10880, 0x1089E, "Nbat" },
{ 0x108A7, 0x108AF, "Nbat" },
{ 0x108E0, 0x108F2, "Hatr" },
{ 0x108F4, 0x108F5, "Hatr" },
{ 0x108FB, 0x108FF, "Hatr" },
{ 0x10900, 0x1091B, "Phnx" },
{ 0x10920, 0x10939, "Lydi" },
{ 0x10980, 0x1099F, "Mero" },
{ 0x109A0, 0x109B7, "Merc" },
{ 0x109BC, 0x109CF, "Merc" },
{ 0x109D2, 0x109FF, "Merc" },
{ 0x10A00, 0x10A03, "Khar" },
{ 0x10A05, 0x10A06, "Khar" },
{ 0x10A0C, 0x10A13, "Khar" },
{ 0x10A15, 0x10A17, "Khar" },
{ 0x10A19, 0x10A35, "Khar" },
{ 0x10A38, 0x10A3A, "Khar" },
{ 0x10A3F, 0x10A48, "Khar" },
{ 0x10A50, 0x10A58, "Khar" },
{ 0x10A60, 0x10A7F, "Sarb" },
{ 0x10A80, 0x10A9F, "Narb" },
{ 0x10AC0, 0x10AE6, "Mani" },
{ 0x10AEB, 0x10AF6, "Mani" },
{ 0x10B00, 0x10B35, "Avst" },
{ 0x10B39, 0x10B3F, "Avst" },
{ 0x10B40, 0x10B55, "Prti" },
{ 0x10B58, 0x10B5F, "Prti" },
{ 0x10B60, 0x10B72, "Phli" },
{ 0x10B78, 0x10B7F, "Phli" },
{ 0x10B80, 0x10B91, "Phlp" },
{ 0x10B99, 0x10B9C, "Phlp" },
{ 0x10BA9, 0x10BAF, "Phlp" },
{ 0x10C00, 0x10C48, "Orkh" },
{ 0x10C80, 0x10CB2, "Hung" },
{ 0x10CC0, 0x10CF2, "Hung" },
{ 0x10CFA, 0x10CFF, "Hung" },
{ 0x10D00, 0x10D27, "Rohg" },
{ 0x10D30, 0x10D39, "Rohg" },
{ 0x10E60, 0x10E7E, "Arab" },
{ 0x10E80, 0x10EA9, "Yezi" },
{ 0x10EAB, 0x10EAD, "Yezi" },
{ 0x10EB0, 0x10EB1, "Yezi" },
{ 0x10EFD, 0x10EFF, "Arab" },
{ 0x10F00, 0x10F27, "Sogo" },
{ 0x10F30, 0x10F59, "Sogd" },
{ 0x10F70, 0x10F89, "Ougr" },
{ 0x10FB0, 0x10FCB, "Chrs" },
{ 0x10FE0, 0x10FF6, "Elym" },
{ 0x11000, 0x1104D, "Brah" },
{ 0x11052, 0x11075, "Brah" },
{ 0x11080, 0x110C2, "Kthi" },
{ 0x110D0, 0x110E8, "Sora" },
{ 0x110F0, 0x110F9, "Sora" },
{ 0x11100, 0x11134, "Cakm" },
{ 0x11136, 0x11147, "Cakm" },
{ 0x11150, 0x11176, "Mahj" },
{ 0x11180, 0x111DF, "Shrd" },
{ 0x111E1, 0x111F4, "Sinh" },
{ 0x11200, 0x11211, "Khoj" },
{ 0x11213, 0x11241, "Khoj" },
{ 0x11280, 0x11286, "Mult" },
{ 0x1128A, 0x1128D, "Mult" },
{ 0x1128F, 0x1129D, "Mult" },
{ 0x1129F, 0x112A9, "Mult" },
{ 0x112B0, 0x112EA, "Sind" },
{ 0x112F0, 0x112F9, "Sind" },
{ 0x11300, 0x11303, "Gran" },
{ 0x11305, 0x1130C, "Gran" },
{ 0x1130F, 0x11310, "Gran" },
{ 0x11313, 0x11328, "Gran" },
{ 0x1132A, 0x11330, "Gran" },
{ 0x11332, 0x11333, "Gran" },
{ 0x11335, 0x11339, "Gran" },
{ 0x1133C, 0x11344, "Gran" },
{ 0x11347, 0x11348, "Gran" },
{ 0x1134B, 0x1134D, "Gran" },
{ 0x1135D, 0x11363, "Gran" },
{ 0x11366, 0x1136C, "Gran" },
{ 0x11370, 0x11374, "Gran" },
{ 0x11400, 0x1145B, "Newa" },
{ 0x1145D, 0x11461, "Newa" },
{ 0x11480, 0x114C7, "Tirh" },
{ 0x114D0, 0x114D9, "Tirh" },
{ 0x11580, 0x115B5, "Sidd" },
{ 0x115B8, 0x115DD, "Sidd" },
{ 0x11600, 0x11644, "Modi" },
{ 0x11650, 0x11659, "Modi" },
{ 0x11660, 0x1166C, "Mong" },
{ 0x11680, 0x116B9, "Takr" },
{ 0x116C0, 0x116C9, "Takr" },
{ 0x11700, 0x1171A, "Ahom" },
{ 0x1171D, 0x1172B, "Ahom" },
{ 0x11730, 0x11746, "Ahom" },
{ 0x11800, 0x1183B, "Dogr" },
{ 0x118A0, 0x118F2, "Wara" },
{ 0x11900, 0x11906, "Diak" },
{ 0x1190C, 0x11913, "Diak" },
{ 0x11915, 0x11916, "Diak" },
{ 0x11918, 0x11935, "Diak" },
{ 0x11937, 0x11938, "Diak" },
{ 0x1193B, 0x11946, "Diak" },
{ 0x11950, 0x11959, "Diak" },
{ 0x119A0, 0x119A7, "Nand" },
{ 0x119AA, 0x119D7, "Nand" },
{ 0x119DA, 0x119E4, "Nand" },
{ 0x11A00, 0x11A47, "Zanb" },
{ 0x11A50, 0x11AA2, "Soyo" },
{ 0x11AB0, 0x11ABF, "Cans" },
{ 0x11AC0, 0x11AF8, "Pauc" },
{ 0x11B00, 0x11B09, "Deva" },
{ 0x11C00, 0x11C08, "Bhks" },
{ 0x11C0A, 0x11C36, "Bhks" },
{ 0x11C38, 0x11C45, "Bhks" },
{ 0x11C50, 0x11C6C, "Bhks" },
{ 0x11C70, 0x11C8F, "Marc" },
{ 0x11C92, 0x11CA7, "Marc" },
{ 0x11CA9, 0x11CB6, "Marc" },
{ 0x11D00, 0x11D06, "Gonm" },
{ 0x11D08, 0x11D09, "Gonm" },
{ 0x11D0B, 0x11D36, "Gonm" },
{ 0x11D3C, 0x11D3D, "Gonm" },
{ 0x11D3F, 0x11D47, "Gonm" },
{ 0x11D50, 0x11D59, "Gonm" },
{ 0x11D60, 0x11D65, "Gong" },
{ 0x11D67, 0x11D68, "Gong" },
{ 0x11D6A, 0x11D8E, "Gong" },
{ 0x11D90, 0x11D91, "Gong" },
{ 0x11D93, 0x11D98, "Gong" },
{ 0x11DA0, 0x11DA9, "Gong" },
{ 0x11EE0, 0x11EF8, "Maka" },
{ 0x11F00, 0x11F10, "Kawi" },
{ 0x11F12, 0x11F3A, "Kawi" },
{ 0x11F3E, 0x11F59, "Kawi" },
{ 0x11FC0, 0x11FF1, "Taml" },
{ 0x12000, 0x12399, "Xsux" },
{ 0x12400, 0x1246E, "Xsux" },
{ 0x12470, 0x12474, "Xsux" },
{ 0x12480, 0x12543, "Xsux" },
{ 0x12F90, 0x12FF2, "Cpmn" },
{ 0x13000, 0x13455, "Egyp" },
{ 0x14400, 0x14646, "Hluw" },
{ 0x16800, 0x16A38, "Bamu" },
{ 0x16A40, 0x16A5E, "Mroo" },
{ 0x16A60, 0x16A69, "Mroo" },
{ 0x16A6E, 0x16A6F, "Mroo" },
{ 0x16A70, 0x16ABE, "Tnsa" },
{ 0x16AC0, 0x16AC9, "Tnsa" },
{ 0x16AD0, 0x16AED, "Bass" },
{ 0x16AF0, 0x16AF5, "Bass" },
{ 0x16B00, 0x16B45, "Hmng" },
{ 0x16B50, 0x16B59, "Hmng" },
{ 0x16B5B, 0x16B61, "Hmng" },
{ 0x16B63, 0x16B77, "Hmng" },
{ 0x16B7D, 0x16B8F, "Hmng" },
{ 0x16E40, 0x16E9A, "Medf" },
{ 0x16F00, 0x16F4A, "Plrd" },
{ 0x16F4F, 0x16F87, "Plrd" },
{ 0x16F8F, 0x16F9F, "Plrd" },
{ 0x16FE2, 0x16FE3, "Hani" },
{ 0x16FF0, 0x16FF1, "Hani" },
{ 0x17000, 0x187F7, "Tang" },
{ 0x18800, 0x18AFF, "Tang" },
{ 0x18B00, 0x18CD5, "Kits" },
{ 0x18D00, 0x18D08, "Tang" },
{ 0x1AFF0, 0x1AFF3, "Kana" },
{ 0x1AFF5, 0x1AFFB, "Kana" },
{ 0x1AFFD, 0x1AFFE, "Kana" },
{ 0x1B001, 0x1B11F, "Hira" },
{ 0x1B120, 0x1B122, "Kana" },
{ 0x1B150, 0x1B152, "Hira" },
{ 0x1B164, 0x1B167, "Kana" },
{ 0x1B170, 0x1B2FB, "Nshu" },
{ 0x1BC00, 0x1BC6A, "Dupl" },
{ 0x1BC70, 0x1BC7C, "Dupl" },
{ 0x1BC80, 0x1BC88, "Dupl" },
{ 0x1BC90, 0x1BC99, "Dupl" },
{ 0x1BC9C, 0x1BC9F, "Dupl" },
{ 0x1BCA0, 0x1BCA3, "Zyyy" },
{ 0x1CF00, 0x1CF2D, "Zinh" },
{ 0x1CF30, 0x1CF46, "Zinh" },
{ 0x1CF50, 0x1CFC3, "Zyyy" },
{ 0x1D000, 0x1D0F5, "Zyyy" },
{ 0x1D100, 0x1D126, "Zyyy" },
{ 0x1D129, 0x1D166, "Zyyy" },
{ 0x1D167, 0x1D169, "Zinh" },
{ 0x1D16A, 0x1D17A, "Zyyy" },
{ 0x1D17B, 0x1D182, "Zinh" },
{ 0x1D183, 0x1D184, "Zyyy" },
{ 0x1D185, 0x1D18B, "Zinh" },
{ 0x1D18C, 0x1D1A9, "Zyyy" },
{ 0x1D1AA, 0x1D1AD, "Zinh" },
{ 0x1D1AE, 0x1D1EA, "Zyyy" },
{ 0x1D200, 0x1D245, "Grek" },
{ 0x1D2C0, 0x1D2D3, "Zyyy" },
{ 0x1D2E0, 0x1D2F3, "Zyyy" },
{ 0x1D300, 0x1D356, "Zyyy" },
{ 0x1D360, 0x1D378, "Zyyy" },
{ 0x1D400, 0x1D454, "Zyyy" },
{ 0x1D456, 0x1D49C, "Zyyy" },
{ 0x1D49E, 0x1D49F, "Zyyy" },
{ 0x1D4A5, 0x1D4A6, "Zyyy" },
{ 0x1D4A9, 0x1D4AC, "Zyyy" },
{ 0x1D4AE, 0x1D4B9, "Zyyy" },
{ 0x1D4BD, 0x1D4C3, "Zyyy" },
{ 0x1D4C5, 0x1D505, "Zyyy" },
{ 0x1D507, 0x1D50A, "Zyyy" },
{ 0x1D50D, 0x1D514, "Zyyy" },
{ 0x1D516, 0x1D51C, "Zyyy" },
{ 0x1D51E, 0x1D539, "Zyyy" },
{ 0x1D53B, 0x1D53E, "Zyyy" },
{ 0x1D540, 0x1D544, "Zyyy" },
{ 0x1D54A, 0x1D550, "Zyyy" },
{ 0x1D552, 0x1D6A5, "Zyyy" },
{ 0x1D6A8, 0x1D7CB, "Zyyy" },
{ 0x1D7CE, 0x1D7FF, "Zyyy" },
{ 0x1D800, 0x1DA8B, "Sgnw" },
{ 0x1DA9B, 0x1DA9F, "Sgnw" },
{ 0x1DAA1, 0x1DAAF, "Sgnw" },
{ 0x1DF00, 0x1DF1E, "Latn" },
{ 0x1DF25, 0x1DF2A, "Latn" },
{ 0x1E000, 0x1E006, "Glag" },
{ 0x1E008, 0x1E018, "Glag" },
{ 0x1E01B, 0x1E021, "Glag" },
{ 0x1E023, 0x1E024, "Glag" },
{ 0x1E026, 0x1E02A, "Glag" },
{ 0x1E030, 0x1E06D, "Cyrl" },
{ 0x1E100, 0x1E12C, "Hmnp" },
{ 0x1E130, 0x1E13D, "Hmnp" },
{ 0x1E140, 0x1E149, "Hmnp" },
{ 0x1E14E, 0x1E14F, "Hmnp" },
{ 0x1E290, 0x1E2AE, "Toto" },
{ 0x1E2C0, 0x1E2F9, "Wcho" },
{ 0x1E4D0, 0x1E4F9, "Nagm" },
{ 0x1E7E0, 0x1E7E6, "Ethi" },
{ 0x1E7E8, 0x1E7EB, "Ethi" },
{ 0x1E7ED, 0x1E7EE, "Ethi" },
{ 0x1E7F0, 0x1E7FE, "Ethi" },
{ 0x1E800, 0x1E8C4, "Mend" },
{ 0x1E8C7, 0x1E8D6, "Mend" },
{ 0x1E900, 0x1E94B, "Adlm" },
{ 0x1E950, 0x1E959, "Adlm" },
{ 0x1E95E, 0x1E95F, "Adlm" },
{ 0x1EC71, 0x1ECB4, "Zyyy" },
{ 0x1ED01, 0x1ED3D, "Zyyy" },
{ 0x1EE00, 0x1EE03, "Arab" },
{ 0x1EE05, 0x1EE1F, "Arab" },
{ 0x1EE21, 0x1EE22, "Arab" },
{ 0x1EE29, 0x1EE32, "Arab" },
{ 0x1EE34, 0x1EE37, "Arab" },
{ 0x1EE4D, 0x1EE4F, "Arab" },
{ 0x1EE51, 0x1EE52, "Arab" },
{ 0x1EE61, 0x1EE62, "Arab" },
{ 0x1EE67, 0x1EE6A, "Arab" },
{ 0x1EE6C, 0x1EE72, "Arab" },
{ 0x1EE74, 0x1EE77, "Arab" },
{ 0x1EE79, 0x1EE7C, "Arab" },
{ 0x1EE80, 0x1EE89, "Arab" },
{ 0x1EE8B, 0x1EE9B, "Arab" },
{ 0x1EEA1, 0x1EEA3, "Arab" },
{ 0x1EEA5, 0x1EEA9, "Arab" },
{ 0x1EEAB, 0x1EEBB, "Arab" },
{ 0x1EEF0, 0x1EEF1, "Arab" },
{ 0x1F000, 0x1F02B, "Zyyy" },
{ 0x1F030, 0x1F093, "Zyyy" },
{ 0x1F0A0, 0x1F0AE, "Zyyy" },
{ 0x1F0B1, 0x1F0BF, "Zyyy" },
{ 0x1F0C1, 0x1F0CF, "Zyyy" },
{ 0x1F0D1, 0x1F0F5, "Zyyy" },
{ 0x1F100, 0x1F1AD, "Zyyy" },
{ 0x1F1E6, 0x1F1FF, "Zyyy" },
{ 0x1F201, 0x1F202, "Zyyy" },
{ 0x1F210, 0x1F23B, "Zyyy" },
{ 0x1F240, 0x1F248, "Zyyy" },
{ 0x1F250, 0x1F251, "Zyyy" },
{ 0x1F260, 0x1F265, "Zyyy" },
{ 0x1F300, 0x1F6D7, "Zyyy" },
{ 0x1F6DC, 0x1F6EC, "Zyyy" },
{ 0x1F6F0, 0x1F6FC, "Zyyy" },
{ 0x1F700, 0x1F776, "Zyyy" },
{ 0x1F77B, 0x1F7D9, "Zyyy" },
{ 0x1F7E0, 0x1F7EB, "Zyyy" },
{ 0x1F800, 0x1F80B, "Zyyy" },
{ 0x1F810, 0x1F847, "Zyyy" },
{ 0x1F850, 0x1F859, "Zyyy" },
{ 0x1F860, 0x1F887, "Zyyy" },
{ 0x1F890, 0x1F8AD, "Zyyy" },
{ 0x1F8B0, 0x1F8B1, "Zyyy" },
{ 0x1F900, 0x1FA53, "Zyyy" },
{ 0x1FA60, 0x1FA6D, "Zyyy" },
{ 0x1FA70, 0x1FA7C, "Zyyy" },
{ 0x1FA80, 0x1FA88, "Zyyy" },
{ 0x1FA90, 0x1FABD, "Zyyy" },
{ 0x1FABF, 0x1FAC5, "Zyyy" },
{ 0x1FACE, 0x1FADB, "Zyyy" },
{ 0x1FAE0, 0x1FAE8, "Zyyy" },
{ 0x1FAF0, 0x1FAF8, "Zyyy" },
{ 0x1FB00, 0x1FB92, "Zyyy" },
{ 0x1FB94, 0x1FBCA, "Zyyy" },
{ 0x1FBF0, 0x1FBF9, "Zyyy" },
{ 0x20000, 0x2A6DF, "Hani" },
{ 0x2A700, 0x2B739, "Hani" },
{ 0x2B740, 0x2B81D, "Hani" },
{ 0x2B820, 0x2CEA1, "Hani" },
{ 0x2CEB0, 0x2EBE0, "Hani" },
{ 0x2EBF0, 0x2EE5D, "Hani" },
{ 0x2F800, 0x2FA1D, "Hani" },
{ 0x30000, 0x3134A, "Hani" },
{ 0x31350, 0x323AF, "Hani" },
{ 0xE0020, 0xE007F, "Zyyy" },
{ 0xE0100, 0xE01EF, "Zinh" },
},
-- Scripts.txt gives full names; here we consider them aliases to save space.
aliases = {
Adlm = "Adlam",
Aghb = "Caucasian Albanian",
Ahom = "Ahom",
Arab = "Arabic",
Armi = "Imperial Aramaic",
Armn = "Armenian",
Avst = "Avestan",
Bali = "Balinese",
Bamu = "Bamum",
Bass = "Bassa Vah",
Batk = "Batak",
Beng = "Bengali",
Bhks = "Bhaiksuki",
Bopo = "Bopomofo",
Brah = "Brahmi",
Brai = "Braille",
Bugi = "Buginese",
Buhd = "Buhid",
Cakm = "Chakma",
Cans = "Canadian Aboriginal",
Cari = "Carian",
Cham = "Cham",
Cher = "Cherokee",
Chrs = "Chorasmian",
Copt = "Coptic",
Cpmn = "Cypro Minoan",
Cprt = "Cypriot",
Cyrl = "Cyrillic",
Deva = "Devanagari",
Diak = "Dives Akuru",
Dogr = "Dogra",
Dsrt = "Deseret",
Dupl = "Duployan",
Egyp = "Egyptian Hieroglyphs",
Elba = "Elbasan",
Elym = "Elymaic",
Ethi = "Ethiopic",
Geor = "Georgian",
Glag = "Glagolitic",
Gong = "Gunjala Gondi",
Gonm = "Masaram Gondi",
Goth = "Gothic",
Gran = "Grantha",
Grek = "Greek",
Gujr = "Gujarati",
Guru = "Gurmukhi",
Hang = "Hangul",
Hani = "Han",
Hano = "Hanunoo",
Hatr = "Hatran",
Hebr = "Hebrew",
Hira = "Hiragana",
Hluw = "Anatolian Hieroglyphs",
Hmng = "Pahawh Hmong",
Hmnp = "Nyiakeng Puachue Hmong",
Hrkt = "Katakana Or Hiragana",
Hung = "Old Hungarian",
Ital = "Old Italic",
Java = "Javanese",
Kali = "Kayah Li",
Kana = "Katakana",
Kawi = "Kawi",
Khar = "Kharoshthi",
Khmr = "Khmer",
Khoj = "Khojki",
Kits = "Khitan Small Script",
Knda = "Kannada",
Kthi = "Kaithi",
Lana = "Tai Tham",
Laoo = "Lao",
Latn = "Latin",
Lepc = "Lepcha",
Limb = "Limbu",
Lina = "Linear A",
Linb = "Linear B",
Lisu = "Lisu",
Lyci = "Lycian",
Lydi = "Lydian",
Mahj = "Mahajani",
Maka = "Makasar",
Mand = "Mandaic",
Mani = "Manichaean",
Marc = "Marchen",
Medf = "Medefaidrin",
Mend = "Mende Kikakui",
Merc = "Meroitic Cursive",
Mero = "Meroitic Hieroglyphs",
Mlym = "Malayalam",
Modi = "Modi",
Mong = "Mongolian",
Mroo = "Mro",
Mtei = "Meetei Mayek",
Mult = "Multani",
Mymr = "Myanmar",
Nagm = "Nag Mundari",
Nand = "Nandinagari",
Narb = "Old North Arabian",
Nbat = "Nabataean",
Newa = "Newa",
Nkoo = "NKo",
Nshu = "Nushu",
Ogam = "Ogham",
Olck = "Ol Chiki",
Orkh = "Old Turkic",
Orya = "Oriya",
Osge = "Osage",
Osma = "Osmanya",
Ougr = "Old Uyghur",
Palm = "Palmyrene",
Pauc = "Pau Cin Hau",
Perm = "Old Permic",
Phag = "Phags Pa",
Phli = "Inscriptional Pahlavi",
Phlp = "Psalter Pahlavi",
Phnx = "Phoenician",
Plrd = "Miao",
Prti = "Inscriptional Parthian",
Rjng = "Rejang",
Rohg = "Hanifi Rohingya",
Runr = "Runic",
Samr = "Samaritan",
Sarb = "Old South Arabian",
Saur = "Saurashtra",
Sgnw = "SignWriting",
Shaw = "Shavian",
Shrd = "Sharada",
Sidd = "Siddham",
Sind = "Khudawadi",
Sinh = "Sinhala",
Sogd = "Sogdian",
Sogo = "Old Sogdian",
Sora = "Sora Sompeng",
Soyo = "Soyombo",
Sund = "Sundanese",
Sylo = "Syloti Nagri",
Syrc = "Syriac",
Tagb = "Tagbanwa",
Takr = "Takri",
Tale = "Tai Le",
Talu = "New Tai Lue",
Taml = "Tamil",
Tang = "Tangut",
Tavt = "Tai Viet",
Telu = "Telugu",
Tfng = "Tifinagh",
Tglg = "Tagalog",
Thaa = "Thaana",
Thai = "Thai",
Tibt = "Tibetan",
Tirh = "Tirhuta",
Tnsa = "Tangsa",
Toto = "Toto",
Ugar = "Ugaritic",
Vaii = "Vai",
Vith = "Vithkuqi",
Wara = "Warang Citi",
Wcho = "Wancho",
Xpeo = "Old Persian",
Xsux = "Cuneiform",
Yezi = "Yezidi",
Yiii = "Yi",
Zanb = "Zanabazar Square",
Zinh = "Inherited",
Zyyy = "Common",
Zzzz = "Unknown",
},
}
-- Required for binary search function in [[Module:Language/scripts]].
-- Cannot get length of module loaded with mw.loadData.
data.ranges.length = #data.ranges
data.rtl = {}
for _, script in ipairs(mw.loadData "Module:Lang/data".rtl_scripts) do
-- [[Module:Lang/data]] has script codes in lowercase;
-- this module has script codes with the first letter capitalized.
data.rtl[script:gsub("^%a", string.upper)] = true
end
return data
6afbaa9e21efd3898f0ff056b5456c0cd5813400
Tibetan Empire
0
6
10
2023-09-13T20:51:28Z
Ilovethehitgameomori
2
Ilovethehitgameomori moved page [[Tibetan Empire]] to [[Khaganate of Tibet]]: forgot what i changed the name to LOL
wikitext
text/x-wiki
#REDIRECT [[Khaganate of Tibet]]
8fffc4bd94bfc583d417b35f6cac457a5f561f02
Nation template
0
7
11
2023-09-13T21:06:11Z
Ilovethehitgameomori
2
Created page with "{| style="float: right; padding: 5px; background: #eaecf0; border: 3px solid #000000; width: 25%; margin-left: 3px" ! colspan="2" | {{{subj|Country name}}} |- ! colspan="2" | [[File:{{{img|Image.jpg}}}|200px]] |- | colspan="2" style="text-align: center" | <small>{{{capt|Flag of country name}}}</small> |- ! style="text-align: left;" | Capital city | {{{Capital city|City name}}} |- ! style="text-align: left;" | Government type | {{{Government type|Government type}}} |- ! s..."
wikitext
text/x-wiki
{| style="float: right; padding: 5px; background: #eaecf0; border: 3px solid #000000; width: 25%; margin-left: 3px"
! colspan="2" | {{{subj|Country name}}}
|-
! colspan="2" | [[File:{{{img|Image.jpg}}}|200px]]
|-
| colspan="2" style="text-align: center" | <small>{{{capt|Flag of country name}}}</small>
|-
! style="text-align: left;" | Capital city
| {{{Capital city|City name}}}
|-
! style="text-align: left;" | Government type
| {{{Government type|Government type}}}
|-
! style="text-align: left;" | Leader
| {{{Leader|Leader name}}}
|-
! style="text-align: left;" | Legislature
| {{{Legislature|Legislature name}}}
|-
! style="text-align: left;" | Currency
| {{{Currency|Currency name}}}
|-
|}
( Information about government, minimal history mention, leader info, etc. )
== Etymology ==
( The meaning of the name of your nation )
== History ==
( History of your nation )
== Politics and state organization ==
( Politics, ideology/state organization/provinces )
== Culture ==
( Description of your culture )
== Army structure ==
( Self explanatory )
== References ==
( Self explanatory )
0fa0143959b9af6164bccf3a6fe680dc2711960a
14
11
2023-09-13T21:26:04Z
Ilovethehitgameomori
2
wikitext
text/x-wiki
{| style="float: right; padding: 5px; background: #eaecf0; border: 1px solid #000000; width: 25%; margin-left: 3px"
! colspan="2" | {{{subj|Country name}}}
|-
! colspan="2" | [[File:{{{img|Image.jpg}}}|200px]]
|-
| colspan="2" style="text-align: center" | <small>{{{capt|Flag of country name}}}</small>
|-
! style="text-align: left;" | Capital city
| {{{Capital city|City name}}}
|-
! style="text-align: left;" | Government type
| {{{Government type|Government type}}}
|-
! style="text-align: left;" | Leader
| {{{Leader|Leader name}}}
|-
! style="text-align: left;" | Legislature
| {{{Legislature|Legislature name}}}
|-
! style="text-align: left;" | Currency
| {{{Currency|Currency name}}}
|-
|}
( Information about government, minimal history mention, leader info, etc. )
== Etymology ==
( The meaning of the name of your nation )
== History ==
( History of your nation )
== Politics and state organization ==
( Politics, ideology/state organization/provinces )
== Culture ==
( Description of your culture )
== Army structure ==
( Self explanatory )
== References ==
( Self explanatory )
9978d3cc56afb0d370d527d9de2e419857771e83
Spartan Empire
0
8
19
2023-09-13T22:46:41Z
Ilovethehitgameomori
2
Created page with "{| style="float: right; padding: 5px; background: #eaecf0; border: 1px solid #000000; width: 25%; margin-left: 3px" ! colspan="2" | {{{subj|Spartan Empire}}} |- ! colspan="2" | [[File:{{{img|Image.jpg}}}|200px]] |- | colspan="2" style="text-align: center" | <small>{{{capt|Flag of Sparta}}}</small> |- ! style="text-align: left;" | Capital city | {{{Capital city|Constantinople}}} |- ! style="text-align: left;" | Government type | {{{Government type|Monarchy}}} |- ! style="..."
wikitext
text/x-wiki
{| style="float: right; padding: 5px; background: #eaecf0; border: 1px solid #000000; width: 25%; margin-left: 3px"
! colspan="2" | {{{subj|Spartan Empire}}}
|-
! colspan="2" | [[File:{{{img|Image.jpg}}}|200px]]
|-
| colspan="2" style="text-align: center" | <small>{{{capt|Flag of Sparta}}}</small>
|-
! style="text-align: left;" | Capital city
| {{{Capital city|Constantinople}}}
|-
! style="text-align: left;" | Government type
| {{{Government type|Monarchy}}}
|-
! style="text-align: left;" | Leader
| {{{Leader|Emperor Tommy McCrady}}}
|-
! style="text-align: left;" | Currency
| {{{Currency|Imperial Pound}}}
|-
|}
The '''Spartan Empire''', more generally known as '''Sparta''', is a monarchy located in Anatolia and modern-day Greece, as well as some other territories. It is within the Imperial Alliance with the [[Khaganate of Tibet]].
== History ==
After conquering the Athenians, the Spartans quickly rose to power. With their newfound strength, they were easily quelled with their superior forces. Because of this, they flourished for many years. After becoming allies with the Khaganate of Tibet, their mutual strength grew and eventually led them to more power, making them one of the most successful powers in Eurasia.
== Politics and state organization ==
While not necessarily legislature, the government consists of imperially appointed ministers that manage the politics along with the Emperor.
== References ==
1d7ffafc70dc11d3d531028365e6ed429256433f
21
19
2023-09-13T22:48:58Z
Ilovethehitgameomori
2
wikitext
text/x-wiki
{| style="float: right; padding: 5px; background: #eaecf0; border: 1px solid #000000; width: 25%; margin-left: 3px"
! colspan="2" | {{{subj|Spartan Empire}}}
|-
! colspan="2" | [[File:{{{img|sparta.jpeg}}}|200px]]
|-
| colspan="2" style="text-align: center" | <small>{{{capt|Flag of Sparta}}}</small>
|-
! style="text-align: left;" | Capital city
| {{{Capital city|Constantinople}}}
|-
! style="text-align: left;" | Government type
| {{{Government type|Monarchy}}}
|-
! style="text-align: left;" | Leader
| {{{Leader|Emperor Tommy McCrady}}}
|-
! style="text-align: left;" | Currency
| {{{Currency|Imperial Pound}}}
|-
|}
The '''Spartan Empire''', more generally known as '''Sparta''', is a monarchy located in Anatolia and modern-day Greece, as well as some other territories. It is within the Imperial Alliance with the [[Khaganate of Tibet]].
== History ==
After conquering the Athenians, the Spartans quickly rose to power. With their newfound strength, they were easily quelled with their superior forces. Because of this, they flourished for many years. After becoming allies with the Khaganate of Tibet, their mutual strength grew and eventually led them to more power, making them one of the most successful powers in Eurasia.
== Politics and state organization ==
While not necessarily legislature, the government consists of imperially appointed ministers that manage the politics along with the Emperor.
== References ==
4587266aa4201c61cfc05aa926da7d4882fa5114
File:Sparta.jpeg
6
9
20
2023-09-13T22:48:17Z
Ilovethehitgameomori
2
wikitext
text/x-wiki
da39a3ee5e6b4b0d3255bfef95601890afd80709
MediaWiki:Common.js
8
11
27
2023-09-14T01:04:47Z
Ilovethehitgameomori
2
Created page with "/* * This is the CSS common to all desktop skins on en.Wikipedia. * Styling inside .mw-parser-output should generally use TemplateStyles. */ /* Reset italic styling set by user agent */ cite, dfn { font-style: inherit; } /* Straight quote marks for <q> */ q { quotes: '"' '"' "'" "'"; } /* Avoid collision of blockquote with floating elements by swapping margin and padding */ blockquote { overflow: hidden; margin: 1em 0; padding: 0 40px; } /* Consistent size for..."
javascript
text/javascript
/*
* This is the CSS common to all desktop skins on en.Wikipedia.
* Styling inside .mw-parser-output should generally use TemplateStyles.
*/
/* Reset italic styling set by user agent */
cite,
dfn {
font-style: inherit;
}
/* Straight quote marks for <q> */
q {
quotes: '"' '"' "'" "'";
}
/* Avoid collision of blockquote with floating elements by swapping margin and padding */
blockquote {
overflow: hidden;
margin: 1em 0;
padding: 0 40px;
}
/* Consistent size for <small>, <sub> and <sup> */
small {
font-size: 85%;
}
.mw-body-content sub,
.mw-body-content sup {
font-size: 80%;
}
/* Same spacing for indented and unindented paragraphs on talk pages */
.ns-talk .mw-body-content dd {
margin-top: 0.4em;
margin-bottom: 0.4em;
}
/* Reduce page jumps by hiding collapsed/dismissed content */
.client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child),
/* Avoid FOUC/reflows on collapsed elements. */
/* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */
/* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */
/* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ),
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content,
/* Hide charinsert base for those not using the gadget */
#editpage-specialchars {
display: none;
}
/* Make the list of references smaller
* Keep in sync with Template:Refbegin/styles.css
* And Template:Reflist/styles.css
*/
ol.references {
font-size: 90%;
margin-bottom: 0.5em;
}
/* Cite customizations for Parsoid
* Once everything uses the one true parser these are just customizations
*/
span[ rel="mw:referencedBy" ] {
counter-reset: mw-ref-linkback 0;
}
span[ rel='mw:referencedBy' ] > a::before {
content: counter( mw-ref-linkback, lower-alpha );
font-size: 80%;
font-weight: bold;
font-style: italic;
}
a[ rel="mw:referencedBy" ]::before {
font-weight: bold;
content: "^";
}
span[ rel="mw:referencedBy" ]::before {
content: "^ ";
}
.mw-ref > a[data-mw-group=lower-alpha]::after {
content: '[' counter( mw-Ref, lower-alpha ) ']';
}
.mw-ref > a[data-mw-group=upper-alpha]::after {
content: '[' counter( mw-Ref, upper-alpha ) ']';
}
.mw-ref > a[data-mw-group=decimal]::after {
content: '[' counter( mw-Ref, decimal ) ']';
}
.mw-ref > a[data-mw-group=lower-roman]::after {
content: '[' counter( mw-Ref, lower-roman ) ']';
}
.mw-ref > a[data-mw-group=upper-roman]::after {
content: '[' counter( mw-Ref, upper-roman ) ']';
}
.mw-ref > a[data-mw-group=lower-greek]::after {
content: '[' counter( mw-Ref, lower-greek ) ']';
}
/* Styling for jQuery makeCollapsible, matching that of collapseButton */
.mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) {
font-weight: normal;
padding-right: 0.2em;
padding-left: 0.2em;
}
.mw-collapsible-leftside-toggle .mw-collapsible-toggle {
/* @noflip */
float: left;
}
/* Lists in wikitable data cells are always left-aligned */
.wikitable td ul,
.wikitable td ol,
.wikitable td dl {
/* @noflip */
text-align: left;
}
/* Change the external link icon to a PDF icon for all PDF files */
.mw-parser-output a[href$=".pdf"].external,
.mw-parser-output a[href*=".pdf?"].external,
.mw-parser-output a[href*=".pdf#"].external,
.mw-parser-output a[href$=".PDF"].external,
.mw-parser-output a[href*=".PDF?"].external,
.mw-parser-output a[href*=".PDF#"].external {
background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right;
/* @noflip */
padding: 8px 18px 8px 0;
}
/* System messages styled similarly to fmbox */
/* for .mw-warning-with-logexcerpt, behavior of this line differs between
* the edit-protected notice and the special:Contribs for blocked users
* The latter has specificity of 3 classes so we have to triple up here.
*/
.mw-warning-with-logexcerpt.mw-warning-with-logexcerpt.mw-warning-with-logexcerpt,
div.mw-lag-warn-high,
div.mw-cascadeprotectedwarning,
div#mw-protect-cascadeon {
clear: both;
margin: 0.2em 0;
border: 1px solid #bb7070;
background-color: #ffdbdb;
padding: 0.25em 0.9em;
box-sizing: border-box;
}
/* default colors for partial block message */
/* gotta get over the hump introduced by the triple class above */
.mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt.mw-warning-with-logexcerpt {
border-color: #fc3;
background-color: #fef6e7;
}
/* Minimum thumb width */
figure[typeof~='mw:File/Thumb'],
figure[typeof~='mw:File/Frame'],
.thumbinner {
min-width: 100px;
}
/* Prevent floating boxes from overlapping any category listings,
file histories, edit previews, and edit [Show changes] views. */
#mw-subcategories,
#mw-pages,
#mw-category-media,
#filehistory,
#wikiPreview,
#wikiDiff {
clear: both;
}
/* Styling for tags in changes pages */
.mw-tag-markers {
font-style: italic;
font-size: 90%;
}
/* Hide stuff meant for accounts with special permissions. Made visible again in
[[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]],
[[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]],
[[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]],
[[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */
.checkuser-show,
.sysop-show,
.abusefilter-show,
.abusefilter-helper-show,
.patroller-show,
.templateeditor-show,
.extendedmover-show,
.extendedconfirmed-show,
.autoconfirmed-show,
.user-show {
display: none;
}
/* Hide the redlink generated by {{Editnotice}},
this overrides the ".sysop-show { display: none; }" above that applies
to the same link as well. See [[phab:T45013]]
Hide the images in editnotices to keep them readable in VE view.
Long term, editnotices should become a core feature so that they can be designed responsive. */
.ve-ui-mwNoticesPopupTool-item .editnotice-redlink,
.ve-ui-mwNoticesPopupTool-item .mbox-image,
.ve-ui-mwNoticesPopupTool-item .mbox-imageright {
display: none !important;
}
/* Remove bullets when there are multiple edit page warnings */
ul.permissions-errors {
margin: 0;
}
ul.permissions-errors > li {
list-style: none;
}
/* larger inline math */
span.mwe-math-mathml-inline {
font-size: 118%;
}
/* Make <math display="block"> be left aligned with one space indent for
* compatibility with style conventions
*/
.mwe-math-fallback-image-display,
.mwe-math-mathml-display {
margin-left: 1.6em !important;
margin-top: 0.6em;
margin-bottom: 0.6em;
}
.mwe-math-mathml-display math {
display: inline;
}
@media screen {
/* Put a chequered background behind images, only visible if they have transparency,
* except on main, user, and portal namespaces
*/
body:not(.ns-0):not(.ns-2):not(.ns-100) .gallerybox .thumb img {
background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat;
}
/* Display "From Wikipedia, the free encyclopedia" in skins that support it,
do not apply to print mode */
#siteSub {
display: block;
}
}
/* Hide FlaggedRevs notice UI when there are no pending changes */
.flaggedrevs_draft_synced,
.flaggedrevs_stable_synced,
/* "Temporary" to remove links in sidebar T255381 */
#t-upload,
/* Hide broken download box on Special:Book pending T285400 */
.mw-special-Book #coll-downloadbox {
display: none;
}
/*
* BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS;
* SEE [[MediaWiki talk:Common.css/to do]]
*/
/* Infobox template style */
.infobox {
border: 1px solid #a2a9b1;
border-spacing: 3px;
background-color: #f8f9fa;
color: black;
/* @noflip */
margin: 0.5em 0 0.5em 1em;
padding: 0.2em;
/* @noflip */
float: right;
/* @noflip */
clear: right;
font-size: 88%;
line-height: 1.5em;
width: 22em;
}
.infobox-header,
.infobox-label,
.infobox-above,
.infobox-full-data,
.infobox-data,
.infobox-below,
.infobox-subheader,
.infobox-image,
.infobox-navbar,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
vertical-align: top;
}
.infobox-label,
.infobox-data,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
/* @noflip */
text-align: left;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-above,
.infobox .infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
font-size: 125%;
font-weight: bold;
text-align: center;
}
.infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
padding: 0.2em;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-header,
.infobox .infobox-subheader,
.infobox .infobox-image,
.infobox .infobox-full-data,
.infobox .infobox-below {
text-align: center;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-navbar {
/* @noflip */
text-align: right;
}
/* Normal font styling for wikitable row headers with scope="row" tag */
.wikitable.plainrowheaders th[scope=row],
.wikitable.plainrowheaders th[scope=rowgroup] {
font-weight: normal;
/* @noflip */
text-align: left;
}
/* Remove underlines from certain links */
.nounderlines a,
.IPA a:link,
.IPA a:visited {
text-decoration: none !important;
}
/* Prevent line breaks in silly places where desired (nowrap)
and links when we don't want them to (nowraplinks a) */
.nowrap,
.nowraplinks a {
white-space: nowrap;
}
/* But allow wrapping where desired: */
.wrap,
.wraplinks a {
white-space: normal;
}
/* texhtml class for inline math (based on generic times-serif class) */
span.texhtml {
font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif;
font-size: 118%;
line-height: 1;
white-space: nowrap;
/* Force tabular and lining display for texhtml */
font-variant-numeric: lining-nums tabular-nums;
font-kerning: none;
}
span.texhtml span.texhtml {
font-size: 100%;
}
@media screen {
.nochecker .gallerybox .thumb img {
background-image: none;
}
}
/* Put anything you mean to be a sitewide addition above the TemplateStyles
* comment above.
*/
6fb8f3b49a11a996e92a6014fa1eb15459a6daa4
28
27
2023-09-14T01:07:04Z
Ilovethehitgameomori
2
javascript
text/javascript
/**
* Keep code in MediaWiki:Common.js to a minimum as it is unconditionally
* loaded for all users on every wiki page. If possible create a gadget that is
* enabled by default instead of adding it here (since gadgets are fully
* optimized ResourceLoader modules with possibility to add dependencies etc.)
*
* Since Common.js isn't a gadget, there is no place to declare its
* dependencies, so we have to lazy load them with mw.loader.using on demand and
* then execute the rest in the callback. In most cases these dependencies will
* be loaded (or loading) already and the callback will not be delayed. In case a
* dependency hasn't arrived yet it'll make sure those are loaded before this.
*/
/* global mw, $ */
/* jshint strict:false, browser:true */
mw.loader.using( [ 'mediawiki.util' ] ).done( function () {
/* Begin of mw.loader.using callback */
/**
* Map addPortletLink to mw.util
* @deprecated: Use mw.util.addPortletLink instead.
*/
mw.log.deprecate( window, 'addPortletLink', mw.util.addPortletLink, 'Use mw.util.addPortletLink instead' );
/**
* Test if an element has a certain class
* @deprecated: Use $(element).hasClass() instead.
*/
mw.log.deprecate( window, 'hasClass', function ( element, className ) {
return $( element ).hasClass( className );
}, 'Use jQuery.hasClass() instead' );
/**
* @source www.mediawiki.org/wiki/Snippets/Load_JS_and_CSS_by_URL
* @rev 6
*/
var extraCSS = mw.util.getParamValue( 'withCSS' ),
extraJS = mw.util.getParamValue( 'withJS' );
if ( extraCSS ) {
if ( extraCSS.match( /^MediaWiki:[^&<>=%#]*\.css$/ ) ) {
mw.loader.load( '/w/index.php?title=' + extraCSS + '&action=raw&ctype=text/css', 'text/css' );
} else {
mw.notify( 'Only pages from the MediaWiki namespace are allowed.', { title: 'Invalid withCSS value' } );
}
}
if ( extraJS ) {
if ( extraJS.match( /^MediaWiki:[^&<>=%#]*\.js$/ ) ) {
mw.loader.load( '/w/index.php?title=' + extraJS + '&action=raw&ctype=text/javascript' );
} else {
mw.notify( 'Only pages from the MediaWiki namespace are allowed.', { title: 'Invalid withJS value' } );
}
}
/**
* WikiMiniAtlas
*
* Description: WikiMiniAtlas is a popup click and drag world map.
* This script causes all of our coordinate links to display the WikiMiniAtlas popup button.
* The script itself is located on the Meta-Wiki because it is used by many projects.
* See [[Meta:WikiMiniAtlas]] for more information.
* Note - use of this service is recommended to be replaced with mw:Help:Extension:Kartographer
*/
$( function () {
var requireWikiminiatlas = $( 'a.external.text[href*="geohack"]' ).length || $( 'div.kmldata' ).length;
if ( requireWikiminiatlas ) {
mw.loader.load( '//meta.wikimedia.org/w/index.php?title=MediaWiki:Wikiminiatlas.js&action=raw&ctype=text/javascript' );
}
} );
/**
* Collapsible tables; reimplemented with mw-collapsible
* Styling is also in place to avoid FOUC
*
* Allows tables to be collapsed, showing only the header. See [[Help:Collapsing]].
* @version 3.0.0 (2018-05-20)
* @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-collapsibleTables.js
* @author [[User:R. Koot]]
* @author [[User:Krinkle]]
* @author [[User:TheDJ]]
* @deprecated Since MediaWiki 1.20: Use class="mw-collapsible" instead which
* is supported in MediaWiki core. Shimmable since MediaWiki 1.32
*
* @param {jQuery} $content
*/
function makeCollapsibleMwCollapsible( $content ) {
var $tables = $content
.find( 'table.collapsible:not(.mw-collapsible)' )
.addClass( 'mw-collapsible' );
$.each( $tables, function ( index, table ) {
// mw.log.warn( 'This page is using the deprecated class collapsible. Please replace it with mw-collapsible.');
if ( $( table ).hasClass( 'collapsed' ) ) {
$( table ).addClass( 'mw-collapsed' );
// mw.log.warn( 'This page is using the deprecated class collapsed. Please replace it with mw-collapsed.');
}
} );
if ( $tables.length > 0 ) {
mw.loader.using( 'jquery.makeCollapsible' ).then( function () {
$tables.makeCollapsible();
} );
}
}
mw.hook( 'wikipage.content' ).add( makeCollapsibleMwCollapsible );
/**
* Add support to mw-collapsible for autocollapse, innercollapse and outercollapse
*
* Maintainers: TheDJ
*/
function mwCollapsibleSetup( $collapsibleContent ) {
var $element,
$toggle,
autoCollapseThreshold = 2;
$.each( $collapsibleContent, function ( index, element ) {
$element = $( element );
if ( $element.hasClass( 'collapsible' ) ) {
$element.find( 'tr:first > th:first' ).prepend( $element.find( 'tr:first > * > .mw-collapsible-toggle' ) );
}
if ( $collapsibleContent.length >= autoCollapseThreshold && $element.hasClass( 'autocollapse' ) ) {
$element.data( 'mw-collapsible' ).collapse();
} else if ( $element.hasClass( 'innercollapse' ) ) {
if ( $element.parents( '.outercollapse' ).length > 0 ) {
$element.data( 'mw-collapsible' ).collapse();
}
}
// because of colored backgrounds, style the link in the text color
// to ensure accessible contrast
$toggle = $element.find( '.mw-collapsible-toggle' );
if ( $toggle.length ) {
// Make the toggle inherit text color (Updated for T333357 2023-04-29)
if ( $toggle.parent()[ 0 ].style.color ) {
$toggle.css( 'color', 'inherit' );
$toggle.find( '.mw-collapsible-text' ).css( 'color', 'inherit' );
}
}
} );
}
mw.hook( 'wikipage.collapsibleContent' ).add( mwCollapsibleSetup );
/**
* Magic editintros ****************************************************
*
* Description: Adds editintros on disambiguation pages and BLP pages.
* Maintainers: [[User:RockMFR]]
*
* @param {string} name
*/
function addEditIntro( name ) {
$( '.mw-editsection, #ca-edit, #ca-ve-edit' ).find( 'a' ).each( function ( i, el ) {
el.href = $( this ).attr( 'href' ) + '&editintro=' + name;
} );
}
if ( mw.config.get( 'wgNamespaceNumber' ) === 0 ) {
$( function () {
if ( document.getElementById( 'disambigbox' ) ) {
addEditIntro( 'Template:Disambig_editintro' );
}
} );
$( function () {
var cats = mw.config.get( 'wgCategories' );
if ( !cats ) {
return;
}
if ( $.inArray( 'Living people', cats ) !== -1 || $.inArray( 'Possibly living people', cats ) !== -1 ) {
addEditIntro( 'Template:BLP_editintro' );
}
} );
}
/* End of mw.loader.using callback */
} );
/* DO NOT ADD CODE BELOW THIS LINE */
d70a02c105be156bd0815623d6d289069c3e157e
MediaWiki:Common.css
8
12
29
2023-09-14T01:08:26Z
Ilovethehitgameomori
2
Created page with "/* * This is the CSS common to all desktop skins on en.Wikipedia. * Styling inside .mw-parser-output should generally use TemplateStyles. */ /* Reset italic styling set by user agent */ cite, dfn { font-style: inherit; } /* Straight quote marks for <q> */ q { quotes: '"' '"' "'" "'"; } /* Avoid collision of blockquote with floating elements by swapping margin and padding */ blockquote { overflow: hidden; margin: 1em 0; padding: 0 40px; } /* Consistent size for..."
css
text/css
/*
* This is the CSS common to all desktop skins on en.Wikipedia.
* Styling inside .mw-parser-output should generally use TemplateStyles.
*/
/* Reset italic styling set by user agent */
cite,
dfn {
font-style: inherit;
}
/* Straight quote marks for <q> */
q {
quotes: '"' '"' "'" "'";
}
/* Avoid collision of blockquote with floating elements by swapping margin and padding */
blockquote {
overflow: hidden;
margin: 1em 0;
padding: 0 40px;
}
/* Consistent size for <small>, <sub> and <sup> */
small {
font-size: 85%;
}
.mw-body-content sub,
.mw-body-content sup {
font-size: 80%;
}
/* Same spacing for indented and unindented paragraphs on talk pages */
.ns-talk .mw-body-content dd {
margin-top: 0.4em;
margin-bottom: 0.4em;
}
/* Reduce page jumps by hiding collapsed/dismissed content */
.client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child),
/* Avoid FOUC/reflows on collapsed elements. */
/* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */
/* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */
/* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ),
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content,
/* Hide charinsert base for those not using the gadget */
#editpage-specialchars {
display: none;
}
/* Make the list of references smaller
* Keep in sync with Template:Refbegin/styles.css
* And Template:Reflist/styles.css
*/
ol.references {
font-size: 90%;
margin-bottom: 0.5em;
}
/* Cite customizations for Parsoid
* Once everything uses the one true parser these are just customizations
*/
span[ rel="mw:referencedBy" ] {
counter-reset: mw-ref-linkback 0;
}
span[ rel='mw:referencedBy' ] > a::before {
content: counter( mw-ref-linkback, lower-alpha );
font-size: 80%;
font-weight: bold;
font-style: italic;
}
a[ rel="mw:referencedBy" ]::before {
font-weight: bold;
content: "^";
}
span[ rel="mw:referencedBy" ]::before {
content: "^ ";
}
.mw-ref > a[data-mw-group=lower-alpha]::after {
content: '[' counter( mw-Ref, lower-alpha ) ']';
}
.mw-ref > a[data-mw-group=upper-alpha]::after {
content: '[' counter( mw-Ref, upper-alpha ) ']';
}
.mw-ref > a[data-mw-group=decimal]::after {
content: '[' counter( mw-Ref, decimal ) ']';
}
.mw-ref > a[data-mw-group=lower-roman]::after {
content: '[' counter( mw-Ref, lower-roman ) ']';
}
.mw-ref > a[data-mw-group=upper-roman]::after {
content: '[' counter( mw-Ref, upper-roman ) ']';
}
.mw-ref > a[data-mw-group=lower-greek]::after {
content: '[' counter( mw-Ref, lower-greek ) ']';
}
/* Styling for jQuery makeCollapsible, matching that of collapseButton */
.mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) {
font-weight: normal;
padding-right: 0.2em;
padding-left: 0.2em;
}
.mw-collapsible-leftside-toggle .mw-collapsible-toggle {
/* @noflip */
float: left;
}
/* Lists in wikitable data cells are always left-aligned */
.wikitable td ul,
.wikitable td ol,
.wikitable td dl {
/* @noflip */
text-align: left;
}
/* Change the external link icon to a PDF icon for all PDF files */
.mw-parser-output a[href$=".pdf"].external,
.mw-parser-output a[href*=".pdf?"].external,
.mw-parser-output a[href*=".pdf#"].external,
.mw-parser-output a[href$=".PDF"].external,
.mw-parser-output a[href*=".PDF?"].external,
.mw-parser-output a[href*=".PDF#"].external {
background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right;
/* @noflip */
padding: 8px 18px 8px 0;
}
/* System messages styled similarly to fmbox */
/* for .mw-warning-with-logexcerpt, behavior of this line differs between
* the edit-protected notice and the special:Contribs for blocked users
* The latter has specificity of 3 classes so we have to triple up here.
*/
.mw-warning-with-logexcerpt.mw-warning-with-logexcerpt.mw-warning-with-logexcerpt,
div.mw-lag-warn-high,
div.mw-cascadeprotectedwarning,
div#mw-protect-cascadeon {
clear: both;
margin: 0.2em 0;
border: 1px solid #bb7070;
background-color: #ffdbdb;
padding: 0.25em 0.9em;
box-sizing: border-box;
}
/* default colors for partial block message */
/* gotta get over the hump introduced by the triple class above */
.mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt.mw-warning-with-logexcerpt {
border-color: #fc3;
background-color: #fef6e7;
}
/* Minimum thumb width */
figure[typeof~='mw:File/Thumb'],
figure[typeof~='mw:File/Frame'],
.thumbinner {
min-width: 100px;
}
/* Prevent floating boxes from overlapping any category listings,
file histories, edit previews, and edit [Show changes] views. */
#mw-subcategories,
#mw-pages,
#mw-category-media,
#filehistory,
#wikiPreview,
#wikiDiff {
clear: both;
}
/* Styling for tags in changes pages */
.mw-tag-markers {
font-style: italic;
font-size: 90%;
}
/* Hide stuff meant for accounts with special permissions. Made visible again in
[[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]],
[[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]],
[[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]],
[[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */
.checkuser-show,
.sysop-show,
.abusefilter-show,
.abusefilter-helper-show,
.patroller-show,
.templateeditor-show,
.extendedmover-show,
.extendedconfirmed-show,
.autoconfirmed-show,
.user-show {
display: none;
}
/* Hide the redlink generated by {{Editnotice}},
this overrides the ".sysop-show { display: none; }" above that applies
to the same link as well. See [[phab:T45013]]
Hide the images in editnotices to keep them readable in VE view.
Long term, editnotices should become a core feature so that they can be designed responsive. */
.ve-ui-mwNoticesPopupTool-item .editnotice-redlink,
.ve-ui-mwNoticesPopupTool-item .mbox-image,
.ve-ui-mwNoticesPopupTool-item .mbox-imageright {
display: none !important;
}
/* Remove bullets when there are multiple edit page warnings */
ul.permissions-errors {
margin: 0;
}
ul.permissions-errors > li {
list-style: none;
}
/* larger inline math */
span.mwe-math-mathml-inline {
font-size: 118%;
}
/* Make <math display="block"> be left aligned with one space indent for
* compatibility with style conventions
*/
.mwe-math-fallback-image-display,
.mwe-math-mathml-display {
margin-left: 1.6em !important;
margin-top: 0.6em;
margin-bottom: 0.6em;
}
.mwe-math-mathml-display math {
display: inline;
}
@media screen {
/* Put a chequered background behind images, only visible if they have transparency,
* except on main, user, and portal namespaces
*/
body:not(.ns-0):not(.ns-2):not(.ns-100) .gallerybox .thumb img {
background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat;
}
/* Display "From Wikipedia, the free encyclopedia" in skins that support it,
do not apply to print mode */
#siteSub {
display: block;
}
}
/* Hide FlaggedRevs notice UI when there are no pending changes */
.flaggedrevs_draft_synced,
.flaggedrevs_stable_synced,
/* "Temporary" to remove links in sidebar T255381 */
#t-upload,
/* Hide broken download box on Special:Book pending T285400 */
.mw-special-Book #coll-downloadbox {
display: none;
}
/*
* BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS;
* SEE [[MediaWiki talk:Common.css/to do]]
*/
/* Infobox template style */
.infobox {
border: 1px solid #a2a9b1;
border-spacing: 3px;
background-color: #f8f9fa;
color: black;
/* @noflip */
margin: 0.5em 0 0.5em 1em;
padding: 0.2em;
/* @noflip */
float: right;
/* @noflip */
clear: right;
font-size: 88%;
line-height: 1.5em;
width: 22em;
}
.infobox-header,
.infobox-label,
.infobox-above,
.infobox-full-data,
.infobox-data,
.infobox-below,
.infobox-subheader,
.infobox-image,
.infobox-navbar,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
vertical-align: top;
}
.infobox-label,
.infobox-data,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox th,
.infobox td {
/* @noflip */
text-align: left;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-above,
.infobox .infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
font-size: 125%;
font-weight: bold;
text-align: center;
}
.infobox-title,
/* Remove element selector when every .infobox thing is using the standard module/templates */
.infobox caption {
padding: 0.2em;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-header,
.infobox .infobox-subheader,
.infobox .infobox-image,
.infobox .infobox-full-data,
.infobox .infobox-below {
text-align: center;
}
/* Remove .infobox when element selectors above are removed */
.infobox .infobox-navbar {
/* @noflip */
text-align: right;
}
/* Normal font styling for wikitable row headers with scope="row" tag */
.wikitable.plainrowheaders th[scope=row],
.wikitable.plainrowheaders th[scope=rowgroup] {
font-weight: normal;
/* @noflip */
text-align: left;
}
/* Remove underlines from certain links */
.nounderlines a,
.IPA a:link,
.IPA a:visited {
text-decoration: none !important;
}
/* Prevent line breaks in silly places where desired (nowrap)
and links when we don't want them to (nowraplinks a) */
.nowrap,
.nowraplinks a {
white-space: nowrap;
}
/* But allow wrapping where desired: */
.wrap,
.wraplinks a {
white-space: normal;
}
/* texhtml class for inline math (based on generic times-serif class) */
span.texhtml {
font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif;
font-size: 118%;
line-height: 1;
white-space: nowrap;
/* Force tabular and lining display for texhtml */
font-variant-numeric: lining-nums tabular-nums;
font-kerning: none;
}
span.texhtml span.texhtml {
font-size: 100%;
}
@media screen {
.nochecker .gallerybox .thumb img {
background-image: none;
}
}
/* Put anything you mean to be a sitewide addition above the TemplateStyles
* comment above.
*/
6fb8f3b49a11a996e92a6014fa1eb15459a6daa4
Module:Infobox
828
14
33
32
2023-09-14T01:11:21Z
Ilovethehitgameomori
2
1 revision imported
Scribunto
text/plain
local p = {}
local args = {}
local origArgs = {}
local root
local empty_row_categories = {}
local category_in_empty_row_pattern = '%[%[%s*[Cc][Aa][Tt][Ee][Gg][Oo][Rr][Yy]%s*:[^]]*]]'
local has_rows = false
local lists = {
plainlist_t = {
patterns = {
'^plainlist$',
'%splainlist$',
'^plainlist%s',
'%splainlist%s'
},
found = false,
styles = 'Plainlist/styles.css'
},
hlist_t = {
patterns = {
'^hlist$',
'%shlist$',
'^hlist%s',
'%shlist%s'
},
found = false,
styles = 'Hlist/styles.css'
}
}
local function has_list_class(args_to_check)
for _, list in pairs(lists) do
if not list.found then
for _, arg in pairs(args_to_check) do
for _, pattern in ipairs(list.patterns) do
if mw.ustring.find(arg or '', pattern) then
list.found = true
break
end
end
if list.found then break end
end
end
end
end
local function fixChildBoxes(sval, tt)
local function notempty( s ) return s and s:match( '%S' ) end
if notempty(sval) then
local marker = '<span class=special_infobox_marker>'
local s = sval
-- start moving templatestyles and categories inside of table rows
local slast = ''
while slast ~= s do
slast = s
s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>%s*)(%[%[%s*[Cc][Aa][Tt][Ee][Gg][Oo][Rr][Yy]%s*:[^]]*%]%])', '%2%1')
s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>%s*)(\127[^\127]*UNIQ%-%-templatestyles%-%x+%-QINU[^\127]*\127)', '%2%1')
end
-- end moving templatestyles and categories inside of table rows
s = mw.ustring.gsub(s, '(<%s*[Tt][Rr])', marker .. '%1')
s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>)', '%1' .. marker)
if s:match(marker) then
s = mw.ustring.gsub(s, marker .. '%s*' .. marker, '')
s = mw.ustring.gsub(s, '([\r\n]|-[^\r\n]*[\r\n])%s*' .. marker, '%1')
s = mw.ustring.gsub(s, marker .. '%s*([\r\n]|-)', '%1')
s = mw.ustring.gsub(s, '(</[Cc][Aa][Pp][Tt][Ii][Oo][Nn]%s*>%s*)' .. marker, '%1')
s = mw.ustring.gsub(s, '(<%s*[Tt][Aa][Bb][Ll][Ee][^<>]*>%s*)' .. marker, '%1')
s = mw.ustring.gsub(s, '^(%{|[^\r\n]*[\r\n]%s*)' .. marker, '%1')
s = mw.ustring.gsub(s, '([\r\n]%{|[^\r\n]*[\r\n]%s*)' .. marker, '%1')
s = mw.ustring.gsub(s, marker .. '(%s*</[Tt][Aa][Bb][Ll][Ee]%s*>)', '%1')
s = mw.ustring.gsub(s, marker .. '(%s*\n|%})', '%1')
end
if s:match(marker) then
local subcells = mw.text.split(s, marker)
s = ''
for k = 1, #subcells do
if k == 1 then
s = s .. subcells[k] .. '</' .. tt .. '></tr>'
elseif k == #subcells then
local rowstyle = ' style="display:none"'
if notempty(subcells[k]) then rowstyle = '' end
s = s .. '<tr' .. rowstyle ..'><' .. tt .. ' colspan=2>\n' ..
subcells[k]
elseif notempty(subcells[k]) then
if (k % 2) == 0 then
s = s .. subcells[k]
else
s = s .. '<tr><' .. tt .. ' colspan=2>\n' ..
subcells[k] .. '</' .. tt .. '></tr>'
end
end
end
end
-- the next two lines add a newline at the end of lists for the PHP parser
-- [[Special:Diff/849054481]]
-- remove when [[:phab:T191516]] is fixed or OBE
s = mw.ustring.gsub(s, '([\r\n][%*#;:][^\r\n]*)$', '%1\n')
s = mw.ustring.gsub(s, '^([%*#;:][^\r\n]*)$', '%1\n')
s = mw.ustring.gsub(s, '^([%*#;:])', '\n%1')
s = mw.ustring.gsub(s, '^(%{%|)', '\n%1')
return s
else
return sval
end
end
-- Cleans empty tables
local function cleanInfobox()
root = tostring(root)
if has_rows == false then
root = mw.ustring.gsub(root, '<table[^<>]*>%s*</table>', '')
end
end
-- Returns the union of the values of two tables, as a sequence.
local function union(t1, t2)
local vals = {}
for k, v in pairs(t1) do
vals[v] = true
end
for k, v in pairs(t2) do
vals[v] = true
end
local ret = {}
for k, v in pairs(vals) do
table.insert(ret, k)
end
return ret
end
-- Returns a table containing the numbers of the arguments that exist
-- for the specified prefix. For example, if the prefix was 'data', and
-- 'data1', 'data2', and 'data5' exist, it would return {1, 2, 5}.
local function getArgNums(prefix)
local nums = {}
for k, v in pairs(args) do
local num = tostring(k):match('^' .. prefix .. '([1-9]%d*)$')
if num then table.insert(nums, tonumber(num)) end
end
table.sort(nums)
return nums
end
-- Adds a row to the infobox, with either a header cell
-- or a label/data cell combination.
local function addRow(rowArgs)
if rowArgs.header and rowArgs.header ~= '_BLANK_' then
has_rows = true
has_list_class({ rowArgs.rowclass, rowArgs.class, args.headerclass })
root
:tag('tr')
:addClass(rowArgs.rowclass)
:cssText(rowArgs.rowstyle)
:tag('th')
:attr('colspan', '2')
:addClass('infobox-header')
:addClass(rowArgs.class)
:addClass(args.headerclass)
-- @deprecated next; target .infobox-<name> .infobox-header
:cssText(args.headerstyle)
:cssText(rowArgs.rowcellstyle)
:wikitext(fixChildBoxes(rowArgs.header, 'th'))
if rowArgs.data then
root:wikitext(
'[[Category:Pages using infobox templates with ignored data cells]]'
)
end
elseif rowArgs.data and rowArgs.data:gsub(category_in_empty_row_pattern, ''):match('^%S') then
has_rows = true
has_list_class({ rowArgs.rowclass, rowArgs.class })
local row = root:tag('tr')
row:addClass(rowArgs.rowclass)
row:cssText(rowArgs.rowstyle)
if rowArgs.label then
row
:tag('th')
:attr('scope', 'row')
:addClass('infobox-label')
-- @deprecated next; target .infobox-<name> .infobox-label
:cssText(args.labelstyle)
:cssText(rowArgs.rowcellstyle)
:wikitext(rowArgs.label)
:done()
end
local dataCell = row:tag('td')
dataCell
:attr('colspan', not rowArgs.label and '2' or nil)
:addClass(not rowArgs.label and 'infobox-full-data' or 'infobox-data')
:addClass(rowArgs.class)
-- @deprecated next; target .infobox-<name> .infobox(-full)-data
:cssText(rowArgs.datastyle)
:cssText(rowArgs.rowcellstyle)
:wikitext(fixChildBoxes(rowArgs.data, 'td'))
else
table.insert(empty_row_categories, rowArgs.data or '')
end
end
local function renderTitle()
if not args.title then return end
has_rows = true
has_list_class({args.titleclass})
root
:tag('caption')
:addClass('infobox-title')
:addClass(args.titleclass)
-- @deprecated next; target .infobox-<name> .infobox-title
:cssText(args.titlestyle)
:wikitext(args.title)
end
local function renderAboveRow()
if not args.above then return end
has_rows = true
has_list_class({ args.aboveclass })
root
:tag('tr')
:tag('th')
:attr('colspan', '2')
:addClass('infobox-above')
:addClass(args.aboveclass)
-- @deprecated next; target .infobox-<name> .infobox-above
:cssText(args.abovestyle)
:wikitext(fixChildBoxes(args.above,'th'))
end
local function renderBelowRow()
if not args.below then return end
has_rows = true
has_list_class({ args.belowclass })
root
:tag('tr')
:tag('td')
:attr('colspan', '2')
:addClass('infobox-below')
:addClass(args.belowclass)
-- @deprecated next; target .infobox-<name> .infobox-below
:cssText(args.belowstyle)
:wikitext(fixChildBoxes(args.below,'td'))
end
local function addSubheaderRow(subheaderArgs)
if subheaderArgs.data and
subheaderArgs.data:gsub(category_in_empty_row_pattern, ''):match('^%S') then
has_rows = true
has_list_class({ subheaderArgs.rowclass, subheaderArgs.class })
local row = root:tag('tr')
row:addClass(subheaderArgs.rowclass)
local dataCell = row:tag('td')
dataCell
:attr('colspan', '2')
:addClass('infobox-subheader')
:addClass(subheaderArgs.class)
:cssText(subheaderArgs.datastyle)
:cssText(subheaderArgs.rowcellstyle)
:wikitext(fixChildBoxes(subheaderArgs.data, 'td'))
else
table.insert(empty_row_categories, subheaderArgs.data or '')
end
end
local function renderSubheaders()
if args.subheader then
args.subheader1 = args.subheader
end
if args.subheaderrowclass then
args.subheaderrowclass1 = args.subheaderrowclass
end
local subheadernums = getArgNums('subheader')
for k, num in ipairs(subheadernums) do
addSubheaderRow({
data = args['subheader' .. tostring(num)],
-- @deprecated next; target .infobox-<name> .infobox-subheader
datastyle = args.subheaderstyle,
rowcellstyle = args['subheaderstyle' .. tostring(num)],
class = args.subheaderclass,
rowclass = args['subheaderrowclass' .. tostring(num)]
})
end
end
local function addImageRow(imageArgs)
if imageArgs.data and
imageArgs.data:gsub(category_in_empty_row_pattern, ''):match('^%S') then
has_rows = true
has_list_class({ imageArgs.rowclass, imageArgs.class })
local row = root:tag('tr')
row:addClass(imageArgs.rowclass)
local dataCell = row:tag('td')
dataCell
:attr('colspan', '2')
:addClass('infobox-image')
:addClass(imageArgs.class)
:cssText(imageArgs.datastyle)
:wikitext(fixChildBoxes(imageArgs.data, 'td'))
else
table.insert(empty_row_categories, imageArgs.data or '')
end
end
local function renderImages()
if args.image then
args.image1 = args.image
end
if args.caption then
args.caption1 = args.caption
end
local imagenums = getArgNums('image')
for k, num in ipairs(imagenums) do
local caption = args['caption' .. tostring(num)]
local data = mw.html.create():wikitext(args['image' .. tostring(num)])
if caption then
data
:tag('div')
:addClass('infobox-caption')
-- @deprecated next; target .infobox-<name> .infobox-caption
:cssText(args.captionstyle)
:wikitext(caption)
end
addImageRow({
data = tostring(data),
-- @deprecated next; target .infobox-<name> .infobox-image
datastyle = args.imagestyle,
class = args.imageclass,
rowclass = args['imagerowclass' .. tostring(num)]
})
end
end
-- When autoheaders are turned on, preprocesses the rows
local function preprocessRows()
if not args.autoheaders then return end
local rownums = union(getArgNums('header'), getArgNums('data'))
table.sort(rownums)
local lastheader
for k, num in ipairs(rownums) do
if args['header' .. tostring(num)] then
if lastheader then
args['header' .. tostring(lastheader)] = nil
end
lastheader = num
elseif args['data' .. tostring(num)] and
args['data' .. tostring(num)]:gsub(
category_in_empty_row_pattern, ''
):match('^%S') then
local data = args['data' .. tostring(num)]
if data:gsub(category_in_empty_row_pattern, ''):match('%S') then
lastheader = nil
end
end
end
if lastheader then
args['header' .. tostring(lastheader)] = nil
end
end
-- Gets the union of the header and data argument numbers,
-- and renders them all in order
local function renderRows()
local rownums = union(getArgNums('header'), getArgNums('data'))
table.sort(rownums)
for k, num in ipairs(rownums) do
addRow({
header = args['header' .. tostring(num)],
label = args['label' .. tostring(num)],
data = args['data' .. tostring(num)],
datastyle = args.datastyle,
class = args['class' .. tostring(num)],
rowclass = args['rowclass' .. tostring(num)],
-- @deprecated next; target .infobox-<name> rowclass
rowstyle = args['rowstyle' .. tostring(num)],
rowcellstyle = args['rowcellstyle' .. tostring(num)]
})
end
end
local function renderNavBar()
if not args.name then return end
has_rows = true
root
:tag('tr')
:tag('td')
:attr('colspan', '2')
:addClass('infobox-navbar')
:wikitext(require('Module:Navbar')._navbar{
args.name,
mini = 1,
})
end
local function renderItalicTitle()
local italicTitle = args['italic title'] and mw.ustring.lower(args['italic title'])
if italicTitle == '' or italicTitle == 'force' or italicTitle == 'yes' then
root:wikitext(require('Module:Italic title')._main({}))
end
end
-- Categories in otherwise empty rows are collected in empty_row_categories.
-- This function adds them to the module output. It is not affected by
-- args.decat because this module should not prevent module-external categories
-- from rendering.
local function renderEmptyRowCategories()
for _, s in ipairs(empty_row_categories) do
root:wikitext(s)
end
end
-- Render tracking categories. args.decat == turns off tracking categories.
local function renderTrackingCategories()
if args.decat == 'yes' then return end
if args.child == 'yes' then
if args.title then
root:wikitext(
'[[Category:Pages using embedded infobox templates with the title parameter]]'
)
end
elseif #(getArgNums('data')) == 0 and mw.title.getCurrentTitle().namespace == 0 then
root:wikitext('[[Category:Articles using infobox templates with no data rows]]')
end
end
--[=[
Loads the templatestyles for the infobox.
TODO: FINISH loading base templatestyles here rather than in
MediaWiki:Common.css. There are 4-5000 pages with 'raw' infobox tables.
See [[Mediawiki_talk:Common.css/to_do#Infobox]] and/or come help :).
When we do this we should clean up the inline CSS below too.
Will have to do some bizarre conversion category like with sidebar.
]=]
local function loadTemplateStyles()
local frame = mw.getCurrentFrame()
local hlist_templatestyles = ''
if lists.hlist_t.found then
hlist_templatestyles = frame:extensionTag{
name = 'templatestyles', args = { src = lists.hlist_t.styles }
}
end
local plainlist_templatestyles = ''
if lists.plainlist_t.found then
plainlist_templatestyles = frame:extensionTag{
name = 'templatestyles', args = { src = lists.plainlist_t.styles }
}
end
-- See function description
local base_templatestyles = frame:extensionTag{
name = 'templatestyles', args = { src = 'Module:Infobox/styles.css' }
}
local templatestyles = ''
if args['templatestyles'] then
templatestyles = frame:extensionTag{
name = 'templatestyles', args = { src = args['templatestyles'] }
}
end
local child_templatestyles = ''
if args['child templatestyles'] then
child_templatestyles = frame:extensionTag{
name = 'templatestyles', args = { src = args['child templatestyles'] }
}
end
local grandchild_templatestyles = ''
if args['grandchild templatestyles'] then
grandchild_templatestyles = frame:extensionTag{
name = 'templatestyles', args = { src = args['grandchild templatestyles'] }
}
end
return table.concat({
-- hlist -> plainlist -> base is best-effort to preserve old Common.css ordering.
-- this ordering is not a guarantee because the rows of interest invoking
-- each class may not be on a specific page
hlist_templatestyles,
plainlist_templatestyles,
base_templatestyles,
templatestyles,
child_templatestyles,
grandchild_templatestyles
})
end
-- common functions between the child and non child cases
local function structure_infobox_common()
renderSubheaders()
renderImages()
preprocessRows()
renderRows()
renderBelowRow()
renderNavBar()
renderItalicTitle()
renderEmptyRowCategories()
renderTrackingCategories()
cleanInfobox()
end
-- Specify the overall layout of the infobox, with special settings if the
-- infobox is used as a 'child' inside another infobox.
local function _infobox()
if args.child ~= 'yes' then
root = mw.html.create('table')
root
:addClass(args.subbox == 'yes' and 'infobox-subbox' or 'infobox')
:addClass(args.bodyclass)
-- @deprecated next; target .infobox-<name>
:cssText(args.bodystyle)
has_list_class({ args.bodyclass })
renderTitle()
renderAboveRow()
else
root = mw.html.create()
root
:wikitext(args.title)
end
structure_infobox_common()
return loadTemplateStyles() .. root
end
-- If the argument exists and isn't blank, add it to the argument table.
-- Blank arguments are treated as nil to match the behaviour of ParserFunctions.
local function preprocessSingleArg(argName)
if origArgs[argName] and origArgs[argName] ~= '' then
args[argName] = origArgs[argName]
end
end
-- Assign the parameters with the given prefixes to the args table, in order, in
-- batches of the step size specified. This is to prevent references etc. from
-- appearing in the wrong order. The prefixTable should be an array containing
-- tables, each of which has two possible fields, a "prefix" string and a
-- "depend" table. The function always parses parameters containing the "prefix"
-- string, but only parses parameters in the "depend" table if the prefix
-- parameter is present and non-blank.
local function preprocessArgs(prefixTable, step)
if type(prefixTable) ~= 'table' then
error("Non-table value detected for the prefix table", 2)
end
if type(step) ~= 'number' then
error("Invalid step value detected", 2)
end
-- Get arguments without a number suffix, and check for bad input.
for i,v in ipairs(prefixTable) do
if type(v) ~= 'table' or type(v.prefix) ~= "string" or
(v.depend and type(v.depend) ~= 'table') then
error('Invalid input detected to preprocessArgs prefix table', 2)
end
preprocessSingleArg(v.prefix)
-- Only parse the depend parameter if the prefix parameter is present
-- and not blank.
if args[v.prefix] and v.depend then
for j, dependValue in ipairs(v.depend) do
if type(dependValue) ~= 'string' then
error('Invalid "depend" parameter value detected in preprocessArgs')
end
preprocessSingleArg(dependValue)
end
end
end
-- Get arguments with number suffixes.
local a = 1 -- Counter variable.
local moreArgumentsExist = true
while moreArgumentsExist == true do
moreArgumentsExist = false
for i = a, a + step - 1 do
for j,v in ipairs(prefixTable) do
local prefixArgName = v.prefix .. tostring(i)
if origArgs[prefixArgName] then
-- Do another loop if any arguments are found, even blank ones.
moreArgumentsExist = true
preprocessSingleArg(prefixArgName)
end
-- Process the depend table if the prefix argument is present
-- and not blank, or we are processing "prefix1" and "prefix" is
-- present and not blank, and if the depend table is present.
if v.depend and (args[prefixArgName] or (i == 1 and args[v.prefix])) then
for j,dependValue in ipairs(v.depend) do
local dependArgName = dependValue .. tostring(i)
preprocessSingleArg(dependArgName)
end
end
end
end
a = a + step
end
end
-- Parse the data parameters in the same order that the old {{infobox}} did, so
-- that references etc. will display in the expected places. Parameters that
-- depend on another parameter are only processed if that parameter is present,
-- to avoid phantom references appearing in article reference lists.
local function parseDataParameters()
preprocessSingleArg('autoheaders')
preprocessSingleArg('child')
preprocessSingleArg('bodyclass')
preprocessSingleArg('subbox')
preprocessSingleArg('bodystyle')
preprocessSingleArg('title')
preprocessSingleArg('titleclass')
preprocessSingleArg('titlestyle')
preprocessSingleArg('above')
preprocessSingleArg('aboveclass')
preprocessSingleArg('abovestyle')
preprocessArgs({
{prefix = 'subheader', depend = {'subheaderstyle', 'subheaderrowclass'}}
}, 10)
preprocessSingleArg('subheaderstyle')
preprocessSingleArg('subheaderclass')
preprocessArgs({
{prefix = 'image', depend = {'caption', 'imagerowclass'}}
}, 10)
preprocessSingleArg('captionstyle')
preprocessSingleArg('imagestyle')
preprocessSingleArg('imageclass')
preprocessArgs({
{prefix = 'header'},
{prefix = 'data', depend = {'label'}},
{prefix = 'rowclass'},
{prefix = 'rowstyle'},
{prefix = 'rowcellstyle'},
{prefix = 'class'}
}, 50)
preprocessSingleArg('headerclass')
preprocessSingleArg('headerstyle')
preprocessSingleArg('labelstyle')
preprocessSingleArg('datastyle')
preprocessSingleArg('below')
preprocessSingleArg('belowclass')
preprocessSingleArg('belowstyle')
preprocessSingleArg('name')
-- different behaviour for italics if blank or absent
args['italic title'] = origArgs['italic title']
preprocessSingleArg('decat')
preprocessSingleArg('templatestyles')
preprocessSingleArg('child templatestyles')
preprocessSingleArg('grandchild templatestyles')
end
-- If called via #invoke, use the args passed into the invoking template.
-- Otherwise, for testing purposes, assume args are being passed directly in.
function p.infobox(frame)
if frame == mw.getCurrentFrame() then
origArgs = frame:getParent().args
else
origArgs = frame
end
parseDataParameters()
return _infobox()
end
-- For calling via #invoke within a template
function p.infoboxTemplate(frame)
origArgs = {}
for k,v in pairs(frame.args) do origArgs[k] = mw.text.trim(v) end
parseDataParameters()
return _infobox()
end
return p
0ddb7e5c8426d67cd589b710efb9912ddfb67fea
Module:Yesno
828
15
35
34
2023-09-14T01:11:23Z
Ilovethehitgameomori
2
1 revision imported
Scribunto
text/plain
-- Function allowing for consistent treatment of boolean-like wikitext input.
-- It works similarly to the template {{yesno}}.
return function (val, default)
-- If your wiki uses non-ascii characters for any of "yes", "no", etc., you
-- should replace "val:lower()" with "mw.ustring.lower(val)" in the
-- following line.
val = type(val) == 'string' and val:lower() or val
if val == nil then
return nil
elseif val == true
or val == 'yes'
or val == 'y'
or val == 'true'
or val == 't'
or val == 'on'
or tonumber(val) == 1
then
return true
elseif val == false
or val == 'no'
or val == 'n'
or val == 'false'
or val == 'f'
or val == 'off'
or tonumber(val) == 0
then
return false
else
return default
end
end
f767643e7d12126d020d88d662a3dd057817b9dc
Module:Arguments
828
16
37
36
2023-09-14T01:11:23Z
Ilovethehitgameomori
2
1 revision imported
Scribunto
text/plain
-- This module provides easy processing of arguments passed to Scribunto from
-- #invoke. It is intended for use by other Lua modules, and should not be
-- called from #invoke directly.
local libraryUtil = require('libraryUtil')
local checkType = libraryUtil.checkType
local arguments = {}
-- Generate four different tidyVal functions, so that we don't have to check the
-- options every time we call it.
local function tidyValDefault(key, val)
if type(val) == 'string' then
val = val:match('^%s*(.-)%s*$')
if val == '' then
return nil
else
return val
end
else
return val
end
end
local function tidyValTrimOnly(key, val)
if type(val) == 'string' then
return val:match('^%s*(.-)%s*$')
else
return val
end
end
local function tidyValRemoveBlanksOnly(key, val)
if type(val) == 'string' then
if val:find('%S') then
return val
else
return nil
end
else
return val
end
end
local function tidyValNoChange(key, val)
return val
end
local function matchesTitle(given, title)
local tp = type( given )
return (tp == 'string' or tp == 'number') and mw.title.new( given ).prefixedText == title
end
local translate_mt = { __index = function(t, k) return k end }
function arguments.getArgs(frame, options)
checkType('getArgs', 1, frame, 'table', true)
checkType('getArgs', 2, options, 'table', true)
frame = frame or {}
options = options or {}
--[[
-- Set up argument translation.
--]]
options.translate = options.translate or {}
if getmetatable(options.translate) == nil then
setmetatable(options.translate, translate_mt)
end
if options.backtranslate == nil then
options.backtranslate = {}
for k,v in pairs(options.translate) do
options.backtranslate[v] = k
end
end
if options.backtranslate and getmetatable(options.backtranslate) == nil then
setmetatable(options.backtranslate, {
__index = function(t, k)
if options.translate[k] ~= k then
return nil
else
return k
end
end
})
end
--[[
-- Get the argument tables. If we were passed a valid frame object, get the
-- frame arguments (fargs) and the parent frame arguments (pargs), depending
-- on the options set and on the parent frame's availability. If we weren't
-- passed a valid frame object, we are being called from another Lua module
-- or from the debug console, so assume that we were passed a table of args
-- directly, and assign it to a new variable (luaArgs).
--]]
local fargs, pargs, luaArgs
if type(frame.args) == 'table' and type(frame.getParent) == 'function' then
if options.wrappers then
--[[
-- The wrappers option makes Module:Arguments look up arguments in
-- either the frame argument table or the parent argument table, but
-- not both. This means that users can use either the #invoke syntax
-- or a wrapper template without the loss of performance associated
-- with looking arguments up in both the frame and the parent frame.
-- Module:Arguments will look up arguments in the parent frame
-- if it finds the parent frame's title in options.wrapper;
-- otherwise it will look up arguments in the frame object passed
-- to getArgs.
--]]
local parent = frame:getParent()
if not parent then
fargs = frame.args
else
local title = parent:getTitle():gsub('/sandbox$', '')
local found = false
if matchesTitle(options.wrappers, title) then
found = true
elseif type(options.wrappers) == 'table' then
for _,v in pairs(options.wrappers) do
if matchesTitle(v, title) then
found = true
break
end
end
end
-- We test for false specifically here so that nil (the default) acts like true.
if found or options.frameOnly == false then
pargs = parent.args
end
if not found or options.parentOnly == false then
fargs = frame.args
end
end
else
-- options.wrapper isn't set, so check the other options.
if not options.parentOnly then
fargs = frame.args
end
if not options.frameOnly then
local parent = frame:getParent()
pargs = parent and parent.args or nil
end
end
if options.parentFirst then
fargs, pargs = pargs, fargs
end
else
luaArgs = frame
end
-- Set the order of precedence of the argument tables. If the variables are
-- nil, nothing will be added to the table, which is how we avoid clashes
-- between the frame/parent args and the Lua args.
local argTables = {fargs}
argTables[#argTables + 1] = pargs
argTables[#argTables + 1] = luaArgs
--[[
-- Generate the tidyVal function. If it has been specified by the user, we
-- use that; if not, we choose one of four functions depending on the
-- options chosen. This is so that we don't have to call the options table
-- every time the function is called.
--]]
local tidyVal = options.valueFunc
if tidyVal then
if type(tidyVal) ~= 'function' then
error(
"bad value assigned to option 'valueFunc'"
.. '(function expected, got '
.. type(tidyVal)
.. ')',
2
)
end
elseif options.trim ~= false then
if options.removeBlanks ~= false then
tidyVal = tidyValDefault
else
tidyVal = tidyValTrimOnly
end
else
if options.removeBlanks ~= false then
tidyVal = tidyValRemoveBlanksOnly
else
tidyVal = tidyValNoChange
end
end
--[[
-- Set up the args, metaArgs and nilArgs tables. args will be the one
-- accessed from functions, and metaArgs will hold the actual arguments. Nil
-- arguments are memoized in nilArgs, and the metatable connects all of them
-- together.
--]]
local args, metaArgs, nilArgs, metatable = {}, {}, {}, {}
setmetatable(args, metatable)
local function mergeArgs(tables)
--[[
-- Accepts multiple tables as input and merges their keys and values
-- into one table. If a value is already present it is not overwritten;
-- tables listed earlier have precedence. We are also memoizing nil
-- values, which can be overwritten if they are 's' (soft).
--]]
for _, t in ipairs(tables) do
for key, val in pairs(t) do
if metaArgs[key] == nil and nilArgs[key] ~= 'h' then
local tidiedVal = tidyVal(key, val)
if tidiedVal == nil then
nilArgs[key] = 's'
else
metaArgs[key] = tidiedVal
end
end
end
end
end
--[[
-- Define metatable behaviour. Arguments are memoized in the metaArgs table,
-- and are only fetched from the argument tables once. Fetching arguments
-- from the argument tables is the most resource-intensive step in this
-- module, so we try and avoid it where possible. For this reason, nil
-- arguments are also memoized, in the nilArgs table. Also, we keep a record
-- in the metatable of when pairs and ipairs have been called, so we do not
-- run pairs and ipairs on the argument tables more than once. We also do
-- not run ipairs on fargs and pargs if pairs has already been run, as all
-- the arguments will already have been copied over.
--]]
metatable.__index = function (t, key)
--[[
-- Fetches an argument when the args table is indexed. First we check
-- to see if the value is memoized, and if not we try and fetch it from
-- the argument tables. When we check memoization, we need to check
-- metaArgs before nilArgs, as both can be non-nil at the same time.
-- If the argument is not present in metaArgs, we also check whether
-- pairs has been run yet. If pairs has already been run, we return nil.
-- This is because all the arguments will have already been copied into
-- metaArgs by the mergeArgs function, meaning that any other arguments
-- must be nil.
--]]
if type(key) == 'string' then
key = options.translate[key]
end
local val = metaArgs[key]
if val ~= nil then
return val
elseif metatable.donePairs or nilArgs[key] then
return nil
end
for _, argTable in ipairs(argTables) do
local argTableVal = tidyVal(key, argTable[key])
if argTableVal ~= nil then
metaArgs[key] = argTableVal
return argTableVal
end
end
nilArgs[key] = 'h'
return nil
end
metatable.__newindex = function (t, key, val)
-- This function is called when a module tries to add a new value to the
-- args table, or tries to change an existing value.
if type(key) == 'string' then
key = options.translate[key]
end
if options.readOnly then
error(
'could not write to argument table key "'
.. tostring(key)
.. '"; the table is read-only',
2
)
elseif options.noOverwrite and args[key] ~= nil then
error(
'could not write to argument table key "'
.. tostring(key)
.. '"; overwriting existing arguments is not permitted',
2
)
elseif val == nil then
--[[
-- If the argument is to be overwritten with nil, we need to erase
-- the value in metaArgs, so that __index, __pairs and __ipairs do
-- not use a previous existing value, if present; and we also need
-- to memoize the nil in nilArgs, so that the value isn't looked
-- up in the argument tables if it is accessed again.
--]]
metaArgs[key] = nil
nilArgs[key] = 'h'
else
metaArgs[key] = val
end
end
local function translatenext(invariant)
local k, v = next(invariant.t, invariant.k)
invariant.k = k
if k == nil then
return nil
elseif type(k) ~= 'string' or not options.backtranslate then
return k, v
else
local backtranslate = options.backtranslate[k]
if backtranslate == nil then
-- Skip this one. This is a tail call, so this won't cause stack overflow
return translatenext(invariant)
else
return backtranslate, v
end
end
end
metatable.__pairs = function ()
-- Called when pairs is run on the args table.
if not metatable.donePairs then
mergeArgs(argTables)
metatable.donePairs = true
end
return translatenext, { t = metaArgs }
end
local function inext(t, i)
-- This uses our __index metamethod
local v = t[i + 1]
if v ~= nil then
return i + 1, v
end
end
metatable.__ipairs = function (t)
-- Called when ipairs is run on the args table.
return inext, t, 0
end
return args
end
return arguments
3134ecce8429b810d445e29eae115e2ae4c36c53
Template:Tl
10
17
39
38
2023-09-14T01:11:24Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
#REDIRECT [[Template:Template link]]
{{Redirect category shell|
{{R from move}}
}}
d6593bb3b4a866249f55d0f34b047a71fe1f1529
Template:Template link
10
18
41
40
2023-09-14T01:11:24Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{[[Template:{{{1}}}|{{{1}}}]]}}<noinclude>{{documentation}}
<!-- Categories go on the /doc subpage and interwikis go on Wikidata. -->
</noinclude>
eabbec62efe3044a98ebb3ce9e7d4d43c222351d
Module:Message box
828
19
43
42
2023-09-14T01:11:26Z
Ilovethehitgameomori
2
1 revision imported
Scribunto
text/plain
require('strict')
local getArgs
local yesno = require('Module:Yesno')
local lang = mw.language.getContentLanguage()
local CONFIG_MODULE = 'Module:Message box/configuration'
local DEMOSPACES = {talk = 'tmbox', image = 'imbox', file = 'imbox', category = 'cmbox', article = 'ambox', main = 'ambox'}
--------------------------------------------------------------------------------
-- Helper functions
--------------------------------------------------------------------------------
local function getTitleObject(...)
-- Get the title object, passing the function through pcall
-- in case we are over the expensive function count limit.
local success, title = pcall(mw.title.new, ...)
if success then
return title
end
end
local function union(t1, t2)
-- Returns the union of two arrays.
local vals = {}
for i, v in ipairs(t1) do
vals[v] = true
end
for i, v in ipairs(t2) do
vals[v] = true
end
local ret = {}
for k in pairs(vals) do
table.insert(ret, k)
end
table.sort(ret)
return ret
end
local function getArgNums(args, prefix)
local nums = {}
for k, v in pairs(args) do
local num = mw.ustring.match(tostring(k), '^' .. prefix .. '([1-9]%d*)$')
if num then
table.insert(nums, tonumber(num))
end
end
table.sort(nums)
return nums
end
--------------------------------------------------------------------------------
-- Box class definition
--------------------------------------------------------------------------------
local MessageBox = {}
MessageBox.__index = MessageBox
function MessageBox.new(boxType, args, cfg)
args = args or {}
local obj = {}
-- Set the title object and the namespace.
obj.title = getTitleObject(args.page) or mw.title.getCurrentTitle()
-- Set the config for our box type.
obj.cfg = cfg[boxType]
if not obj.cfg then
local ns = obj.title.namespace
-- boxType is "mbox" or invalid input
if args.demospace and args.demospace ~= '' then
-- implement demospace parameter of mbox
local demospace = string.lower(args.demospace)
if DEMOSPACES[demospace] then
-- use template from DEMOSPACES
obj.cfg = cfg[DEMOSPACES[demospace]]
elseif string.find( demospace, 'talk' ) then
-- demo as a talk page
obj.cfg = cfg.tmbox
else
-- default to ombox
obj.cfg = cfg.ombox
end
elseif ns == 0 then
obj.cfg = cfg.ambox -- main namespace
elseif ns == 6 then
obj.cfg = cfg.imbox -- file namespace
elseif ns == 14 then
obj.cfg = cfg.cmbox -- category namespace
else
local nsTable = mw.site.namespaces[ns]
if nsTable and nsTable.isTalk then
obj.cfg = cfg.tmbox -- any talk namespace
else
obj.cfg = cfg.ombox -- other namespaces or invalid input
end
end
end
-- Set the arguments, and remove all blank arguments except for the ones
-- listed in cfg.allowBlankParams.
do
local newArgs = {}
for k, v in pairs(args) do
if v ~= '' then
newArgs[k] = v
end
end
for i, param in ipairs(obj.cfg.allowBlankParams or {}) do
newArgs[param] = args[param]
end
obj.args = newArgs
end
-- Define internal data structure.
obj.categories = {}
obj.classes = {}
-- For lazy loading of [[Module:Category handler]].
obj.hasCategories = false
return setmetatable(obj, MessageBox)
end
function MessageBox:addCat(ns, cat, sort)
if not cat then
return nil
end
if sort then
cat = string.format('[[Category:%s|%s]]', cat, sort)
else
cat = string.format('[[Category:%s]]', cat)
end
self.hasCategories = true
self.categories[ns] = self.categories[ns] or {}
table.insert(self.categories[ns], cat)
end
function MessageBox:addClass(class)
if not class then
return nil
end
table.insert(self.classes, class)
end
function MessageBox:setParameters()
local args = self.args
local cfg = self.cfg
-- Get type data.
self.type = args.type
local typeData = cfg.types[self.type]
self.invalidTypeError = cfg.showInvalidTypeError
and self.type
and not typeData
typeData = typeData or cfg.types[cfg.default]
self.typeClass = typeData.class
self.typeImage = typeData.image
self.typeImageNeedsLink = typeData.imageNeedsLink
-- Find if the box has been wrongly substituted.
self.isSubstituted = cfg.substCheck and args.subst == 'SUBST'
-- Find whether we are using a small message box.
self.isSmall = cfg.allowSmall and (
cfg.smallParam and args.small == cfg.smallParam
or not cfg.smallParam and yesno(args.small)
)
-- Add attributes, classes and styles.
self.id = args.id
self.name = args.name
if self.name then
self:addClass('box-' .. string.gsub(self.name,' ','_'))
end
if yesno(args.plainlinks) ~= false then
self:addClass('plainlinks')
end
for _, class in ipairs(cfg.classes or {}) do
self:addClass(class)
end
if self.isSmall then
self:addClass(cfg.smallClass or 'mbox-small')
end
self:addClass(self.typeClass)
self:addClass(args.class)
self.style = args.style
self.attrs = args.attrs
-- Set text style.
self.textstyle = args.textstyle
-- Find if we are on the template page or not. This functionality is only
-- used if useCollapsibleTextFields is set, or if both cfg.templateCategory
-- and cfg.templateCategoryRequireName are set.
self.useCollapsibleTextFields = cfg.useCollapsibleTextFields
if self.useCollapsibleTextFields
or cfg.templateCategory
and cfg.templateCategoryRequireName
then
if self.name then
local templateName = mw.ustring.match(
self.name,
'^[tT][eE][mM][pP][lL][aA][tT][eE][%s_]*:[%s_]*(.*)$'
) or self.name
templateName = 'Template:' .. templateName
self.templateTitle = getTitleObject(templateName)
end
self.isTemplatePage = self.templateTitle
and mw.title.equals(self.title, self.templateTitle)
end
-- Process data for collapsible text fields. At the moment these are only
-- used in {{ambox}}.
if self.useCollapsibleTextFields then
-- Get the self.issue value.
if self.isSmall and args.smalltext then
self.issue = args.smalltext
else
local sect
if args.sect == '' then
sect = 'This ' .. (cfg.sectionDefault or 'page')
elseif type(args.sect) == 'string' then
sect = 'This ' .. args.sect
end
local issue = args.issue
issue = type(issue) == 'string' and issue ~= '' and issue or nil
local text = args.text
text = type(text) == 'string' and text or nil
local issues = {}
table.insert(issues, sect)
table.insert(issues, issue)
table.insert(issues, text)
self.issue = table.concat(issues, ' ')
end
-- Get the self.talk value.
local talk = args.talk
-- Show talk links on the template page or template subpages if the talk
-- parameter is blank.
if talk == ''
and self.templateTitle
and (
mw.title.equals(self.templateTitle, self.title)
or self.title:isSubpageOf(self.templateTitle)
)
then
talk = '#'
elseif talk == '' then
talk = nil
end
if talk then
-- If the talk value is a talk page, make a link to that page. Else
-- assume that it's a section heading, and make a link to the talk
-- page of the current page with that section heading.
local talkTitle = getTitleObject(talk)
local talkArgIsTalkPage = true
if not talkTitle or not talkTitle.isTalkPage then
talkArgIsTalkPage = false
talkTitle = getTitleObject(
self.title.text,
mw.site.namespaces[self.title.namespace].talk.id
)
end
if talkTitle and talkTitle.exists then
local talkText
if self.isSmall then
local talkLink = talkArgIsTalkPage and talk or (talkTitle.prefixedText .. '#' .. talk)
talkText = string.format('([[%s|talk]])', talkLink)
else
talkText = 'Relevant discussion may be found on'
if talkArgIsTalkPage then
talkText = string.format(
'%s [[%s|%s]].',
talkText,
talk,
talkTitle.prefixedText
)
else
talkText = string.format(
'%s the [[%s#%s|talk page]].',
talkText,
talkTitle.prefixedText,
talk
)
end
end
self.talk = talkText
end
end
-- Get other values.
self.fix = args.fix ~= '' and args.fix or nil
local date
if args.date and args.date ~= '' then
date = args.date
elseif args.date == '' and self.isTemplatePage then
date = lang:formatDate('F Y')
end
if date then
self.date = string.format(" <span class='date-container'><i>(<span class='date'>%s</span>)</i></span>", date)
end
self.info = args.info
if yesno(args.removalnotice) then
self.removalNotice = cfg.removalNotice
end
end
-- Set the non-collapsible text field. At the moment this is used by all box
-- types other than ambox, and also by ambox when small=yes.
if self.isSmall then
self.text = args.smalltext or args.text
else
self.text = args.text
end
-- Set the below row.
self.below = cfg.below and args.below
-- General image settings.
self.imageCellDiv = not self.isSmall and cfg.imageCellDiv
self.imageEmptyCell = cfg.imageEmptyCell
-- Left image settings.
local imageLeft = self.isSmall and args.smallimage or args.image
if cfg.imageCheckBlank and imageLeft ~= 'blank' and imageLeft ~= 'none'
or not cfg.imageCheckBlank and imageLeft ~= 'none'
then
self.imageLeft = imageLeft
if not imageLeft then
local imageSize = self.isSmall
and (cfg.imageSmallSize or '30x30px')
or '40x40px'
self.imageLeft = string.format('[[File:%s|%s%s|alt=]]', self.typeImage
or 'Information icon4.svg', imageSize, self.typeImageNeedsLink and "" or "|link=" )
end
end
-- Right image settings.
local imageRight = self.isSmall and args.smallimageright or args.imageright
if not (cfg.imageRightNone and imageRight == 'none') then
self.imageRight = imageRight
end
-- set templatestyles
self.base_templatestyles = cfg.templatestyles
self.templatestyles = args.templatestyles
end
function MessageBox:setMainspaceCategories()
local args = self.args
local cfg = self.cfg
if not cfg.allowMainspaceCategories then
return nil
end
local nums = {}
for _, prefix in ipairs{'cat', 'category', 'all'} do
args[prefix .. '1'] = args[prefix]
nums = union(nums, getArgNums(args, prefix))
end
-- The following is roughly equivalent to the old {{Ambox/category}}.
local date = args.date
date = type(date) == 'string' and date
local preposition = 'from'
for _, num in ipairs(nums) do
local mainCat = args['cat' .. tostring(num)]
or args['category' .. tostring(num)]
local allCat = args['all' .. tostring(num)]
mainCat = type(mainCat) == 'string' and mainCat
allCat = type(allCat) == 'string' and allCat
if mainCat and date and date ~= '' then
local catTitle = string.format('%s %s %s', mainCat, preposition, date)
self:addCat(0, catTitle)
catTitle = getTitleObject('Category:' .. catTitle)
if not catTitle or not catTitle.exists then
self:addCat(0, 'Articles with invalid date parameter in template')
end
elseif mainCat and (not date or date == '') then
self:addCat(0, mainCat)
end
if allCat then
self:addCat(0, allCat)
end
end
end
function MessageBox:setTemplateCategories()
local args = self.args
local cfg = self.cfg
-- Add template categories.
if cfg.templateCategory then
if cfg.templateCategoryRequireName then
if self.isTemplatePage then
self:addCat(10, cfg.templateCategory)
end
elseif not self.title.isSubpage then
self:addCat(10, cfg.templateCategory)
end
end
-- Add template error categories.
if cfg.templateErrorCategory then
local templateErrorCategory = cfg.templateErrorCategory
local templateCat, templateSort
if not self.name and not self.title.isSubpage then
templateCat = templateErrorCategory
elseif self.isTemplatePage then
local paramsToCheck = cfg.templateErrorParamsToCheck or {}
local count = 0
for i, param in ipairs(paramsToCheck) do
if not args[param] then
count = count + 1
end
end
if count > 0 then
templateCat = templateErrorCategory
templateSort = tostring(count)
end
if self.categoryNums and #self.categoryNums > 0 then
templateCat = templateErrorCategory
templateSort = 'C'
end
end
self:addCat(10, templateCat, templateSort)
end
end
function MessageBox:setAllNamespaceCategories()
-- Set categories for all namespaces.
if self.invalidTypeError then
local allSort = (self.title.namespace == 0 and 'Main:' or '') .. self.title.prefixedText
self:addCat('all', 'Wikipedia message box parameter needs fixing', allSort)
end
if self.isSubstituted then
self:addCat('all', 'Pages with incorrectly substituted templates')
end
end
function MessageBox:setCategories()
if self.title.namespace == 0 then
self:setMainspaceCategories()
elseif self.title.namespace == 10 then
self:setTemplateCategories()
end
self:setAllNamespaceCategories()
end
function MessageBox:renderCategories()
if not self.hasCategories then
-- No categories added, no need to pass them to Category handler so,
-- if it was invoked, it would return the empty string.
-- So we shortcut and return the empty string.
return ""
end
-- Convert category tables to strings and pass them through
-- [[Module:Category handler]].
return require('Module:Category handler')._main{
main = table.concat(self.categories[0] or {}),
template = table.concat(self.categories[10] or {}),
all = table.concat(self.categories.all or {}),
nocat = self.args.nocat,
page = self.args.page
}
end
function MessageBox:export()
local root = mw.html.create()
-- Add the subst check error.
if self.isSubstituted and self.name then
root:tag('b')
:addClass('error')
:wikitext(string.format(
'Template <code>%s[[Template:%s|%s]]%s</code> has been incorrectly substituted.',
mw.text.nowiki('{{'), self.name, self.name, mw.text.nowiki('}}')
))
end
local frame = mw.getCurrentFrame()
root:wikitext(frame:extensionTag{
name = 'templatestyles',
args = { src = self.base_templatestyles },
})
-- Add support for a single custom templatestyles sheet. Undocumented as
-- need should be limited and many templates using mbox are substed; we
-- don't want to spread templatestyles sheets around to arbitrary places
if self.templatestyles then
root:wikitext(frame:extensionTag{
name = 'templatestyles',
args = { src = self.templatestyles },
})
end
-- Create the box table.
local boxTable = root:tag('table')
boxTable:attr('id', self.id or nil)
for i, class in ipairs(self.classes or {}) do
boxTable:addClass(class or nil)
end
boxTable
:cssText(self.style or nil)
:attr('role', 'presentation')
if self.attrs then
boxTable:attr(self.attrs)
end
-- Add the left-hand image.
local row = boxTable:tag('tr')
if self.imageLeft then
local imageLeftCell = row:tag('td'):addClass('mbox-image')
if self.imageCellDiv then
-- If we are using a div, redefine imageLeftCell so that the image
-- is inside it. Divs use style="width: 52px;", which limits the
-- image width to 52px. If any images in a div are wider than that,
-- they may overlap with the text or cause other display problems.
imageLeftCell = imageLeftCell:tag('div'):addClass('mbox-image-div')
end
imageLeftCell:wikitext(self.imageLeft or nil)
elseif self.imageEmptyCell then
-- Some message boxes define an empty cell if no image is specified, and
-- some don't. The old template code in templates where empty cells are
-- specified gives the following hint: "No image. Cell with some width
-- or padding necessary for text cell to have 100% width."
row:tag('td')
:addClass('mbox-empty-cell')
end
-- Add the text.
local textCell = row:tag('td'):addClass('mbox-text')
if self.useCollapsibleTextFields then
-- The message box uses advanced text parameters that allow things to be
-- collapsible. At the moment, only ambox uses this.
textCell:cssText(self.textstyle or nil)
local textCellDiv = textCell:tag('div')
textCellDiv
:addClass('mbox-text-span')
:wikitext(self.issue or nil)
if (self.talk or self.fix) then
textCellDiv:tag('span')
:addClass('hide-when-compact')
:wikitext(self.talk and (' ' .. self.talk) or nil)
:wikitext(self.fix and (' ' .. self.fix) or nil)
end
textCellDiv:wikitext(self.date and (' ' .. self.date) or nil)
if self.info and not self.isSmall then
textCellDiv
:tag('span')
:addClass('hide-when-compact')
:wikitext(self.info and (' ' .. self.info) or nil)
end
if self.removalNotice then
textCellDiv:tag('span')
:addClass('hide-when-compact')
:tag('i')
:wikitext(string.format(" (%s)", self.removalNotice))
end
else
-- Default text formatting - anything goes.
textCell
:cssText(self.textstyle or nil)
:wikitext(self.text or nil)
end
-- Add the right-hand image.
if self.imageRight then
local imageRightCell = row:tag('td'):addClass('mbox-imageright')
if self.imageCellDiv then
-- If we are using a div, redefine imageRightCell so that the image
-- is inside it.
imageRightCell = imageRightCell:tag('div'):addClass('mbox-image-div')
end
imageRightCell
:wikitext(self.imageRight or nil)
end
-- Add the below row.
if self.below then
boxTable:tag('tr')
:tag('td')
:attr('colspan', self.imageRight and '3' or '2')
:addClass('mbox-text')
:cssText(self.textstyle or nil)
:wikitext(self.below or nil)
end
-- Add error message for invalid type parameters.
if self.invalidTypeError then
root:tag('div')
:addClass('mbox-invalid-type')
:wikitext(string.format(
'This message box is using an invalid "type=%s" parameter and needs fixing.',
self.type or ''
))
end
-- Add categories.
root:wikitext(self:renderCategories() or nil)
return tostring(root)
end
--------------------------------------------------------------------------------
-- Exports
--------------------------------------------------------------------------------
local p, mt = {}, {}
function p._exportClasses()
-- For testing.
return {
MessageBox = MessageBox
}
end
function p.main(boxType, args, cfgTables)
local box = MessageBox.new(boxType, args, cfgTables or mw.loadData(CONFIG_MODULE))
box:setParameters()
box:setCategories()
return box:export()
end
function mt.__index(t, k)
return function (frame)
if not getArgs then
getArgs = require('Module:Arguments').getArgs
end
return t.main(k, getArgs(frame, {trim = false, removeBlanks = false}))
end
end
return setmetatable(p, mt)
f2fb84f7b817d2d88747f57c40902a0d8be8158a
Template:Yesno
10
21
47
46
2023-09-14T01:11:28Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{<includeonly>safesubst:</includeonly>#switch: {{<includeonly>safesubst:</includeonly>lc: {{{1|¬}}} }}
|no
|n
|f
|false
|off
|0 = {{{no|<!-- null -->}}}
| = {{{blank|{{{no|<!-- null -->}}}}}}
|¬ = {{{¬|}}}
|yes
|y
|t
|true
|on
|1 = {{{yes|yes}}}
|#default = {{{def|{{{yes|yes}}}}}}
}}<noinclude>
{{Documentation}}
</noinclude>
629c2937bc5cf7cfe13cd2a598582af832782399
Template:Main other
10
22
49
48
2023-09-14T01:11:29Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{#switch:
<!--If no or empty "demospace" parameter then detect namespace-->
{{#if:{{{demospace|}}}
| {{lc: {{{demospace}}} }} <!--Use lower case "demospace"-->
| {{#ifeq:{{NAMESPACE}}|{{ns:0}}
| main
| other
}}
}}
| main = {{{1|}}}
| other
| #default = {{{2|}}}
}}<noinclude>
{{documentation}}
<!-- Add categories to the /doc subpage; interwikis go to Wikidata, thank you! -->
</noinclude>
86ad907ffeea3cc545159e00cd1f2d6433946450
Template:Nobold
10
23
51
50
2023-09-14T01:11:29Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
<templatestyles src="Nobold/styles.css"/><span class="nobold">{{{1}}}</span><noinclude>
{{documentation}}
<!-- PLEASE ADD CATEGORIES AND INTERWIKIS TO THE /doc SUBPAGE, THANKS -->
</noinclude>
9c92b5951772bb26ca0fbe9256418b65e47700dd
Module:Check for unknown parameters
828
25
55
54
2023-09-14T01:11:30Z
Ilovethehitgameomori
2
1 revision imported
Scribunto
text/plain
-- This module may be used to compare the arguments passed to the parent
-- with a list of arguments, returning a specified result if an argument is
-- not on the list
local p = {}
local function trim(s)
return s:match('^%s*(.-)%s*$')
end
local function isnotempty(s)
return s and s:match('%S')
end
local function clean(text)
-- Return text cleaned for display and truncated if too long.
-- Strip markers are replaced with dummy text representing the original wikitext.
local pos, truncated
local function truncate(text)
if truncated then
return ''
end
if mw.ustring.len(text) > 25 then
truncated = true
text = mw.ustring.sub(text, 1, 25) .. '...'
end
return mw.text.nowiki(text)
end
local parts = {}
for before, tag, remainder in text:gmatch('([^\127]*)\127[^\127]*%-(%l+)%-[^\127]*\127()') do
pos = remainder
table.insert(parts, truncate(before) .. '<' .. tag .. '>...</' .. tag .. '>')
end
table.insert(parts, truncate(text:sub(pos or 1)))
return table.concat(parts)
end
function p._check(args, pargs)
if type(args) ~= "table" or type(pargs) ~= "table" then
-- TODO: error handling
return
end
-- create the list of known args, regular expressions, and the return string
local knownargs = {}
local regexps = {}
for k, v in pairs(args) do
if type(k) == 'number' then
v = trim(v)
knownargs[v] = 1
elseif k:find('^regexp[1-9][0-9]*$') then
table.insert(regexps, '^' .. v .. '$')
end
end
-- loop over the parent args, and make sure they are on the list
local ignoreblank = isnotempty(args['ignoreblank'])
local showblankpos = isnotempty(args['showblankpositional'])
local values = {}
for k, v in pairs(pargs) do
if type(k) == 'string' and knownargs[k] == nil then
local knownflag = false
for _, regexp in ipairs(regexps) do
if mw.ustring.match(k, regexp) then
knownflag = true
break
end
end
if not knownflag and ( not ignoreblank or isnotempty(v) ) then
table.insert(values, clean(k))
end
elseif type(k) == 'number' and knownargs[tostring(k)] == nil then
local knownflag = false
for _, regexp in ipairs(regexps) do
if mw.ustring.match(tostring(k), regexp) then
knownflag = true
break
end
end
if not knownflag and ( showblankpos or isnotempty(v) ) then
table.insert(values, k .. ' = ' .. clean(v))
end
end
end
-- add results to the output tables
local res = {}
if #values > 0 then
local unknown_text = args['unknown'] or 'Found _VALUE_, '
if mw.getCurrentFrame():preprocess( "{{REVISIONID}}" ) == "" then
local preview_text = args['preview']
if isnotempty(preview_text) then
preview_text = require('Module:If preview')._warning({preview_text})
elseif preview == nil then
preview_text = unknown_text
end
unknown_text = preview_text
end
for _, v in pairs(values) do
-- Fix odd bug for | = which gets stripped to the empty string and
-- breaks category links
if v == '' then v = ' ' end
-- avoid error with v = 'example%2' ("invalid capture index")
local r = unknown_text:gsub('_VALUE_', {_VALUE_ = v})
table.insert(res, r)
end
end
return table.concat(res)
end
function p.check(frame)
local args = frame.args
local pargs = frame:getParent().args
return p._check(args, pargs)
end
return p
93db6d115d4328d2a5148bb42959105e367b663e
Module:String
828
26
57
56
2023-09-14T01:11:31Z
Ilovethehitgameomori
2
1 revision imported
Scribunto
text/plain
--[[
This module is intended to provide access to basic string functions.
Most of the functions provided here can be invoked with named parameters,
unnamed parameters, or a mixture. If named parameters are used, Mediawiki will
automatically remove any leading or trailing whitespace from the parameter.
Depending on the intended use, it may be advantageous to either preserve or
remove such whitespace.
Global options
ignore_errors: If set to 'true' or 1, any error condition will result in
an empty string being returned rather than an error message.
error_category: If an error occurs, specifies the name of a category to
include with the error message. The default category is
[Category:Errors reported by Module String].
no_category: If set to 'true' or 1, no category will be added if an error
is generated.
Unit tests for this module are available at Module:String/tests.
]]
local str = {}
--[[
len
This function returns the length of the target string.
Usage:
{{#invoke:String|len|target_string|}}
OR
{{#invoke:String|len|s=target_string}}
Parameters
s: The string whose length to report
If invoked using named parameters, Mediawiki will automatically remove any leading or
trailing whitespace from the target string.
]]
function str.len( frame )
local new_args = str._getParameters( frame.args, {'s'} )
local s = new_args['s'] or ''
return mw.ustring.len( s )
end
--[[
sub
This function returns a substring of the target string at specified indices.
Usage:
{{#invoke:String|sub|target_string|start_index|end_index}}
OR
{{#invoke:String|sub|s=target_string|i=start_index|j=end_index}}
Parameters
s: The string to return a subset of
i: The fist index of the substring to return, defaults to 1.
j: The last index of the string to return, defaults to the last character.
The first character of the string is assigned an index of 1. If either i or j
is a negative value, it is interpreted the same as selecting a character by
counting from the end of the string. Hence, a value of -1 is the same as
selecting the last character of the string.
If the requested indices are out of range for the given string, an error is
reported.
]]
function str.sub( frame )
local new_args = str._getParameters( frame.args, { 's', 'i', 'j' } )
local s = new_args['s'] or ''
local i = tonumber( new_args['i'] ) or 1
local j = tonumber( new_args['j'] ) or -1
local len = mw.ustring.len( s )
-- Convert negatives for range checking
if i < 0 then
i = len + i + 1
end
if j < 0 then
j = len + j + 1
end
if i > len or j > len or i < 1 or j < 1 then
return str._error( 'String subset index out of range' )
end
if j < i then
return str._error( 'String subset indices out of order' )
end
return mw.ustring.sub( s, i, j )
end
--[[
This function implements that features of {{str sub old}} and is kept in order
to maintain these older templates.
]]
function str.sublength( frame )
local i = tonumber( frame.args.i ) or 0
local len = tonumber( frame.args.len )
return mw.ustring.sub( frame.args.s, i + 1, len and ( i + len ) )
end
--[[
_match
This function returns a substring from the source string that matches a
specified pattern. It is exported for use in other modules
Usage:
strmatch = require("Module:String")._match
sresult = strmatch( s, pattern, start, match, plain, nomatch )
Parameters
s: The string to search
pattern: The pattern or string to find within the string
start: The index within the source string to start the search. The first
character of the string has index 1. Defaults to 1.
match: In some cases it may be possible to make multiple matches on a single
string. This specifies which match to return, where the first match is
match= 1. If a negative number is specified then a match is returned
counting from the last match. Hence match = -1 is the same as requesting
the last match. Defaults to 1.
plain: A flag indicating that the pattern should be understood as plain
text. Defaults to false.
nomatch: If no match is found, output the "nomatch" value rather than an error.
For information on constructing Lua patterns, a form of [regular expression], see:
* http://www.lua.org/manual/5.1/manual.html#5.4.1
* http://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Patterns
* http://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Ustring_patterns
]]
-- This sub-routine is exported for use in other modules
function str._match( s, pattern, start, match_index, plain_flag, nomatch )
if s == '' then
return str._error( 'Target string is empty' )
end
if pattern == '' then
return str._error( 'Pattern string is empty' )
end
start = tonumber(start) or 1
if math.abs(start) < 1 or math.abs(start) > mw.ustring.len( s ) then
return str._error( 'Requested start is out of range' )
end
if match_index == 0 then
return str._error( 'Match index is out of range' )
end
if plain_flag then
pattern = str._escapePattern( pattern )
end
local result
if match_index == 1 then
-- Find first match is simple case
result = mw.ustring.match( s, pattern, start )
else
if start > 1 then
s = mw.ustring.sub( s, start )
end
local iterator = mw.ustring.gmatch(s, pattern)
if match_index > 0 then
-- Forward search
for w in iterator do
match_index = match_index - 1
if match_index == 0 then
result = w
break
end
end
else
-- Reverse search
local result_table = {}
local count = 1
for w in iterator do
result_table[count] = w
count = count + 1
end
result = result_table[ count + match_index ]
end
end
if result == nil then
if nomatch == nil then
return str._error( 'Match not found' )
else
return nomatch
end
else
return result
end
end
--[[
match
This function returns a substring from the source string that matches a
specified pattern.
Usage:
{{#invoke:String|match|source_string|pattern_string|start_index|match_number|plain_flag|nomatch_output}}
OR
{{#invoke:String|match|s=source_string|pattern=pattern_string|start=start_index
|match=match_number|plain=plain_flag|nomatch=nomatch_output}}
Parameters
s: The string to search
pattern: The pattern or string to find within the string
start: The index within the source string to start the search. The first
character of the string has index 1. Defaults to 1.
match: In some cases it may be possible to make multiple matches on a single
string. This specifies which match to return, where the first match is
match= 1. If a negative number is specified then a match is returned
counting from the last match. Hence match = -1 is the same as requesting
the last match. Defaults to 1.
plain: A flag indicating that the pattern should be understood as plain
text. Defaults to false.
nomatch: If no match is found, output the "nomatch" value rather than an error.
If invoked using named parameters, Mediawiki will automatically remove any leading or
trailing whitespace from each string. In some circumstances this is desirable, in
other cases one may want to preserve the whitespace.
If the match_number or start_index are out of range for the string being queried, then
this function generates an error. An error is also generated if no match is found.
If one adds the parameter ignore_errors=true, then the error will be suppressed and
an empty string will be returned on any failure.
For information on constructing Lua patterns, a form of [regular expression], see:
* http://www.lua.org/manual/5.1/manual.html#5.4.1
* http://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Patterns
* http://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Ustring_patterns
]]
-- This is the entry point for #invoke:String|match
function str.match( frame )
local new_args = str._getParameters( frame.args, {'s', 'pattern', 'start', 'match', 'plain', 'nomatch'} )
local s = new_args['s'] or ''
local start = tonumber( new_args['start'] ) or 1
local plain_flag = str._getBoolean( new_args['plain'] or false )
local pattern = new_args['pattern'] or ''
local match_index = math.floor( tonumber(new_args['match']) or 1 )
local nomatch = new_args['nomatch']
return str._match( s, pattern, start, match_index, plain_flag, nomatch )
end
--[[
pos
This function returns a single character from the target string at position pos.
Usage:
{{#invoke:String|pos|target_string|index_value}}
OR
{{#invoke:String|pos|target=target_string|pos=index_value}}
Parameters
target: The string to search
pos: The index for the character to return
If invoked using named parameters, Mediawiki will automatically remove any leading or
trailing whitespace from the target string. In some circumstances this is desirable, in
other cases one may want to preserve the whitespace.
The first character has an index value of 1.
If one requests a negative value, this function will select a character by counting backwards
from the end of the string. In other words pos = -1 is the same as asking for the last character.
A requested value of zero, or a value greater than the length of the string returns an error.
]]
function str.pos( frame )
local new_args = str._getParameters( frame.args, {'target', 'pos'} )
local target_str = new_args['target'] or ''
local pos = tonumber( new_args['pos'] ) or 0
if pos == 0 or math.abs(pos) > mw.ustring.len( target_str ) then
return str._error( 'String index out of range' )
end
return mw.ustring.sub( target_str, pos, pos )
end
--[[
str_find
This function duplicates the behavior of {{str_find}}, including all of its quirks.
This is provided in order to support existing templates, but is NOT RECOMMENDED for
new code and templates. New code is recommended to use the "find" function instead.
Returns the first index in "source" that is a match to "target". Indexing is 1-based,
and the function returns -1 if the "target" string is not present in "source".
Important Note: If the "target" string is empty / missing, this function returns a
value of "1", which is generally unexpected behavior, and must be accounted for
separatetly.
]]
function str.str_find( frame )
local new_args = str._getParameters( frame.args, {'source', 'target'} )
local source_str = new_args['source'] or ''
local target_str = new_args['target'] or ''
if target_str == '' then
return 1
end
local start = mw.ustring.find( source_str, target_str, 1, true )
if start == nil then
start = -1
end
return start
end
--[[
find
This function allows one to search for a target string or pattern within another
string.
Usage:
{{#invoke:String|find|source_str|target_string|start_index|plain_flag}}
OR
{{#invoke:String|find|source=source_str|target=target_str|start=start_index|plain=plain_flag}}
Parameters
source: The string to search
target: The string or pattern to find within source
start: The index within the source string to start the search, defaults to 1
plain: Boolean flag indicating that target should be understood as plain
text and not as a Lua style regular expression, defaults to true
If invoked using named parameters, Mediawiki will automatically remove any leading or
trailing whitespace from the parameter. In some circumstances this is desirable, in
other cases one may want to preserve the whitespace.
This function returns the first index >= "start" where "target" can be found
within "source". Indices are 1-based. If "target" is not found, then this
function returns 0. If either "source" or "target" are missing / empty, this
function also returns 0.
This function should be safe for UTF-8 strings.
]]
function str.find( frame )
local new_args = str._getParameters( frame.args, {'source', 'target', 'start', 'plain' } )
local source_str = new_args['source'] or ''
local pattern = new_args['target'] or ''
local start_pos = tonumber(new_args['start']) or 1
local plain = new_args['plain'] or true
if source_str == '' or pattern == '' then
return 0
end
plain = str._getBoolean( plain )
local start = mw.ustring.find( source_str, pattern, start_pos, plain )
if start == nil then
start = 0
end
return start
end
--[[
replace
This function allows one to replace a target string or pattern within another
string.
Usage:
{{#invoke:String|replace|source_str|pattern_string|replace_string|replacement_count|plain_flag}}
OR
{{#invoke:String|replace|source=source_string|pattern=pattern_string|replace=replace_string|
count=replacement_count|plain=plain_flag}}
Parameters
source: The string to search
pattern: The string or pattern to find within source
replace: The replacement text
count: The number of occurences to replace, defaults to all.
plain: Boolean flag indicating that pattern should be understood as plain
text and not as a Lua style regular expression, defaults to true
]]
function str.replace( frame )
local new_args = str._getParameters( frame.args, {'source', 'pattern', 'replace', 'count', 'plain' } )
local source_str = new_args['source'] or ''
local pattern = new_args['pattern'] or ''
local replace = new_args['replace'] or ''
local count = tonumber( new_args['count'] )
local plain = new_args['plain'] or true
if source_str == '' or pattern == '' then
return source_str
end
plain = str._getBoolean( plain )
if plain then
pattern = str._escapePattern( pattern )
replace = mw.ustring.gsub( replace, "%%", "%%%%" ) --Only need to escape replacement sequences.
end
local result
if count ~= nil then
result = mw.ustring.gsub( source_str, pattern, replace, count )
else
result = mw.ustring.gsub( source_str, pattern, replace )
end
return result
end
--[[
simple function to pipe string.rep to templates.
]]
function str.rep( frame )
local repetitions = tonumber( frame.args[2] )
if not repetitions then
return str._error( 'function rep expects a number as second parameter, received "' .. ( frame.args[2] or '' ) .. '"' )
end
return string.rep( frame.args[1] or '', repetitions )
end
--[[
escapePattern
This function escapes special characters from a Lua string pattern. See [1]
for details on how patterns work.
[1] https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Patterns
Usage:
{{#invoke:String|escapePattern|pattern_string}}
Parameters
pattern_string: The pattern string to escape.
]]
function str.escapePattern( frame )
local pattern_str = frame.args[1]
if not pattern_str then
return str._error( 'No pattern string specified' )
end
local result = str._escapePattern( pattern_str )
return result
end
--[[
count
This function counts the number of occurrences of one string in another.
]]
function str.count(frame)
local args = str._getParameters(frame.args, {'source', 'pattern', 'plain'})
local source = args.source or ''
local pattern = args.pattern or ''
local plain = str._getBoolean(args.plain or true)
if plain then
pattern = str._escapePattern(pattern)
end
local _, count = mw.ustring.gsub(source, pattern, '')
return count
end
--[[
endswith
This function determines whether a string ends with another string.
]]
function str.endswith(frame)
local args = str._getParameters(frame.args, {'source', 'pattern'})
local source = args.source or ''
local pattern = args.pattern or ''
if pattern == '' then
-- All strings end with the empty string.
return "yes"
end
if mw.ustring.sub(source, -mw.ustring.len(pattern), -1) == pattern then
return "yes"
else
return ""
end
end
--[[
join
Join all non empty arguments together; the first argument is the separator.
Usage:
{{#invoke:String|join|sep|one|two|three}}
]]
function str.join(frame)
local args = {}
local sep
for _, v in ipairs( frame.args ) do
if sep then
if v ~= '' then
table.insert(args, v)
end
else
sep = v
end
end
return table.concat( args, sep or '' )
end
--[[
Helper function that populates the argument list given that user may need to use a mix of
named and unnamed parameters. This is relevant because named parameters are not
identical to unnamed parameters due to string trimming, and when dealing with strings
we sometimes want to either preserve or remove that whitespace depending on the application.
]]
function str._getParameters( frame_args, arg_list )
local new_args = {}
local index = 1
local value
for _, arg in ipairs( arg_list ) do
value = frame_args[arg]
if value == nil then
value = frame_args[index]
index = index + 1
end
new_args[arg] = value
end
return new_args
end
--[[
Helper function to handle error messages.
]]
function str._error( error_str )
local frame = mw.getCurrentFrame()
local error_category = frame.args.error_category or 'Errors reported by Module String'
local ignore_errors = frame.args.ignore_errors or false
local no_category = frame.args.no_category or false
if str._getBoolean(ignore_errors) then
return ''
end
local error_str = '<strong class="error">String Module Error: ' .. error_str .. '</strong>'
if error_category ~= '' and not str._getBoolean( no_category ) then
error_str = '[[Category:' .. error_category .. ']]' .. error_str
end
return error_str
end
--[[
Helper Function to interpret boolean strings
]]
function str._getBoolean( boolean_str )
local boolean_value
if type( boolean_str ) == 'string' then
boolean_str = boolean_str:lower()
if boolean_str == 'false' or boolean_str == 'no' or boolean_str == '0'
or boolean_str == '' then
boolean_value = false
else
boolean_value = true
end
elseif type( boolean_str ) == 'boolean' then
boolean_value = boolean_str
else
error( 'No boolean value found' )
end
return boolean_value
end
--[[
Helper function that escapes all pattern characters so that they will be treated
as plain text.
]]
function str._escapePattern( pattern_str )
return mw.ustring.gsub( pattern_str, "([%(%)%.%%%+%-%*%?%[%^%$%]])", "%%%1" )
end
return str
6df794dd52434e0f6a372c9918f5a9dedd15f579
Module:List
828
28
61
60
2023-09-14T01:11:32Z
Ilovethehitgameomori
2
1 revision imported
Scribunto
text/plain
local libUtil = require('libraryUtil')
local checkType = libUtil.checkType
local mTableTools = require('Module:TableTools')
local p = {}
local listTypes = {
['bulleted'] = true,
['unbulleted'] = true,
['horizontal'] = true,
['ordered'] = true,
['horizontal_ordered'] = true
}
function p.makeListData(listType, args)
-- Constructs a data table to be passed to p.renderList.
local data = {}
-- Classes and TemplateStyles
data.classes = {}
data.templatestyles = ''
if listType == 'horizontal' or listType == 'horizontal_ordered' then
table.insert(data.classes, 'hlist')
data.templatestyles = mw.getCurrentFrame():extensionTag{
name = 'templatestyles', args = { src = 'Hlist/styles.css' }
}
elseif listType == 'unbulleted' then
table.insert(data.classes, 'plainlist')
data.templatestyles = mw.getCurrentFrame():extensionTag{
name = 'templatestyles', args = { src = 'Plainlist/styles.css' }
}
end
table.insert(data.classes, args.class)
-- Main div style
data.style = args.style
-- Indent for horizontal lists
if listType == 'horizontal' or listType == 'horizontal_ordered' then
local indent = tonumber(args.indent)
indent = indent and indent * 1.6 or 0
if indent > 0 then
data.marginLeft = indent .. 'em'
end
end
-- List style types for ordered lists
-- This could be "1, 2, 3", "a, b, c", or a number of others. The list style
-- type is either set by the "type" attribute or the "list-style-type" CSS
-- property.
if listType == 'ordered' or listType == 'horizontal_ordered' then
data.listStyleType = args.list_style_type or args['list-style-type']
data.type = args['type']
-- Detect invalid type attributes and attempt to convert them to
-- list-style-type CSS properties.
if data.type
and not data.listStyleType
and not tostring(data.type):find('^%s*[1AaIi]%s*$')
then
data.listStyleType = data.type
data.type = nil
end
end
-- List tag type
if listType == 'ordered' or listType == 'horizontal_ordered' then
data.listTag = 'ol'
else
data.listTag = 'ul'
end
-- Start number for ordered lists
data.start = args.start
if listType == 'horizontal_ordered' then
-- Apply fix to get start numbers working with horizontal ordered lists.
local startNum = tonumber(data.start)
if startNum then
data.counterReset = 'listitem ' .. tostring(startNum - 1)
end
end
-- List style
-- ul_style and ol_style are included for backwards compatibility. No
-- distinction is made for ordered or unordered lists.
data.listStyle = args.list_style
-- List items
-- li_style is included for backwards compatibility. item_style was included
-- to be easier to understand for non-coders.
data.itemStyle = args.item_style or args.li_style
data.items = {}
for _, num in ipairs(mTableTools.numKeys(args)) do
local item = {}
item.content = args[num]
item.style = args['item' .. tostring(num) .. '_style']
or args['item_style' .. tostring(num)]
item.value = args['item' .. tostring(num) .. '_value']
or args['item_value' .. tostring(num)]
table.insert(data.items, item)
end
return data
end
function p.renderList(data)
-- Renders the list HTML.
-- Return the blank string if there are no list items.
if type(data.items) ~= 'table' or #data.items < 1 then
return ''
end
-- Render the main div tag.
local root = mw.html.create('div')
for _, class in ipairs(data.classes or {}) do
root:addClass(class)
end
root:css{['margin-left'] = data.marginLeft}
if data.style then
root:cssText(data.style)
end
-- Render the list tag.
local list = root:tag(data.listTag or 'ul')
list
:attr{start = data.start, type = data.type}
:css{
['counter-reset'] = data.counterReset,
['list-style-type'] = data.listStyleType
}
if data.listStyle then
list:cssText(data.listStyle)
end
-- Render the list items
for _, t in ipairs(data.items or {}) do
local item = list:tag('li')
if data.itemStyle then
item:cssText(data.itemStyle)
end
if t.style then
item:cssText(t.style)
end
item
:attr{value = t.value}
:wikitext(t.content)
end
return data.templatestyles .. tostring(root)
end
function p.renderTrackingCategories(args)
local isDeprecated = false -- Tracks deprecated parameters.
for k, v in pairs(args) do
k = tostring(k)
if k:find('^item_style%d+$') or k:find('^item_value%d+$') then
isDeprecated = true
break
end
end
local ret = ''
if isDeprecated then
ret = ret .. '[[Category:List templates with deprecated parameters]]'
end
return ret
end
function p.makeList(listType, args)
if not listType or not listTypes[listType] then
error(string.format(
"bad argument #1 to 'makeList' ('%s' is not a valid list type)",
tostring(listType)
), 2)
end
checkType('makeList', 2, args, 'table')
local data = p.makeListData(listType, args)
local list = p.renderList(data)
local trackingCategories = p.renderTrackingCategories(args)
return list .. trackingCategories
end
for listType in pairs(listTypes) do
p[listType] = function (frame)
local mArguments = require('Module:Arguments')
local origArgs = mArguments.getArgs(frame, {
valueFunc = function (key, value)
if not value or not mw.ustring.find(value, '%S') then return nil end
if mw.ustring.find(value, '^%s*[%*#;:]') then
return value
else
return value:match('^%s*(.-)%s*$')
end
return nil
end
})
-- Copy all the arguments to a new table, for faster indexing.
local args = {}
for k, v in pairs(origArgs) do
args[k] = v
end
return p.makeList(listType, args)
end
end
return p
7a4f36a6e9cd56370bdd8207d23694124821dc1a
Module:TableTools
828
29
63
62
2023-09-14T01:11:32Z
Ilovethehitgameomori
2
1 revision imported
Scribunto
text/plain
------------------------------------------------------------------------------------
-- TableTools --
-- --
-- This module includes a number of functions for dealing with Lua tables. --
-- It is a meta-module, meant to be called from other Lua modules, and should not --
-- be called directly from #invoke. --
------------------------------------------------------------------------------------
local libraryUtil = require('libraryUtil')
local p = {}
-- Define often-used variables and functions.
local floor = math.floor
local infinity = math.huge
local checkType = libraryUtil.checkType
local checkTypeMulti = libraryUtil.checkTypeMulti
------------------------------------------------------------------------------------
-- isPositiveInteger
--
-- This function returns true if the given value is a positive integer, and false
-- if not. Although it doesn't operate on tables, it is included here as it is
-- useful for determining whether a given table key is in the array part or the
-- hash part of a table.
------------------------------------------------------------------------------------
function p.isPositiveInteger(v)
return type(v) == 'number' and v >= 1 and floor(v) == v and v < infinity
end
------------------------------------------------------------------------------------
-- isNan
--
-- This function returns true if the given number is a NaN value, and false if
-- not. Although it doesn't operate on tables, it is included here as it is useful
-- for determining whether a value can be a valid table key. Lua will generate an
-- error if a NaN is used as a table key.
------------------------------------------------------------------------------------
function p.isNan(v)
return type(v) == 'number' and v ~= v
end
------------------------------------------------------------------------------------
-- shallowClone
--
-- This returns a clone of a table. The value returned is a new table, but all
-- subtables and functions are shared. Metamethods are respected, but the returned
-- table will have no metatable of its own.
------------------------------------------------------------------------------------
function p.shallowClone(t)
checkType('shallowClone', 1, t, 'table')
local ret = {}
for k, v in pairs(t) do
ret[k] = v
end
return ret
end
------------------------------------------------------------------------------------
-- removeDuplicates
--
-- This removes duplicate values from an array. Non-positive-integer keys are
-- ignored. The earliest value is kept, and all subsequent duplicate values are
-- removed, but otherwise the array order is unchanged.
------------------------------------------------------------------------------------
function p.removeDuplicates(arr)
checkType('removeDuplicates', 1, arr, 'table')
local isNan = p.isNan
local ret, exists = {}, {}
for _, v in ipairs(arr) do
if isNan(v) then
-- NaNs can't be table keys, and they are also unique, so we don't need to check existence.
ret[#ret + 1] = v
else
if not exists[v] then
ret[#ret + 1] = v
exists[v] = true
end
end
end
return ret
end
------------------------------------------------------------------------------------
-- numKeys
--
-- This takes a table and returns an array containing the numbers of any numerical
-- keys that have non-nil values, sorted in numerical order.
------------------------------------------------------------------------------------
function p.numKeys(t)
checkType('numKeys', 1, t, 'table')
local isPositiveInteger = p.isPositiveInteger
local nums = {}
for k in pairs(t) do
if isPositiveInteger(k) then
nums[#nums + 1] = k
end
end
table.sort(nums)
return nums
end
------------------------------------------------------------------------------------
-- affixNums
--
-- This takes a table and returns an array containing the numbers of keys with the
-- specified prefix and suffix. For example, for the table
-- {a1 = 'foo', a3 = 'bar', a6 = 'baz'} and the prefix "a", affixNums will return
-- {1, 3, 6}.
------------------------------------------------------------------------------------
function p.affixNums(t, prefix, suffix)
checkType('affixNums', 1, t, 'table')
checkType('affixNums', 2, prefix, 'string', true)
checkType('affixNums', 3, suffix, 'string', true)
local function cleanPattern(s)
-- Cleans a pattern so that the magic characters ()%.[]*+-?^$ are interpreted literally.
return s:gsub('([%(%)%%%.%[%]%*%+%-%?%^%$])', '%%%1')
end
prefix = prefix or ''
suffix = suffix or ''
prefix = cleanPattern(prefix)
suffix = cleanPattern(suffix)
local pattern = '^' .. prefix .. '([1-9]%d*)' .. suffix .. '$'
local nums = {}
for k in pairs(t) do
if type(k) == 'string' then
local num = mw.ustring.match(k, pattern)
if num then
nums[#nums + 1] = tonumber(num)
end
end
end
table.sort(nums)
return nums
end
------------------------------------------------------------------------------------
-- numData
--
-- Given a table with keys like {"foo1", "bar1", "foo2", "baz2"}, returns a table
-- of subtables in the format
-- {[1] = {foo = 'text', bar = 'text'}, [2] = {foo = 'text', baz = 'text'}}.
-- Keys that don't end with an integer are stored in a subtable named "other". The
-- compress option compresses the table so that it can be iterated over with
-- ipairs.
------------------------------------------------------------------------------------
function p.numData(t, compress)
checkType('numData', 1, t, 'table')
checkType('numData', 2, compress, 'boolean', true)
local ret = {}
for k, v in pairs(t) do
local prefix, num = mw.ustring.match(tostring(k), '^([^0-9]*)([1-9][0-9]*)$')
if num then
num = tonumber(num)
local subtable = ret[num] or {}
if prefix == '' then
-- Positional parameters match the blank string; put them at the start of the subtable instead.
prefix = 1
end
subtable[prefix] = v
ret[num] = subtable
else
local subtable = ret.other or {}
subtable[k] = v
ret.other = subtable
end
end
if compress then
local other = ret.other
ret = p.compressSparseArray(ret)
ret.other = other
end
return ret
end
------------------------------------------------------------------------------------
-- compressSparseArray
--
-- This takes an array with one or more nil values, and removes the nil values
-- while preserving the order, so that the array can be safely traversed with
-- ipairs.
------------------------------------------------------------------------------------
function p.compressSparseArray(t)
checkType('compressSparseArray', 1, t, 'table')
local ret = {}
local nums = p.numKeys(t)
for _, num in ipairs(nums) do
ret[#ret + 1] = t[num]
end
return ret
end
------------------------------------------------------------------------------------
-- sparseIpairs
--
-- This is an iterator for sparse arrays. It can be used like ipairs, but can
-- handle nil values.
------------------------------------------------------------------------------------
function p.sparseIpairs(t)
checkType('sparseIpairs', 1, t, 'table')
local nums = p.numKeys(t)
local i = 0
local lim = #nums
return function ()
i = i + 1
if i <= lim then
local key = nums[i]
return key, t[key]
else
return nil, nil
end
end
end
------------------------------------------------------------------------------------
-- size
--
-- This returns the size of a key/value pair table. It will also work on arrays,
-- but for arrays it is more efficient to use the # operator.
------------------------------------------------------------------------------------
function p.size(t)
checkType('size', 1, t, 'table')
local i = 0
for _ in pairs(t) do
i = i + 1
end
return i
end
local function defaultKeySort(item1, item2)
-- "number" < "string", so numbers will be sorted before strings.
local type1, type2 = type(item1), type(item2)
if type1 ~= type2 then
return type1 < type2
elseif type1 == 'table' or type1 == 'boolean' or type1 == 'function' then
return tostring(item1) < tostring(item2)
else
return item1 < item2
end
end
------------------------------------------------------------------------------------
-- keysToList
--
-- Returns an array of the keys in a table, sorted using either a default
-- comparison function or a custom keySort function.
------------------------------------------------------------------------------------
function p.keysToList(t, keySort, checked)
if not checked then
checkType('keysToList', 1, t, 'table')
checkTypeMulti('keysToList', 2, keySort, {'function', 'boolean', 'nil'})
end
local arr = {}
local index = 1
for k in pairs(t) do
arr[index] = k
index = index + 1
end
if keySort ~= false then
keySort = type(keySort) == 'function' and keySort or defaultKeySort
table.sort(arr, keySort)
end
return arr
end
------------------------------------------------------------------------------------
-- sortedPairs
--
-- Iterates through a table, with the keys sorted using the keysToList function.
-- If there are only numerical keys, sparseIpairs is probably more efficient.
------------------------------------------------------------------------------------
function p.sortedPairs(t, keySort)
checkType('sortedPairs', 1, t, 'table')
checkType('sortedPairs', 2, keySort, 'function', true)
local arr = p.keysToList(t, keySort, true)
local i = 0
return function ()
i = i + 1
local key = arr[i]
if key ~= nil then
return key, t[key]
else
return nil, nil
end
end
end
------------------------------------------------------------------------------------
-- isArray
--
-- Returns true if the given value is a table and all keys are consecutive
-- integers starting at 1.
------------------------------------------------------------------------------------
function p.isArray(v)
if type(v) ~= 'table' then
return false
end
local i = 0
for _ in pairs(v) do
i = i + 1
if v[i] == nil then
return false
end
end
return true
end
------------------------------------------------------------------------------------
-- isArrayLike
--
-- Returns true if the given value is iterable and all keys are consecutive
-- integers starting at 1.
------------------------------------------------------------------------------------
function p.isArrayLike(v)
if not pcall(pairs, v) then
return false
end
local i = 0
for _ in pairs(v) do
i = i + 1
if v[i] == nil then
return false
end
end
return true
end
------------------------------------------------------------------------------------
-- invert
--
-- Transposes the keys and values in an array. For example, {"a", "b", "c"} ->
-- {a = 1, b = 2, c = 3}. Duplicates are not supported (result values refer to
-- the index of the last duplicate) and NaN values are ignored.
------------------------------------------------------------------------------------
function p.invert(arr)
checkType("invert", 1, arr, "table")
local isNan = p.isNan
local map = {}
for i, v in ipairs(arr) do
if not isNan(v) then
map[v] = i
end
end
return map
end
------------------------------------------------------------------------------------
-- listToSet
--
-- Creates a set from the array part of the table. Indexing the set by any of the
-- values of the array returns true. For example, {"a", "b", "c"} ->
-- {a = true, b = true, c = true}. NaN values are ignored as Lua considers them
-- never equal to any value (including other NaNs or even themselves).
------------------------------------------------------------------------------------
function p.listToSet(arr)
checkType("listToSet", 1, arr, "table")
local isNan = p.isNan
local set = {}
for _, v in ipairs(arr) do
if not isNan(v) then
set[v] = true
end
end
return set
end
------------------------------------------------------------------------------------
-- deepCopy
--
-- Recursive deep copy function. Preserves identities of subtables.
------------------------------------------------------------------------------------
local function _deepCopy(orig, includeMetatable, already_seen)
-- Stores copies of tables indexed by the original table.
already_seen = already_seen or {}
local copy = already_seen[orig]
if copy ~= nil then
return copy
end
if type(orig) == 'table' then
copy = {}
for orig_key, orig_value in pairs(orig) do
copy[_deepCopy(orig_key, includeMetatable, already_seen)] = _deepCopy(orig_value, includeMetatable, already_seen)
end
already_seen[orig] = copy
if includeMetatable then
local mt = getmetatable(orig)
if mt ~= nil then
local mt_copy = _deepCopy(mt, includeMetatable, already_seen)
setmetatable(copy, mt_copy)
already_seen[mt] = mt_copy
end
end
else -- number, string, boolean, etc
copy = orig
end
return copy
end
function p.deepCopy(orig, noMetatable, already_seen)
checkType("deepCopy", 3, already_seen, "table", true)
return _deepCopy(orig, not noMetatable, already_seen)
end
------------------------------------------------------------------------------------
-- sparseConcat
--
-- Concatenates all values in the table that are indexed by a number, in order.
-- sparseConcat{a, nil, c, d} => "acd"
-- sparseConcat{nil, b, c, d} => "bcd"
------------------------------------------------------------------------------------
function p.sparseConcat(t, sep, i, j)
local arr = {}
local arr_i = 0
for _, v in p.sparseIpairs(t) do
arr_i = arr_i + 1
arr[arr_i] = v
end
return table.concat(arr, sep, i, j)
end
------------------------------------------------------------------------------------
-- length
--
-- Finds the length of an array, or of a quasi-array with keys such as "data1",
-- "data2", etc., using an exponential search algorithm. It is similar to the
-- operator #, but may return a different value when there are gaps in the array
-- portion of the table. Intended to be used on data loaded with mw.loadData. For
-- other tables, use #.
-- Note: #frame.args in frame object always be set to 0, regardless of the number
-- of unnamed template parameters, so use this function for frame.args.
------------------------------------------------------------------------------------
function p.length(t, prefix)
-- requiring module inline so that [[Module:Exponential search]] which is
-- only needed by this one function doesn't get millions of transclusions
local expSearch = require("Module:Exponential search")
checkType('length', 1, t, 'table')
checkType('length', 2, prefix, 'string', true)
return expSearch(function (i)
local key
if prefix then
key = prefix .. tostring(i)
else
key = i
end
return t[key] ~= nil
end) or 0
end
------------------------------------------------------------------------------------
-- inArray
--
-- Returns true if valueToFind is a member of the array, and false otherwise.
------------------------------------------------------------------------------------
function p.inArray(arr, valueToFind)
checkType("inArray", 1, arr, "table")
-- if valueToFind is nil, error?
for _, v in ipairs(arr) do
if v == valueToFind then
return true
end
end
return false
end
return p
085e7094ac84eb0132ee65822cf3f69cd8ba3d81
Template:Tlx
10
30
65
64
2023-09-14T01:11:33Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
#REDIRECT [[Template:Template link expanded]]
{{Redirect category shell|
{{R from move}}
}}
1fec988ceb46cb324af228aac45d7cd25fcc9008
Template:Template link expanded
10
31
67
66
2023-09-14T01:11:33Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{#Invoke:Template link general|main|code=on}}<noinclude>
{{Documentation|1=Template:Tlg/doc
|content = {{tlg/doc|tlx}}
}}
<!-- Add categories to the /doc subpage, not here! -->
</noinclude>
6c99696fee02f1da368ed20d2504e19bc15b1c13
Module:Template link general
828
32
69
68
2023-09-14T01:11:34Z
Ilovethehitgameomori
2
1 revision imported
Scribunto
text/plain
-- This implements Template:Tlg
local getArgs = require('Module:Arguments').getArgs
local p = {}
-- Is a string non-empty?
local function _ne(s)
return s ~= nil and s ~= ""
end
local nw = mw.text.nowiki
local function addTemplate(s)
local i, _ = s:find(':', 1, true)
if i == nil then
return 'Template:' .. s
end
local ns = s:sub(1, i - 1)
if ns == '' or mw.site.namespaces[ns] then
return s
else
return 'Template:' .. s
end
end
local function trimTemplate(s)
local needle = 'template:'
if s:sub(1, needle:len()):lower() == needle then
return s:sub(needle:len() + 1)
else
return s
end
end
local function linkTitle(args)
if _ne(args.nolink) then
return args['1']
end
local titleObj
local titlePart = '[['
if args['1'] then
-- This handles :Page and other NS
titleObj = mw.title.new(args['1'], 'Template')
else
titleObj = mw.title.getCurrentTitle()
end
titlePart = titlePart .. (titleObj ~= nil and titleObj.fullText or
addTemplate(args['1']))
local textPart = args.alttext
if not _ne(textPart) then
if titleObj ~= nil then
textPart = titleObj:inNamespace("Template") and args['1'] or titleObj.fullText
else
-- redlink
textPart = args['1']
end
end
if _ne(args.subst) then
-- HACK: the ns thing above is probably broken
textPart = 'subst:' .. textPart
end
if _ne(args.brace) then
textPart = nw('{{') .. textPart .. nw('}}')
elseif _ne(args.braceinside) then
textPart = nw('{') .. textPart .. nw('}')
end
titlePart = titlePart .. '|' .. textPart .. ']]'
if _ne(args.braceinside) then
titlePart = nw('{') .. titlePart .. nw('}')
end
return titlePart
end
function p.main(frame)
local args = getArgs(frame, {
trim = true,
removeBlanks = false
})
return p._main(args)
end
function p._main(args)
local bold = _ne(args.bold) or _ne(args.boldlink) or _ne(args.boldname)
local italic = _ne(args.italic) or _ne(args.italics)
local dontBrace = _ne(args.brace) or _ne(args.braceinside)
local code = _ne(args.code) or _ne(args.tt)
local show_result = _ne(args._show_result)
local expand = _ne(args._expand)
-- Build the link part
local titlePart = linkTitle(args)
if bold then titlePart = "'''" .. titlePart .. "'''" end
if _ne(args.nowrapname) then titlePart = '<span class="nowrap">' .. titlePart .. '</span>' end
-- Build the arguments
local textPart = ""
local textPartBuffer = "|"
local codeArguments = {}
local codeArgumentsString = ""
local i = 2
local j = 1
while args[i] do
local val = args[i]
if val ~= "" then
if _ne(args.nowiki) then
-- Unstrip nowiki tags first because calling nw on something that already contains nowiki tags will
-- mangle the nowiki strip marker and result in literal UNIQ...QINU showing up
val = nw(mw.text.unstripNoWiki(val))
end
local k, v = string.match(val, "(.*)=(.*)")
if not k then
codeArguments[j] = val
j = j + 1
else
codeArguments[k] = v
end
codeArgumentsString = codeArgumentsString .. textPartBuffer .. val
if italic then
val = '<span style="font-style:italic;">' .. val .. '</span>'
end
textPart = textPart .. textPartBuffer .. val
end
i = i + 1
end
-- final wrap
local ret = titlePart .. textPart
if not dontBrace then ret = nw('{{') .. ret .. nw('}}') end
if _ne(args.a) then ret = nw('*') .. ' ' .. ret end
if _ne(args.kbd) then ret = '<kbd>' .. ret .. '</kbd>' end
if code then
ret = '<code>' .. ret .. '</code>'
elseif _ne(args.plaincode) then
ret = '<code style="border:none;background:transparent;">' .. ret .. '</code>'
end
if _ne(args.nowrap) then ret = '<span class="nowrap">' .. ret .. '</span>' end
--[[ Wrap as html??
local span = mw.html.create('span')
span:wikitext(ret)
--]]
if _ne(args.debug) then ret = ret .. '\n<pre>' .. mw.text.encode(mw.dumpObject(args)) .. '</pre>' end
if show_result then
local result = mw.getCurrentFrame():expandTemplate{title = addTemplate(args[1]), args = codeArguments}
ret = ret .. " → " .. result
end
if expand then
local query = mw.text.encode('{{' .. addTemplate(args[1]) .. string.gsub(codeArgumentsString, textPartBuffer, "|") .. '}}')
local url = mw.uri.fullUrl('special:ExpandTemplates', 'wpInput=' .. query)
mw.log()
ret = ret .. " [" .. tostring(url) .. "]"
end
return ret
end
return p
c7307fa3959d308a2dd7fd2f5009c1ce6db3d122
Template:Template other
10
33
71
70
2023-09-14T01:11:34Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{#switch:
<!--If no or empty "demospace" parameter then detect namespace-->
{{#if:{{{demospace|}}}
| {{lc: {{{demospace}}} }} <!--Use lower case "demospace"-->
| {{#ifeq:{{NAMESPACE}}|{{ns:Template}}
| template
| other
}}
}}
| template = {{{1|}}}
| other
| #default = {{{2|}}}
}}<!--End switch--><noinclude>
{{documentation}}
<!-- Add categories and interwikis to the /doc subpage, not here! -->
</noinclude>
06fb13d264df967b5232141067eb7d2b67372d76
Template:Clear
10
34
73
72
2023-09-14T01:11:34Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
<div style="clear:{{{1|both}}};"></div><noinclude>
{{documentation}}
</noinclude>
38bab3e3d7fbd3d6800d46556e60bc6bac494d72
Template:Distinguish
10
35
75
74
2023-09-14T01:11:35Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{#invoke:Distinguish|distinguish}}<noinclude><!-- splitting these lines causes {{Documentation}} template to terminate green shading when Distinguish is used in /doc pages. -->
{{Documentation}}
<!-- Add categories to the /doc subpage and interwikis to Wikidata, not here! -->
</noinclude>
f949a4cbfd6eb0ab77b832e69059a40a964b1fd8
Template:Sidebar
10
36
77
76
2023-09-14T01:11:35Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{#invoke:Sidebar|sidebar}}<noinclude>
{{documentation}}</noinclude>
ab2498000a99daf324f656b0badd187b4a3e2b42
Module:Distinguish
828
37
79
78
2023-09-14T01:11:36Z
Ilovethehitgameomori
2
1 revision imported
Scribunto
text/plain
local mHatnote = require('Module:Hatnote')
local mHatlist = require('Module:Hatnote list')
local mArguments --initialize lazily
local mTableTools --initialize lazily
local libraryUtil = require('libraryUtil')
local checkType = libraryUtil.checkType
local p = {}
function p.distinguish(frame)
mArguments = require('Module:Arguments')
mTableTools = require('Module:TableTools')
local args = mArguments.getArgs(frame)
local selfref = args.selfref
local text = args.text
args = mTableTools.compressSparseArray(args)
return p._distinguish(args, text, selfref)
end
function p._distinguish(args, text, selfref)
checkType("_distinguish", 1, args, 'table')
if #args == 0 and not text then return '' end
local text = string.format(
'Not to be confused with %s.',
text or mHatlist.orList(args, true)
)
hnOptions = {selfref = selfref}
return mHatnote._hatnote(text, hnOptions)
end
return p
0364d14af01fc656ad1d898c5036fbd12a7ca938
Module:Effective protection expiry
828
38
81
80
2023-09-14T01:11:36Z
Ilovethehitgameomori
2
1 revision imported
Scribunto
text/plain
local p = {}
-- Returns the expiry of a restriction of an action on a given title, or unknown if it cannot be known.
-- If no title is specified, the title of the page being displayed is used.
function p._main(action, pagename)
local title
if type(pagename) == 'table' and pagename.prefixedText then
title = pagename
elseif pagename then
title = mw.title.new(pagename)
else
title = mw.title.getCurrentTitle()
end
pagename = title.prefixedText
if action == 'autoreview' then
local stabilitySettings = mw.ext.FlaggedRevs.getStabilitySettings(title)
return stabilitySettings and stabilitySettings.expiry or 'unknown'
elseif action ~= 'edit' and action ~= 'move' and action ~= 'create' and action ~= 'upload' then
error( 'First parameter must be one of edit, move, create, upload, autoreview', 2 )
end
local rawExpiry = mw.getCurrentFrame():callParserFunction('PROTECTIONEXPIRY', action, pagename)
if rawExpiry == 'infinity' then
return 'infinity'
elseif rawExpiry == '' then
return 'unknown'
else
local year, month, day, hour, minute, second = rawExpiry:match(
'^(%d%d%d%d)(%d%d)(%d%d)(%d%d)(%d%d)(%d%d)$'
)
if year then
return string.format(
'%s-%s-%sT%s:%s:%s',
year, month, day, hour, minute, second
)
else
error('internal error in Module:Effective protection expiry; malformed expiry timestamp')
end
end
end
setmetatable(p, { __index = function(t, k)
return function(frame)
return t._main(k, frame.args[1])
end
end })
return p
9a8c58dc2667232ed08a9b206a5d89ca8150312b
Module:Effective protection level
828
39
83
82
2023-09-14T01:11:37Z
Ilovethehitgameomori
2
1 revision imported
Scribunto
text/plain
local p = {}
-- Returns the permission required to perform a given action on a given title.
-- If no title is specified, the title of the page being displayed is used.
function p._main(action, pagename)
local title
if type(pagename) == 'table' and pagename.prefixedText then
title = pagename
elseif pagename then
title = mw.title.new(pagename)
else
title = mw.title.getCurrentTitle()
end
pagename = title.prefixedText
if action == 'autoreview' then
local level = mw.ext.FlaggedRevs.getStabilitySettings(title)
level = level and level.autoreview
if level == 'review' then
return 'reviewer'
elseif level ~= '' then
return level
else
return nil -- not '*'. a page not being PC-protected is distinct from it being PC-protected with anyone able to review. also not '', as that would mean PC-protected but nobody can review
end
elseif action ~= 'edit' and action ~= 'move' and action ~= 'create' and action ~= 'upload' and action ~= 'undelete' then
error( 'First parameter must be one of edit, move, create, upload, undelete, autoreview', 2 )
end
if title.namespace == 8 then -- MediaWiki namespace
if title.text:sub(-3) == '.js' or title.text:sub(-4) == '.css' or title.contentModel == 'javascript' or title.contentModel == 'css' then -- site JS or CSS page
return 'interfaceadmin'
else -- any non-JS/CSS MediaWiki page
return 'sysop'
end
elseif title.namespace == 2 and title.isSubpage then
if title.contentModel == 'javascript' or title.contentModel == 'css' then -- user JS or CSS page
return 'interfaceadmin'
elseif title.contentModel == 'json' then -- user JSON page
return 'sysop'
end
end
if action == 'undelete' then
return 'sysop'
end
local level = title.protectionLevels[action] and title.protectionLevels[action][1]
if level == 'sysop' or level == 'editprotected' then
return 'sysop'
elseif title.cascadingProtection.restrictions[action] and title.cascadingProtection.restrictions[action][1] then -- used by a cascading-protected page
return 'sysop'
elseif level == 'templateeditor' then
return 'templateeditor'
elseif action == 'move' then
local blacklistentry = mw.ext.TitleBlacklist.test('edit', pagename) -- Testing action edit is correct, since this is for the source page. The target page name gets tested with action move.
if blacklistentry and not blacklistentry.params.autoconfirmed then
return 'templateeditor'
elseif title.namespace == 6 then
return 'filemover'
elseif level == 'extendedconfirmed' then
return 'extendedconfirmed'
else
return 'autoconfirmed'
end
end
local blacklistentry = mw.ext.TitleBlacklist.test(action, pagename)
if blacklistentry then
if not blacklistentry.params.autoconfirmed then
return 'templateeditor'
elseif level == 'extendedconfirmed' then
return 'extendedconfirmed'
else
return 'autoconfirmed'
end
elseif level == 'editsemiprotected' then -- create-semiprotected pages return this for some reason
return 'autoconfirmed'
elseif level then
return level
elseif action == 'upload' then
return 'autoconfirmed'
elseif action == 'create' and title.namespace % 2 == 0 and title.namespace ~= 118 then -- You need to be registered, but not autoconfirmed, to create non-talk pages other than drafts
return 'user'
else
return '*'
end
end
setmetatable(p, { __index = function(t, k)
return function(frame)
return t._main(k, frame.args[1])
end
end })
return p
70256a489edf6be9808031b14a7e3ef3e025da97
Module:File link
828
40
85
84
2023-09-14T01:11:38Z
Ilovethehitgameomori
2
1 revision imported
Scribunto
text/plain
-- This module provides a library for formatting file wikilinks.
local yesno = require('Module:Yesno')
local checkType = require('libraryUtil').checkType
local p = {}
function p._main(args)
checkType('_main', 1, args, 'table')
-- This is basically libraryUtil.checkTypeForNamedArg, but we are rolling our
-- own function to get the right error level.
local function checkArg(key, val, level)
if type(val) ~= 'string' then
error(string.format(
"type error in '%s' parameter of '_main' (expected string, got %s)",
key, type(val)
), level)
end
end
local ret = {}
-- Adds a positional parameter to the buffer.
local function addPositional(key)
local val = args[key]
if not val then
return nil
end
checkArg(key, val, 4)
ret[#ret + 1] = val
end
-- Adds a named parameter to the buffer. We assume that the parameter name
-- is the same as the argument key.
local function addNamed(key)
local val = args[key]
if not val then
return nil
end
checkArg(key, val, 4)
ret[#ret + 1] = key .. '=' .. val
end
-- Filename
checkArg('file', args.file, 3)
ret[#ret + 1] = 'File:' .. args.file
-- Format
if args.format then
checkArg('format', args.format)
if args.formatfile then
checkArg('formatfile', args.formatfile)
ret[#ret + 1] = args.format .. '=' .. args.formatfile
else
ret[#ret + 1] = args.format
end
end
-- Border
if yesno(args.border) then
ret[#ret + 1] = 'border'
end
addPositional('location')
addPositional('alignment')
addPositional('size')
addNamed('upright')
addNamed('link')
addNamed('alt')
addNamed('page')
addNamed('class')
addNamed('lang')
addNamed('start')
addNamed('end')
addNamed('thumbtime')
addPositional('caption')
return string.format('[[%s]]', table.concat(ret, '|'))
end
function p.main(frame)
local origArgs = require('Module:Arguments').getArgs(frame, {
wrappers = 'Template:File link'
})
if not origArgs.file then
error("'file' parameter missing from [[Template:File link]]", 0)
end
-- Copy the arguments that were passed to a new table to avoid looking up
-- every possible parameter in the frame object.
local args = {}
for k, v in pairs(origArgs) do
-- Make _BLANK a special argument to add a blank parameter. For use in
-- conditional templates etc. it is useful for blank arguments to be
-- ignored, but we still need a way to specify them so that we can do
-- things like [[File:Example.png|link=]].
if v == '_BLANK' then
v = ''
end
args[k] = v
end
return p._main(args)
end
return p
66925f088d11530f2482f04181a3baaaa0ad3d0c
Module:Format link
828
41
87
86
2023-09-14T01:11:39Z
Ilovethehitgameomori
2
1 revision imported
Scribunto
text/plain
--------------------------------------------------------------------------------
-- Format link
--
-- Makes a wikilink from the given link and display values. Links are escaped
-- with colons if necessary, and links to sections are detected and displayed
-- with " § " as a separator rather than the standard MediaWiki "#". Used in
-- the {{format link}} template.
--------------------------------------------------------------------------------
local libraryUtil = require('libraryUtil')
local checkType = libraryUtil.checkType
local checkTypeForNamedArg = libraryUtil.checkTypeForNamedArg
local mArguments -- lazily initialise [[Module:Arguments]]
local mError -- lazily initialise [[Module:Error]]
local yesno -- lazily initialise [[Module:Yesno]]
local p = {}
--------------------------------------------------------------------------------
-- Helper functions
--------------------------------------------------------------------------------
local function getArgs(frame)
-- Fetches the arguments from the parent frame. Whitespace is trimmed and
-- blanks are removed.
mArguments = require('Module:Arguments')
return mArguments.getArgs(frame, {parentOnly = true})
end
local function removeInitialColon(s)
-- Removes the initial colon from a string, if present.
return s:match('^:?(.*)')
end
local function maybeItalicize(s, shouldItalicize)
-- Italicize s if s is a string and the shouldItalicize parameter is true.
if s and shouldItalicize then
return '<i>' .. s .. '</i>'
else
return s
end
end
local function parseLink(link)
-- Parse a link and return a table with the link's components.
-- These components are:
-- - link: the link, stripped of any initial colon (always present)
-- - page: the page name (always present)
-- - section: the page name (may be nil)
-- - display: the display text, if manually entered after a pipe (may be nil)
link = removeInitialColon(link)
-- Find whether a faux display value has been added with the {{!}} magic
-- word.
local prePipe, display = link:match('^(.-)|(.*)$')
link = prePipe or link
-- Find the page, if it exists.
-- For links like [[#Bar]], the page will be nil.
local preHash, postHash = link:match('^(.-)#(.*)$')
local page
if not preHash then
-- We have a link like [[Foo]].
page = link
elseif preHash ~= '' then
-- We have a link like [[Foo#Bar]].
page = preHash
end
-- Find the section, if it exists.
local section
if postHash and postHash ~= '' then
section = postHash
end
return {
link = link,
page = page,
section = section,
display = display,
}
end
local function formatDisplay(parsed, options)
-- Formats a display string based on a parsed link table (matching the
-- output of parseLink) and an options table (matching the input options for
-- _formatLink).
local page = maybeItalicize(parsed.page, options.italicizePage)
local section = maybeItalicize(parsed.section, options.italicizeSection)
if (not section) then
return page
elseif (not page) then
return mw.ustring.format('§ %s', section)
else
return mw.ustring.format('%s § %s', page, section)
end
end
local function missingArgError(target)
mError = require('Module:Error')
return mError.error{message =
'Error: no link or target specified! ([[' .. target .. '#Errors|help]])'
}
end
--------------------------------------------------------------------------------
-- Main functions
--------------------------------------------------------------------------------
function p.formatLink(frame)
-- The formatLink export function, for use in templates.
yesno = require('Module:Yesno')
local args = getArgs(frame)
local link = args[1] or args.link
local target = args[3] or args.target
if not (link or target) then
return missingArgError('Template:Format link')
end
return p._formatLink{
link = link,
display = args[2] or args.display,
target = target,
italicizePage = yesno(args.italicizepage),
italicizeSection = yesno(args.italicizesection),
categorizeMissing = args.categorizemissing
}
end
function p._formatLink(options)
-- The formatLink export function, for use in modules.
checkType('_formatLink', 1, options, 'table')
local function check(key, expectedType) --for brevity
checkTypeForNamedArg(
'_formatLink', key, options[key], expectedType or 'string', true
)
end
check('link')
check('display')
check('target')
check('italicizePage', 'boolean')
check('italicizeSection', 'boolean')
check('categorizeMissing')
-- Normalize link and target and check that at least one is present
if options.link == '' then options.link = nil end
if options.target == '' then options.target = nil end
if not (options.link or options.target) then
return missingArgError('Module:Format link')
end
local parsed = parseLink(options.link)
local display = options.display or parsed.display
local catMissing = options.categorizeMissing
local category = ''
-- Find the display text
if not display then display = formatDisplay(parsed, options) end
-- Handle the target option if present
if options.target then
local parsedTarget = parseLink(options.target)
parsed.link = parsedTarget.link
parsed.page = parsedTarget.page
end
-- Test if page exists if a diagnostic category is specified
if catMissing and (mw.ustring.len(catMissing) > 0) then
local title = nil
if parsed.page then title = mw.title.new(parsed.page) end
if title and (not title.isExternal) then
local success, exists = pcall(function() return title.exists end)
if success and not exists then
category = mw.ustring.format('[[Category:%s]]', catMissing)
end
end
end
-- Format the result as a link
if parsed.link == display then
return mw.ustring.format('[[:%s]]%s', parsed.link, category)
else
return mw.ustring.format('[[:%s|%s]]%s', parsed.link, display, category)
end
end
--------------------------------------------------------------------------------
-- Derived convenience functions
--------------------------------------------------------------------------------
function p.formatPages(options, pages)
-- Formats an array of pages using formatLink and the given options table,
-- and returns it as an array. Nil values are not allowed.
local ret = {}
for i, page in ipairs(pages) do
ret[i] = p._formatLink{
link = page,
categorizeMissing = options.categorizeMissing,
italicizePage = options.italicizePage,
italicizeSection = options.italicizeSection
}
end
return ret
end
return p
1253bdd2683ee4badc33856bfd5499b09a7dca1f
Module:Hatnote
828
42
89
88
2023-09-14T01:11:40Z
Ilovethehitgameomori
2
1 revision imported
Scribunto
text/plain
--------------------------------------------------------------------------------
-- Module:Hatnote --
-- --
-- This module produces hatnote links and links to related articles. It --
-- implements the {{hatnote}} and {{format link}} meta-templates and includes --
-- helper functions for other Lua hatnote modules. --
--------------------------------------------------------------------------------
local libraryUtil = require('libraryUtil')
local checkType = libraryUtil.checkType
local checkTypeForNamedArg = libraryUtil.checkTypeForNamedArg
local mArguments -- lazily initialise [[Module:Arguments]]
local yesno -- lazily initialise [[Module:Yesno]]
local formatLink -- lazily initialise [[Module:Format link]] ._formatLink
local p = {}
--------------------------------------------------------------------------------
-- Helper functions
--------------------------------------------------------------------------------
local function getArgs(frame)
-- Fetches the arguments from the parent frame. Whitespace is trimmed and
-- blanks are removed.
mArguments = require('Module:Arguments')
return mArguments.getArgs(frame, {parentOnly = true})
end
local function removeInitialColon(s)
-- Removes the initial colon from a string, if present.
return s:match('^:?(.*)')
end
function p.defaultClasses(inline)
-- Provides the default hatnote classes as a space-separated string; useful
-- for hatnote-manipulation modules like [[Module:Hatnote group]].
return
(inline == 1 and 'hatnote-inline' or 'hatnote') .. ' ' ..
'navigation-not-searchable'
end
function p.disambiguate(page, disambiguator)
-- Formats a page title with a disambiguation parenthetical,
-- i.e. "Example" → "Example (disambiguation)".
checkType('disambiguate', 1, page, 'string')
checkType('disambiguate', 2, disambiguator, 'string', true)
disambiguator = disambiguator or 'disambiguation'
return mw.ustring.format('%s (%s)', page, disambiguator)
end
function p.findNamespaceId(link, removeColon)
-- Finds the namespace id (namespace number) of a link or a pagename. This
-- function will not work if the link is enclosed in double brackets. Colons
-- are trimmed from the start of the link by default. To skip colon
-- trimming, set the removeColon parameter to false.
checkType('findNamespaceId', 1, link, 'string')
checkType('findNamespaceId', 2, removeColon, 'boolean', true)
if removeColon ~= false then
link = removeInitialColon(link)
end
local namespace = link:match('^(.-):')
if namespace then
local nsTable = mw.site.namespaces[namespace]
if nsTable then
return nsTable.id
end
end
return 0
end
function p.makeWikitextError(msg, helpLink, addTrackingCategory, title)
-- Formats an error message to be returned to wikitext. If
-- addTrackingCategory is not false after being returned from
-- [[Module:Yesno]], and if we are not on a talk page, a tracking category
-- is added.
checkType('makeWikitextError', 1, msg, 'string')
checkType('makeWikitextError', 2, helpLink, 'string', true)
yesno = require('Module:Yesno')
title = title or mw.title.getCurrentTitle()
-- Make the help link text.
local helpText
if helpLink then
helpText = ' ([[' .. helpLink .. '|help]])'
else
helpText = ''
end
-- Make the category text.
local category
if not title.isTalkPage -- Don't categorise talk pages
and title.namespace ~= 2 -- Don't categorise userspace
and yesno(addTrackingCategory) ~= false -- Allow opting out
then
category = 'Hatnote templates with errors'
category = mw.ustring.format(
'[[%s:%s]]',
mw.site.namespaces[14].name,
category
)
else
category = ''
end
return mw.ustring.format(
'<strong class="error">Error: %s%s.</strong>%s',
msg,
helpText,
category
)
end
local curNs = mw.title.getCurrentTitle().namespace
p.missingTargetCat =
--Default missing target category, exported for use in related modules
((curNs == 0) or (curNs == 14)) and
'Articles with hatnote templates targeting a nonexistent page' or nil
function p.quote(title)
--Wraps titles in quotation marks. If the title starts/ends with a quotation
--mark, kerns that side as with {{-'}}
local quotationMarks = {
["'"]=true, ['"']=true, ['“']=true, ["‘"]=true, ['”']=true, ["’"]=true
}
local quoteLeft, quoteRight = -- Test if start/end are quotation marks
quotationMarks[string.sub(title, 1, 1)],
quotationMarks[string.sub(title, -1, -1)]
if quoteLeft or quoteRight then
title = mw.html.create("span"):wikitext(title)
end
if quoteLeft then title:css("padding-left", "0.15em") end
if quoteRight then title:css("padding-right", "0.15em") end
return '"' .. tostring(title) .. '"'
end
--------------------------------------------------------------------------------
-- Hatnote
--
-- Produces standard hatnote text. Implements the {{hatnote}} template.
--------------------------------------------------------------------------------
function p.hatnote(frame)
local args = getArgs(frame)
local s = args[1]
if not s then
return p.makeWikitextError(
'no text specified',
'Template:Hatnote#Errors',
args.category
)
end
return p._hatnote(s, {
extraclasses = args.extraclasses,
selfref = args.selfref
})
end
function p._hatnote(s, options)
checkType('_hatnote', 1, s, 'string')
checkType('_hatnote', 2, options, 'table', true)
options = options or {}
local inline = options.inline
local hatnote = mw.html.create(inline == 1 and 'span' or 'div')
local extraclasses
if type(options.extraclasses) == 'string' then
extraclasses = options.extraclasses
end
hatnote
:attr('role', 'note')
:addClass(p.defaultClasses(inline))
:addClass(extraclasses)
:addClass(options.selfref and 'selfref' or nil)
:wikitext(s)
return mw.getCurrentFrame():extensionTag{
name = 'templatestyles', args = { src = 'Module:Hatnote/styles.css' }
} .. tostring(hatnote)
end
return p
3ae1ed7094c5005ca0896395ec9a587287a0bef1
Module:Hatnote list
828
44
93
92
2023-09-14T01:11:41Z
Ilovethehitgameomori
2
1 revision imported
Scribunto
text/plain
--------------------------------------------------------------------------------
-- Module:Hatnote list --
-- --
-- This module produces and formats lists for use in hatnotes. In particular, --
-- it implements the for-see list, i.e. lists of "For X, see Y" statements, --
-- as used in {{about}}, {{redirect}}, and their variants. Also introduced --
-- are andList & orList helpers for formatting lists with those conjunctions. --
--------------------------------------------------------------------------------
local mArguments --initialize lazily
local mFormatLink = require('Module:Format link')
local mHatnote = require('Module:Hatnote')
local libraryUtil = require('libraryUtil')
local checkType = libraryUtil.checkType
local p = {}
--------------------------------------------------------------------------------
-- List stringification helper functions
--
-- These functions are used for stringifying lists, usually page lists inside
-- the "Y" portion of "For X, see Y" for-see items.
--------------------------------------------------------------------------------
--default options table used across the list stringification functions
local stringifyListDefaultOptions = {
conjunction = "and",
separator = ",",
altSeparator = ";",
space = " ",
formatted = false
}
--Searches display text only
local function searchDisp(haystack, needle)
return string.find(
string.sub(haystack, (string.find(haystack, '|') or 0) + 1), needle
)
end
-- Stringifies a list generically; probably shouldn't be used directly
local function stringifyList(list, options)
-- Type-checks, defaults, and a shortcut
checkType("stringifyList", 1, list, "table")
if #list == 0 then return nil end
checkType("stringifyList", 2, options, "table", true)
options = options or {}
for k, v in pairs(stringifyListDefaultOptions) do
if options[k] == nil then options[k] = v end
end
local s = options.space
-- Format the list if requested
if options.formatted then
list = mFormatLink.formatPages(
{categorizeMissing = mHatnote.missingTargetCat}, list
)
end
-- Set the separator; if any item contains it, use the alternate separator
local separator = options.separator
for k, v in pairs(list) do
if searchDisp(v, separator) then
separator = options.altSeparator
break
end
end
-- Set the conjunction, apply Oxford comma, and force a comma if #1 has "§"
local conjunction = s .. options.conjunction .. s
if #list == 2 and searchDisp(list[1], "§") or #list > 2 then
conjunction = separator .. conjunction
end
-- Return the formatted string
return mw.text.listToText(list, separator .. s, conjunction)
end
--DRY function
function p.conjList (conj, list, fmt)
return stringifyList(list, {conjunction = conj, formatted = fmt})
end
-- Stringifies lists with "and" or "or"
function p.andList (...) return p.conjList("and", ...) end
function p.orList (...) return p.conjList("or", ...) end
--------------------------------------------------------------------------------
-- For see
--
-- Makes a "For X, see [[Y]]." list from raw parameters. Intended for the
-- {{about}} and {{redirect}} templates and their variants.
--------------------------------------------------------------------------------
--default options table used across the forSee family of functions
local forSeeDefaultOptions = {
andKeyword = 'and',
title = mw.title.getCurrentTitle().text,
otherText = 'other uses',
forSeeForm = 'For %s, see %s.',
}
--Collapses duplicate punctuation
local function punctuationCollapse (text)
local replacements = {
["%.%.$"] = ".",
["%?%.$"] = "?",
["%!%.$"] = "!",
["%.%]%]%.$"] = ".]]",
["%?%]%]%.$"] = "?]]",
["%!%]%]%.$"] = "!]]"
}
for k, v in pairs(replacements) do text = string.gsub(text, k, v) end
return text
end
-- Structures arguments into a table for stringification, & options
function p.forSeeArgsToTable (args, from, options)
-- Type-checks and defaults
checkType("forSeeArgsToTable", 1, args, 'table')
checkType("forSeeArgsToTable", 2, from, 'number', true)
from = from or 1
checkType("forSeeArgsToTable", 3, options, 'table', true)
options = options or {}
for k, v in pairs(forSeeDefaultOptions) do
if options[k] == nil then options[k] = v end
end
-- maxArg's gotten manually because getArgs() and table.maxn aren't friends
local maxArg = 0
for k, v in pairs(args) do
if type(k) == 'number' and k > maxArg then maxArg = k end
end
-- Structure the data out from the parameter list:
-- * forTable is the wrapper table, with forRow rows
-- * Rows are tables of a "use" string & a "pages" table of pagename strings
-- * Blanks are left empty for defaulting elsewhere, but can terminate list
local forTable = {}
local i = from
local terminated = false
-- If there is extra text, and no arguments are given, give nil value
-- to not produce default of "For other uses, see foo (disambiguation)"
if options.extratext and i > maxArg then return nil end
-- Loop to generate rows
repeat
-- New empty row
local forRow = {}
-- On blank use, assume list's ended & break at end of this loop
forRow.use = args[i]
if not args[i] then terminated = true end
-- New empty list of pages
forRow.pages = {}
-- Insert first pages item if present
table.insert(forRow.pages, args[i + 1])
-- If the param after next is "and", do inner loop to collect params
-- until the "and"'s stop. Blanks are ignored: "1|and||and|3" → {1, 3}
while args[i + 2] == options.andKeyword do
if args[i + 3] then
table.insert(forRow.pages, args[i + 3])
end
-- Increment to next "and"
i = i + 2
end
-- Increment to next use
i = i + 2
-- Append the row
table.insert(forTable, forRow)
until terminated or i > maxArg
return forTable
end
-- Stringifies a table as formatted by forSeeArgsToTable
function p.forSeeTableToString (forSeeTable, options)
-- Type-checks and defaults
checkType("forSeeTableToString", 1, forSeeTable, "table", true)
checkType("forSeeTableToString", 2, options, "table", true)
options = options or {}
for k, v in pairs(forSeeDefaultOptions) do
if options[k] == nil then options[k] = v end
end
-- Stringify each for-see item into a list
local strList = {}
if forSeeTable then
for k, v in pairs(forSeeTable) do
local useStr = v.use or options.otherText
local pagesStr =
p.andList(v.pages, true) or
mFormatLink._formatLink{
categorizeMissing = mHatnote.missingTargetCat,
link = mHatnote.disambiguate(options.title)
}
local forSeeStr = string.format(options.forSeeForm, useStr, pagesStr)
forSeeStr = punctuationCollapse(forSeeStr)
table.insert(strList, forSeeStr)
end
end
if options.extratext then table.insert(strList, punctuationCollapse(options.extratext..'.')) end
-- Return the concatenated list
return table.concat(strList, ' ')
end
-- Produces a "For X, see [[Y]]" string from arguments. Expects index gaps
-- but not blank/whitespace values. Ignores named args and args < "from".
function p._forSee (args, from, options)
local forSeeTable = p.forSeeArgsToTable(args, from, options)
return p.forSeeTableToString(forSeeTable, options)
end
-- As _forSee, but uses the frame.
function p.forSee (frame, from, options)
mArguments = require('Module:Arguments')
return p._forSee(mArguments.getArgs(frame), from, options)
end
return p
d0828422b1aa0d0d0092d699d059c9e882260398
Module:Navbar
828
45
95
94
2023-09-14T01:11:41Z
Ilovethehitgameomori
2
1 revision imported
Scribunto
text/plain
local p = {}
local cfg = mw.loadData('Module:Navbar/configuration')
local function get_title_arg(is_collapsible, template)
local title_arg = 1
if is_collapsible then title_arg = 2 end
if template then title_arg = 'template' end
return title_arg
end
local function choose_links(template, args)
-- The show table indicates the default displayed items.
-- view, talk, edit, hist, move, watch
-- TODO: Move to configuration.
local show = {true, true, true, false, false, false}
if template then
show[2] = false
show[3] = false
local index = {t = 2, d = 2, e = 3, h = 4, m = 5, w = 6,
talk = 2, edit = 3, hist = 4, move = 5, watch = 6}
-- TODO: Consider removing TableTools dependency.
for _, v in ipairs(require ('Module:TableTools').compressSparseArray(args)) do
local num = index[v]
if num then show[num] = true end
end
end
local remove_edit_link = args.noedit
if remove_edit_link then show[3] = false end
return show
end
local function add_link(link_description, ul, is_mini, font_style)
local l
if link_description.url then
l = {'[', '', ']'}
else
l = {'[[', '|', ']]'}
end
ul:tag('li')
:addClass('nv-' .. link_description.full)
:wikitext(l[1] .. link_description.link .. l[2])
:tag(is_mini and 'abbr' or 'span')
:attr('title', link_description.html_title)
:cssText(font_style)
:wikitext(is_mini and link_description.mini or link_description.full)
:done()
:wikitext(l[3])
:done()
end
local function make_list(title_text, has_brackets, displayed_links, is_mini, font_style)
local title = mw.title.new(mw.text.trim(title_text), cfg.title_namespace)
if not title then
error(cfg.invalid_title .. title_text)
end
local talkpage = title.talkPageTitle and title.talkPageTitle.fullText or ''
-- TODO: Get link_descriptions and show into the configuration module.
-- link_descriptions should be easier...
local link_descriptions = {
{ ['mini'] = 'v', ['full'] = 'view', ['html_title'] = 'View this template',
['link'] = title.fullText, ['url'] = false },
{ ['mini'] = 't', ['full'] = 'talk', ['html_title'] = 'Discuss this template',
['link'] = talkpage, ['url'] = false },
{ ['mini'] = 'e', ['full'] = 'edit', ['html_title'] = 'Edit this template',
['link'] = title:fullUrl('action=edit'), ['url'] = true },
{ ['mini'] = 'h', ['full'] = 'hist', ['html_title'] = 'History of this template',
['link'] = title:fullUrl('action=history'), ['url'] = true },
{ ['mini'] = 'm', ['full'] = 'move', ['html_title'] = 'Move this template',
['link'] = mw.title.new('Special:Movepage'):fullUrl('target='..title.fullText), ['url'] = true },
{ ['mini'] = 'w', ['full'] = 'watch', ['html_title'] = 'Watch this template',
['link'] = title:fullUrl('action=watch'), ['url'] = true }
}
local ul = mw.html.create('ul')
if has_brackets then
ul:addClass(cfg.classes.brackets)
:cssText(font_style)
end
for i, _ in ipairs(displayed_links) do
if displayed_links[i] then add_link(link_descriptions[i], ul, is_mini, font_style) end
end
return ul:done()
end
function p._navbar(args)
-- TODO: We probably don't need both fontstyle and fontcolor...
local font_style = args.fontstyle
local font_color = args.fontcolor
local is_collapsible = args.collapsible
local is_mini = args.mini
local is_plain = args.plain
local collapsible_class = nil
if is_collapsible then
collapsible_class = cfg.classes.collapsible
if not is_plain then is_mini = 1 end
if font_color then
font_style = (font_style or '') .. '; color: ' .. font_color .. ';'
end
end
local navbar_style = args.style
local div = mw.html.create():tag('div')
div
:addClass(cfg.classes.navbar)
:addClass(cfg.classes.plainlinks)
:addClass(cfg.classes.horizontal_list)
:addClass(collapsible_class) -- we made the determination earlier
:cssText(navbar_style)
if is_mini then div:addClass(cfg.classes.mini) end
local box_text = (args.text or cfg.box_text) .. ' '
-- the concatenated space guarantees the box text is separated
if not (is_mini or is_plain) then
div
:tag('span')
:addClass(cfg.classes.box_text)
:cssText(font_style)
:wikitext(box_text)
end
local template = args.template
local displayed_links = choose_links(template, args)
local has_brackets = args.brackets
local title_arg = get_title_arg(is_collapsible, template)
local title_text = args[title_arg] or (':' .. mw.getCurrentFrame():getParent():getTitle())
local list = make_list(title_text, has_brackets, displayed_links, is_mini, font_style)
div:node(list)
if is_collapsible then
local title_text_class
if is_mini then
title_text_class = cfg.classes.collapsible_title_mini
else
title_text_class = cfg.classes.collapsible_title_full
end
div:done()
:tag('div')
:addClass(title_text_class)
:cssText(font_style)
:wikitext(args[1])
end
local frame = mw.getCurrentFrame()
-- hlist -> navbar is best-effort to preserve old Common.css ordering.
return frame:extensionTag{
name = 'templatestyles', args = { src = cfg.hlist_templatestyles }
} .. frame:extensionTag{
name = 'templatestyles', args = { src = cfg.templatestyles }
} .. tostring(div:done())
end
function p.navbar(frame)
return p._navbar(require('Module:Arguments').getArgs(frame))
end
return p
79f907e59eaa8bbf8dd50bb751933ebeaaa7eb17
Module:Navbar/configuration
828
46
97
96
2023-09-14T01:11:42Z
Ilovethehitgameomori
2
1 revision imported
Scribunto
text/plain
return {
['templatestyles'] = 'Module:Navbar/styles.css',
['hlist_templatestyles'] = 'Hlist/styles.css',
['box_text'] = 'This box: ', -- default text box when not plain or mini
['title_namespace'] = 'Template', -- namespace to default to for title
['invalid_title'] = 'Invalid title ',
['classes'] = { -- set a line to nil if you don't want it
['navbar'] = 'navbar',
['plainlinks'] = 'plainlinks', -- plainlinks
['horizontal_list'] = 'hlist', -- horizontal list class
['mini'] = 'navbar-mini', -- class indicating small links in the navbar
['this_box'] = 'navbar-boxtext',
['brackets'] = 'navbar-brackets',
-- 'collapsible' is the key for a class to indicate the navbar is
-- setting up the collapsible element in addition to the normal
-- navbar.
['collapsible'] = 'navbar-collapse',
['collapsible_title_mini'] = 'navbar-ct-mini',
['collapsible_title_full'] = 'navbar-ct-full'
}
}
b007c336b17ec4bcd4d5a9dca9f8cba301662b55
Module:Protection banner
828
48
101
100
2023-09-14T01:11:43Z
Ilovethehitgameomori
2
1 revision imported
Scribunto
text/plain
-- This module implements {{pp-meta}} and its daughter templates such as
-- {{pp-dispute}}, {{pp-vandalism}} and {{pp-sock}}.
-- Initialise necessary modules.
require('strict')
local makeFileLink = require('Module:File link')._main
local effectiveProtectionLevel = require('Module:Effective protection level')._main
local effectiveProtectionExpiry = require('Module:Effective protection expiry')._main
local yesno = require('Module:Yesno')
-- Lazily initialise modules and objects we don't always need.
local getArgs, makeMessageBox, lang
-- Set constants.
local CONFIG_MODULE = 'Module:Protection banner/config'
--------------------------------------------------------------------------------
-- Helper functions
--------------------------------------------------------------------------------
local function makeCategoryLink(cat, sort)
if cat then
return string.format(
'[[%s:%s|%s]]',
mw.site.namespaces[14].name,
cat,
sort
)
end
end
-- Validation function for the expiry and the protection date
local function validateDate(dateString, dateType)
if not lang then
lang = mw.language.getContentLanguage()
end
local success, result = pcall(lang.formatDate, lang, 'U', dateString)
if success then
result = tonumber(result)
if result then
return result
end
end
error(string.format(
'invalid %s: %s',
dateType,
tostring(dateString)
), 4)
end
local function makeFullUrl(page, query, display)
return string.format(
'[%s %s]',
tostring(mw.uri.fullUrl(page, query)),
display
)
end
-- Given a directed graph formatted as node -> table of direct successors,
-- get a table of all nodes reachable from a given node (though always
-- including the given node).
local function getReachableNodes(graph, start)
local toWalk, retval = {[start] = true}, {}
while true do
-- Can't use pairs() since we're adding and removing things as we're iterating
local k = next(toWalk) -- This always gets the "first" key
if k == nil then
return retval
end
toWalk[k] = nil
retval[k] = true
for _,v in ipairs(graph[k]) do
if not retval[v] then
toWalk[v] = true
end
end
end
end
--------------------------------------------------------------------------------
-- Protection class
--------------------------------------------------------------------------------
local Protection = {}
Protection.__index = Protection
Protection.supportedActions = {
edit = true,
move = true,
autoreview = true,
upload = true
}
Protection.bannerConfigFields = {
'text',
'explanation',
'tooltip',
'alt',
'link',
'image'
}
function Protection.new(args, cfg, title)
local obj = {}
obj._cfg = cfg
obj.title = title or mw.title.getCurrentTitle()
-- Set action
if not args.action then
obj.action = 'edit'
elseif Protection.supportedActions[args.action] then
obj.action = args.action
else
error(string.format(
'invalid action: %s',
tostring(args.action)
), 3)
end
-- Set level
obj.level = args.demolevel or effectiveProtectionLevel(obj.action, obj.title)
if not obj.level or (obj.action == 'move' and obj.level == 'autoconfirmed') then
-- Users need to be autoconfirmed to move pages anyway, so treat
-- semi-move-protected pages as unprotected.
obj.level = '*'
end
-- Set expiry
local effectiveExpiry = effectiveProtectionExpiry(obj.action, obj.title)
if effectiveExpiry == 'infinity' then
obj.expiry = 'indef'
elseif effectiveExpiry ~= 'unknown' then
obj.expiry = validateDate(effectiveExpiry, 'expiry date')
end
-- Set reason
if args[1] then
obj.reason = mw.ustring.lower(args[1])
if obj.reason:find('|') then
error('reasons cannot contain the pipe character ("|")', 3)
end
end
-- Set protection date
if args.date then
obj.protectionDate = validateDate(args.date, 'protection date')
end
-- Set banner config
do
obj.bannerConfig = {}
local configTables = {}
if cfg.banners[obj.action] then
configTables[#configTables + 1] = cfg.banners[obj.action][obj.reason]
end
if cfg.defaultBanners[obj.action] then
configTables[#configTables + 1] = cfg.defaultBanners[obj.action][obj.level]
configTables[#configTables + 1] = cfg.defaultBanners[obj.action].default
end
configTables[#configTables + 1] = cfg.masterBanner
for i, field in ipairs(Protection.bannerConfigFields) do
for j, t in ipairs(configTables) do
if t[field] then
obj.bannerConfig[field] = t[field]
break
end
end
end
end
return setmetatable(obj, Protection)
end
function Protection:isUserScript()
-- Whether the page is a user JavaScript or CSS page.
local title = self.title
return title.namespace == 2 and (
title.contentModel == 'javascript' or title.contentModel == 'css'
)
end
function Protection:isProtected()
return self.level ~= '*'
end
function Protection:shouldShowLock()
-- Whether we should output a banner/padlock
return self:isProtected() and not self:isUserScript()
end
-- Whether this page needs a protection category.
Protection.shouldHaveProtectionCategory = Protection.shouldShowLock
function Protection:isTemporary()
return type(self.expiry) == 'number'
end
function Protection:makeProtectionCategory()
if not self:shouldHaveProtectionCategory() then
return ''
end
local cfg = self._cfg
local title = self.title
-- Get the expiry key fragment.
local expiryFragment
if self.expiry == 'indef' then
expiryFragment = self.expiry
elseif type(self.expiry) == 'number' then
expiryFragment = 'temp'
end
-- Get the namespace key fragment.
local namespaceFragment = cfg.categoryNamespaceKeys[title.namespace]
if not namespaceFragment and title.namespace % 2 == 1 then
namespaceFragment = 'talk'
end
-- Define the order that key fragments are tested in. This is done with an
-- array of tables containing the value to be tested, along with its
-- position in the cfg.protectionCategories table.
local order = {
{val = expiryFragment, keypos = 1},
{val = namespaceFragment, keypos = 2},
{val = self.reason, keypos = 3},
{val = self.level, keypos = 4},
{val = self.action, keypos = 5}
}
--[[
-- The old protection templates used an ad-hoc protection category system,
-- with some templates prioritising namespaces in their categories, and
-- others prioritising the protection reason. To emulate this in this module
-- we use the config table cfg.reasonsWithNamespacePriority to set the
-- reasons for which namespaces have priority over protection reason.
-- If we are dealing with one of those reasons, move the namespace table to
-- the end of the order table, i.e. give it highest priority. If not, the
-- reason should have highest priority, so move that to the end of the table
-- instead.
--]]
table.insert(order, table.remove(order, self.reason and cfg.reasonsWithNamespacePriority[self.reason] and 2 or 3))
--[[
-- Define the attempt order. Inactive subtables (subtables with nil "value"
-- fields) are moved to the end, where they will later be given the key
-- "all". This is to cut down on the number of table lookups in
-- cfg.protectionCategories, which grows exponentially with the number of
-- non-nil keys. We keep track of the number of active subtables with the
-- noActive parameter.
--]]
local noActive, attemptOrder
do
local active, inactive = {}, {}
for i, t in ipairs(order) do
if t.val then
active[#active + 1] = t
else
inactive[#inactive + 1] = t
end
end
noActive = #active
attemptOrder = active
for i, t in ipairs(inactive) do
attemptOrder[#attemptOrder + 1] = t
end
end
--[[
-- Check increasingly generic key combinations until we find a match. If a
-- specific category exists for the combination of key fragments we are
-- given, that match will be found first. If not, we keep trying different
-- key fragment combinations until we match using the key
-- "all-all-all-all-all".
--
-- To generate the keys, we index the key subtables using a binary matrix
-- with indexes i and j. j is only calculated up to the number of active
-- subtables. For example, if there were three active subtables, the matrix
-- would look like this, with 0 corresponding to the key fragment "all", and
-- 1 corresponding to other key fragments.
--
-- j 1 2 3
-- i
-- 1 1 1 1
-- 2 0 1 1
-- 3 1 0 1
-- 4 0 0 1
-- 5 1 1 0
-- 6 0 1 0
-- 7 1 0 0
-- 8 0 0 0
--
-- Values of j higher than the number of active subtables are set
-- to the string "all".
--
-- A key for cfg.protectionCategories is constructed for each value of i.
-- The position of the value in the key is determined by the keypos field in
-- each subtable.
--]]
local cats = cfg.protectionCategories
for i = 1, 2^noActive do
local key = {}
for j, t in ipairs(attemptOrder) do
if j > noActive then
key[t.keypos] = 'all'
else
local quotient = i / 2 ^ (j - 1)
quotient = math.ceil(quotient)
if quotient % 2 == 1 then
key[t.keypos] = t.val
else
key[t.keypos] = 'all'
end
end
end
key = table.concat(key, '|')
local attempt = cats[key]
if attempt then
return makeCategoryLink(attempt, title.text)
end
end
return ''
end
function Protection:isIncorrect()
local expiry = self.expiry
return not self:shouldHaveProtectionCategory()
or type(expiry) == 'number' and expiry < os.time()
end
function Protection:isTemplateProtectedNonTemplate()
local action, namespace = self.action, self.title.namespace
return self.level == 'templateeditor'
and (
(action ~= 'edit' and action ~= 'move')
or (namespace ~= 10 and namespace ~= 828)
)
end
function Protection:makeCategoryLinks()
local msg = self._cfg.msg
local ret = {self:makeProtectionCategory()}
if self:isIncorrect() then
ret[#ret + 1] = makeCategoryLink(
msg['tracking-category-incorrect'],
self.title.text
)
end
if self:isTemplateProtectedNonTemplate() then
ret[#ret + 1] = makeCategoryLink(
msg['tracking-category-template'],
self.title.text
)
end
return table.concat(ret)
end
--------------------------------------------------------------------------------
-- Blurb class
--------------------------------------------------------------------------------
local Blurb = {}
Blurb.__index = Blurb
Blurb.bannerTextFields = {
text = true,
explanation = true,
tooltip = true,
alt = true,
link = true
}
function Blurb.new(protectionObj, args, cfg)
return setmetatable({
_cfg = cfg,
_protectionObj = protectionObj,
_args = args
}, Blurb)
end
-- Private methods --
function Blurb:_formatDate(num)
-- Formats a Unix timestamp into dd Month, YYYY format.
lang = lang or mw.language.getContentLanguage()
local success, date = pcall(
lang.formatDate,
lang,
self._cfg.msg['expiry-date-format'] or 'j F Y',
'@' .. tostring(num)
)
if success then
return date
end
end
function Blurb:_getExpandedMessage(msgKey)
return self:_substituteParameters(self._cfg.msg[msgKey])
end
function Blurb:_substituteParameters(msg)
if not self._params then
local parameterFuncs = {}
parameterFuncs.CURRENTVERSION = self._makeCurrentVersionParameter
parameterFuncs.EDITREQUEST = self._makeEditRequestParameter
parameterFuncs.EXPIRY = self._makeExpiryParameter
parameterFuncs.EXPLANATIONBLURB = self._makeExplanationBlurbParameter
parameterFuncs.IMAGELINK = self._makeImageLinkParameter
parameterFuncs.INTROBLURB = self._makeIntroBlurbParameter
parameterFuncs.INTROFRAGMENT = self._makeIntroFragmentParameter
parameterFuncs.PAGETYPE = self._makePagetypeParameter
parameterFuncs.PROTECTIONBLURB = self._makeProtectionBlurbParameter
parameterFuncs.PROTECTIONDATE = self._makeProtectionDateParameter
parameterFuncs.PROTECTIONLEVEL = self._makeProtectionLevelParameter
parameterFuncs.PROTECTIONLOG = self._makeProtectionLogParameter
parameterFuncs.TALKPAGE = self._makeTalkPageParameter
parameterFuncs.TOOLTIPBLURB = self._makeTooltipBlurbParameter
parameterFuncs.TOOLTIPFRAGMENT = self._makeTooltipFragmentParameter
parameterFuncs.VANDAL = self._makeVandalTemplateParameter
self._params = setmetatable({}, {
__index = function (t, k)
local param
if parameterFuncs[k] then
param = parameterFuncs[k](self)
end
param = param or ''
t[k] = param
return param
end
})
end
msg = msg:gsub('${(%u+)}', self._params)
return msg
end
function Blurb:_makeCurrentVersionParameter()
-- A link to the page history or the move log, depending on the kind of
-- protection.
local pagename = self._protectionObj.title.prefixedText
if self._protectionObj.action == 'move' then
-- We need the move log link.
return makeFullUrl(
'Special:Log',
{type = 'move', page = pagename},
self:_getExpandedMessage('current-version-move-display')
)
else
-- We need the history link.
return makeFullUrl(
pagename,
{action = 'history'},
self:_getExpandedMessage('current-version-edit-display')
)
end
end
function Blurb:_makeEditRequestParameter()
local mEditRequest = require('Module:Submit an edit request')
local action = self._protectionObj.action
local level = self._protectionObj.level
-- Get the edit request type.
local requestType
if action == 'edit' then
if level == 'autoconfirmed' then
requestType = 'semi'
elseif level == 'extendedconfirmed' then
requestType = 'extended'
elseif level == 'templateeditor' then
requestType = 'template'
end
end
requestType = requestType or 'full'
-- Get the display value.
local display = self:_getExpandedMessage('edit-request-display')
return mEditRequest._link{type = requestType, display = display}
end
function Blurb:_makeExpiryParameter()
local expiry = self._protectionObj.expiry
if type(expiry) == 'number' then
return self:_formatDate(expiry)
else
return expiry
end
end
function Blurb:_makeExplanationBlurbParameter()
-- Cover special cases first.
if self._protectionObj.title.namespace == 8 then
-- MediaWiki namespace
return self:_getExpandedMessage('explanation-blurb-nounprotect')
end
-- Get explanation blurb table keys
local action = self._protectionObj.action
local level = self._protectionObj.level
local talkKey = self._protectionObj.title.isTalkPage and 'talk' or 'subject'
-- Find the message in the explanation blurb table and substitute any
-- parameters.
local explanations = self._cfg.explanationBlurbs
local msg
if explanations[action][level] and explanations[action][level][talkKey] then
msg = explanations[action][level][talkKey]
elseif explanations[action][level] and explanations[action][level].default then
msg = explanations[action][level].default
elseif explanations[action].default and explanations[action].default[talkKey] then
msg = explanations[action].default[talkKey]
elseif explanations[action].default and explanations[action].default.default then
msg = explanations[action].default.default
else
error(string.format(
'could not find explanation blurb for action "%s", level "%s" and talk key "%s"',
action,
level,
talkKey
), 8)
end
return self:_substituteParameters(msg)
end
function Blurb:_makeImageLinkParameter()
local imageLinks = self._cfg.imageLinks
local action = self._protectionObj.action
local level = self._protectionObj.level
local msg
if imageLinks[action][level] then
msg = imageLinks[action][level]
elseif imageLinks[action].default then
msg = imageLinks[action].default
else
msg = imageLinks.edit.default
end
return self:_substituteParameters(msg)
end
function Blurb:_makeIntroBlurbParameter()
if self._protectionObj:isTemporary() then
return self:_getExpandedMessage('intro-blurb-expiry')
else
return self:_getExpandedMessage('intro-blurb-noexpiry')
end
end
function Blurb:_makeIntroFragmentParameter()
if self._protectionObj:isTemporary() then
return self:_getExpandedMessage('intro-fragment-expiry')
else
return self:_getExpandedMessage('intro-fragment-noexpiry')
end
end
function Blurb:_makePagetypeParameter()
local pagetypes = self._cfg.pagetypes
return pagetypes[self._protectionObj.title.namespace]
or pagetypes.default
or error('no default pagetype defined', 8)
end
function Blurb:_makeProtectionBlurbParameter()
local protectionBlurbs = self._cfg.protectionBlurbs
local action = self._protectionObj.action
local level = self._protectionObj.level
local msg
if protectionBlurbs[action][level] then
msg = protectionBlurbs[action][level]
elseif protectionBlurbs[action].default then
msg = protectionBlurbs[action].default
elseif protectionBlurbs.edit.default then
msg = protectionBlurbs.edit.default
else
error('no protection blurb defined for protectionBlurbs.edit.default', 8)
end
return self:_substituteParameters(msg)
end
function Blurb:_makeProtectionDateParameter()
local protectionDate = self._protectionObj.protectionDate
if type(protectionDate) == 'number' then
return self:_formatDate(protectionDate)
else
return protectionDate
end
end
function Blurb:_makeProtectionLevelParameter()
local protectionLevels = self._cfg.protectionLevels
local action = self._protectionObj.action
local level = self._protectionObj.level
local msg
if protectionLevels[action][level] then
msg = protectionLevels[action][level]
elseif protectionLevels[action].default then
msg = protectionLevels[action].default
elseif protectionLevels.edit.default then
msg = protectionLevels.edit.default
else
error('no protection level defined for protectionLevels.edit.default', 8)
end
return self:_substituteParameters(msg)
end
function Blurb:_makeProtectionLogParameter()
local pagename = self._protectionObj.title.prefixedText
if self._protectionObj.action == 'autoreview' then
-- We need the pending changes log.
return makeFullUrl(
'Special:Log',
{type = 'stable', page = pagename},
self:_getExpandedMessage('pc-log-display')
)
else
-- We need the protection log.
return makeFullUrl(
'Special:Log',
{type = 'protect', page = pagename},
self:_getExpandedMessage('protection-log-display')
)
end
end
function Blurb:_makeTalkPageParameter()
return string.format(
'[[%s:%s#%s|%s]]',
mw.site.namespaces[self._protectionObj.title.namespace].talk.name,
self._protectionObj.title.text,
self._args.section or 'top',
self:_getExpandedMessage('talk-page-link-display')
)
end
function Blurb:_makeTooltipBlurbParameter()
if self._protectionObj:isTemporary() then
return self:_getExpandedMessage('tooltip-blurb-expiry')
else
return self:_getExpandedMessage('tooltip-blurb-noexpiry')
end
end
function Blurb:_makeTooltipFragmentParameter()
if self._protectionObj:isTemporary() then
return self:_getExpandedMessage('tooltip-fragment-expiry')
else
return self:_getExpandedMessage('tooltip-fragment-noexpiry')
end
end
function Blurb:_makeVandalTemplateParameter()
return mw.getCurrentFrame():expandTemplate{
title="vandal-m",
args={self._args.user or self._protectionObj.title.baseText}
}
end
-- Public methods --
function Blurb:makeBannerText(key)
-- Validate input.
if not key or not Blurb.bannerTextFields[key] then
error(string.format(
'"%s" is not a valid banner config field',
tostring(key)
), 2)
end
-- Generate the text.
local msg = self._protectionObj.bannerConfig[key]
if type(msg) == 'string' then
return self:_substituteParameters(msg)
elseif type(msg) == 'function' then
msg = msg(self._protectionObj, self._args)
if type(msg) ~= 'string' then
error(string.format(
'bad output from banner config function with key "%s"'
.. ' (expected string, got %s)',
tostring(key),
type(msg)
), 4)
end
return self:_substituteParameters(msg)
end
end
--------------------------------------------------------------------------------
-- BannerTemplate class
--------------------------------------------------------------------------------
local BannerTemplate = {}
BannerTemplate.__index = BannerTemplate
function BannerTemplate.new(protectionObj, cfg)
local obj = {}
obj._cfg = cfg
-- Set the image filename.
local imageFilename = protectionObj.bannerConfig.image
if imageFilename then
obj._imageFilename = imageFilename
else
-- If an image filename isn't specified explicitly in the banner config,
-- generate it from the protection status and the namespace.
local action = protectionObj.action
local level = protectionObj.level
local namespace = protectionObj.title.namespace
local reason = protectionObj.reason
-- Deal with special cases first.
if (
namespace == 10
or namespace == 828
or reason and obj._cfg.indefImageReasons[reason]
)
and action == 'edit'
and level == 'sysop'
and not protectionObj:isTemporary()
then
-- Fully protected modules and templates get the special red "indef"
-- padlock.
obj._imageFilename = obj._cfg.msg['image-filename-indef']
else
-- Deal with regular protection types.
local images = obj._cfg.images
if images[action] then
if images[action][level] then
obj._imageFilename = images[action][level]
elseif images[action].default then
obj._imageFilename = images[action].default
end
end
end
end
return setmetatable(obj, BannerTemplate)
end
function BannerTemplate:renderImage()
local filename = self._imageFilename
or self._cfg.msg['image-filename-default']
or 'Transparent.gif'
return makeFileLink{
file = filename,
size = (self.imageWidth or 20) .. 'px',
alt = self._imageAlt,
link = self._imageLink,
caption = self.imageCaption
}
end
--------------------------------------------------------------------------------
-- Banner class
--------------------------------------------------------------------------------
local Banner = setmetatable({}, BannerTemplate)
Banner.__index = Banner
function Banner.new(protectionObj, blurbObj, cfg)
local obj = BannerTemplate.new(protectionObj, cfg) -- This doesn't need the blurb.
obj.imageWidth = 40
obj.imageCaption = blurbObj:makeBannerText('alt') -- Large banners use the alt text for the tooltip.
obj._reasonText = blurbObj:makeBannerText('text')
obj._explanationText = blurbObj:makeBannerText('explanation')
obj._page = protectionObj.title.prefixedText -- Only makes a difference in testing.
return setmetatable(obj, Banner)
end
function Banner:__tostring()
-- Renders the banner.
makeMessageBox = makeMessageBox or require('Module:Message box').main
local reasonText = self._reasonText or error('no reason text set', 2)
local explanationText = self._explanationText
local mbargs = {
page = self._page,
type = 'protection',
image = self:renderImage(),
text = string.format(
"'''%s'''%s",
reasonText,
explanationText and '<br />' .. explanationText or ''
)
}
return makeMessageBox('mbox', mbargs)
end
--------------------------------------------------------------------------------
-- Padlock class
--------------------------------------------------------------------------------
local Padlock = setmetatable({}, BannerTemplate)
Padlock.__index = Padlock
function Padlock.new(protectionObj, blurbObj, cfg)
local obj = BannerTemplate.new(protectionObj, cfg) -- This doesn't need the blurb.
obj.imageWidth = 20
obj.imageCaption = blurbObj:makeBannerText('tooltip')
obj._imageAlt = blurbObj:makeBannerText('alt')
obj._imageLink = blurbObj:makeBannerText('link')
obj._indicatorName = cfg.padlockIndicatorNames[protectionObj.action]
or cfg.padlockIndicatorNames.default
or 'pp-default'
return setmetatable(obj, Padlock)
end
function Padlock:__tostring()
local frame = mw.getCurrentFrame()
-- The nowiki tag helps prevent whitespace at the top of articles.
return frame:extensionTag{name = 'nowiki'} .. frame:extensionTag{
name = 'indicator',
args = {name = self._indicatorName},
content = self:renderImage()
}
end
--------------------------------------------------------------------------------
-- Exports
--------------------------------------------------------------------------------
local p = {}
function p._exportClasses()
-- This is used for testing purposes.
return {
Protection = Protection,
Blurb = Blurb,
BannerTemplate = BannerTemplate,
Banner = Banner,
Padlock = Padlock,
}
end
function p._main(args, cfg, title)
args = args or {}
cfg = cfg or require(CONFIG_MODULE)
local protectionObj = Protection.new(args, cfg, title)
local ret = {}
-- If a page's edit protection is equally or more restrictive than its
-- protection from some other action, then don't bother displaying anything
-- for the other action (except categories).
if not yesno(args.catonly) and (protectionObj.action == 'edit' or
args.demolevel or
not getReachableNodes(
cfg.hierarchy,
protectionObj.level
)[effectiveProtectionLevel('edit', protectionObj.title)])
then
-- Initialise the blurb object
local blurbObj = Blurb.new(protectionObj, args, cfg)
-- Render the banner
if protectionObj:shouldShowLock() then
ret[#ret + 1] = tostring(
(yesno(args.small) and Padlock or Banner)
.new(protectionObj, blurbObj, cfg)
)
end
end
-- Render the categories
if yesno(args.category) ~= false then
ret[#ret + 1] = protectionObj:makeCategoryLinks()
end
return table.concat(ret)
end
function p.main(frame, cfg)
cfg = cfg or require(CONFIG_MODULE)
-- Find default args, if any.
local parent = frame.getParent and frame:getParent()
local defaultArgs = parent and cfg.wrappers[parent:getTitle():gsub('/sandbox$', '')]
-- Find user args, and use the parent frame if we are being called from a
-- wrapper template.
getArgs = getArgs or require('Module:Arguments').getArgs
local userArgs = getArgs(frame, {
parentOnly = defaultArgs,
frameOnly = not defaultArgs
})
-- Build the args table. User-specified args overwrite default args.
local args = {}
for k, v in pairs(defaultArgs or {}) do
args[k] = v
end
for k, v in pairs(userArgs) do
args[k] = v
end
return p._main(args, cfg)
end
return p
894f0884d4c2da1ce19d385b96f59af654b0946a
Module:Protection banner/config
828
49
103
102
2023-09-14T01:11:43Z
Ilovethehitgameomori
2
1 revision imported
Scribunto
text/plain
-- This module provides configuration data for [[Module:Protection banner]].
return {
--------------------------------------------------------------------------------
--
-- BANNER DATA
--
--------------------------------------------------------------------------------
--[[
-- Banner data consists of six fields:
-- * text - the main protection text that appears at the top of protection
-- banners.
-- * explanation - the text that appears below the main protection text, used
-- to explain the details of the protection.
-- * tooltip - the tooltip text you see when you move the mouse over a small
-- padlock icon.
-- * link - the page that the small padlock icon links to.
-- * alt - the alt text for the small padlock icon. This is also used as tooltip
-- text for the large protection banners.
-- * image - the padlock image used in both protection banners and small padlock
-- icons.
--
-- The module checks in three separate tables to find a value for each field.
-- First it checks the banners table, which has values specific to the reason
-- for the page being protected. Then the module checks the defaultBanners
-- table, which has values specific to each protection level. Finally, the
-- module checks the masterBanner table, which holds data for protection
-- templates to use if no data has been found in the previous two tables.
--
-- The values in the banner data can take parameters. These are specified
-- using ${TEXTLIKETHIS} (a dollar sign preceding a parameter name
-- enclosed in curly braces).
--
-- Available parameters:
--
-- ${CURRENTVERSION} - a link to the page history or the move log, with the
-- display message "current-version-edit-display" or
-- "current-version-move-display".
--
-- ${EDITREQUEST} - a link to create an edit request for the current page.
--
-- ${EXPLANATIONBLURB} - an explanation blurb, e.g. "Please discuss any changes
-- on the talk page; you may submit a request to ask an administrator to make
-- an edit if it is minor or supported by consensus."
--
-- ${IMAGELINK} - a link to set the image to, depending on the protection
-- action and protection level.
--
-- ${INTROBLURB} - the PROTECTIONBLURB parameter, plus the expiry if an expiry
-- is set. E.g. "Editing of this page by new or unregistered users is currently
-- disabled until dd Month YYYY."
--
-- ${INTROFRAGMENT} - the same as ${INTROBLURB}, but without final punctuation
-- so that it can be used in run-on sentences.
--
-- ${PAGETYPE} - the type of the page, e.g. "article" or "template".
-- Defined in the cfg.pagetypes table.
--
-- ${PROTECTIONBLURB} - a blurb explaining the protection level of the page, e.g.
-- "Editing of this page by new or unregistered users is currently disabled"
--
-- ${PROTECTIONDATE} - the protection date, if it has been supplied to the
-- template.
--
-- ${PROTECTIONLEVEL} - the protection level, e.g. "fully protected" or
-- "semi-protected".
--
-- ${PROTECTIONLOG} - a link to the protection log or the pending changes log,
-- depending on the protection action.
--
-- ${TALKPAGE} - a link to the talk page. If a section is specified, links
-- straight to that talk page section.
--
-- ${TOOLTIPBLURB} - uses the PAGETYPE, PROTECTIONTYPE and EXPIRY parameters to
-- create a blurb like "This template is semi-protected", or "This article is
-- move-protected until DD Month YYYY".
--
-- ${VANDAL} - links for the specified username (or the root page name)
-- using Module:Vandal-m.
--
-- Functions
--
-- For advanced users, it is possible to use Lua functions instead of strings
-- in the banner config tables. Using functions gives flexibility that is not
-- possible just by using parameters. Functions take two arguments, the
-- protection object and the template arguments, and they must output a string.
--
-- For example:
--
-- text = function (protectionObj, args)
-- if protectionObj.level == 'autoconfirmed' then
-- return 'foo'
-- else
-- return 'bar'
-- end
-- end
--
-- Some protection object properties and methods that may be useful:
-- protectionObj.action - the protection action
-- protectionObj.level - the protection level
-- protectionObj.reason - the protection reason
-- protectionObj.expiry - the expiry. Nil if unset, the string "indef" if set
-- to indefinite, and the protection time in unix time if temporary.
-- protectionObj.protectionDate - the protection date in unix time, or nil if
-- unspecified.
-- protectionObj.bannerConfig - the banner config found by the module. Beware
-- of editing the config field used by the function, as it could create an
-- infinite loop.
-- protectionObj:isProtected - returns a boolean showing whether the page is
-- protected.
-- protectionObj:isTemporary - returns a boolean showing whether the expiry is
-- temporary.
-- protectionObj:isIncorrect - returns a boolean showing whether the protection
-- template is incorrect.
--]]
-- The master banner data, used if no values have been found in banners or
-- defaultBanners.
masterBanner = {
text = '${INTROBLURB}',
explanation = '${EXPLANATIONBLURB}',
tooltip = '${TOOLTIPBLURB}',
link = '${IMAGELINK}',
alt = 'Page ${PROTECTIONLEVEL}'
},
-- The default banner data. This holds banner data for different protection
-- levels.
-- *required* - this table needs edit, move, autoreview and upload subtables.
defaultBanners = {
edit = {},
move = {},
autoreview = {
default = {
alt = 'Page protected with pending changes',
tooltip = 'All edits by unregistered and new users are subject to review prior to becoming visible to unregistered users',
image = 'Pending-protection-shackle.svg'
}
},
upload = {}
},
-- The banner data. This holds banner data for different protection reasons.
-- In fact, the reasons specified in this table control which reasons are
-- valid inputs to the first positional parameter.
--
-- There is also a non-standard "description" field that can be used for items
-- in this table. This is a description of the protection reason for use in the
-- module documentation.
--
-- *required* - this table needs edit, move, autoreview and upload subtables.
banners = {
edit = {
blp = {
description = 'For pages protected to promote compliance with the'
.. ' [[Wikipedia:Biographies of living persons'
.. '|biographies of living persons]] policy',
text = '${INTROFRAGMENT} to promote compliance with'
.. ' [[Wikipedia:Biographies of living persons'
.. "|Wikipedia's policy on the biographies"
.. ' of living people]].',
tooltip = '${TOOLTIPFRAGMENT} to promote compliance with the policy on'
.. ' biographies of living persons',
},
dmca = {
description = 'For pages protected by the Wikimedia Foundation'
.. ' due to [[Digital Millennium Copyright Act]] takedown requests',
explanation = function (protectionObj, args)
local ret = 'Pursuant to a rights owner notice under the Digital'
.. ' Millennium Copyright Act (DMCA) regarding some content'
.. ' in this article, the Wikimedia Foundation acted under'
.. ' applicable law and took down and restricted the content'
.. ' in question.'
if args.notice then
ret = ret .. ' A copy of the received notice can be found here: '
.. args.notice .. '.'
end
ret = ret .. ' For more information, including websites discussing'
.. ' how to file a counter-notice, please see'
.. " [[Wikipedia:Office actions]] and the article's ${TALKPAGE}."
.. "'''Do not remove this template from the article until the"
.. " restrictions are withdrawn'''."
return ret
end,
image = 'Office-protection-shackle.svg',
},
dispute = {
description = 'For pages protected due to editing disputes',
text = function (protectionObj, args)
-- Find the value of "disputes".
local display = 'disputes'
local disputes
if args.section then
disputes = string.format(
'[[%s:%s#%s|%s]]',
mw.site.namespaces[protectionObj.title.namespace].talk.name,
protectionObj.title.text,
args.section,
display
)
else
disputes = display
end
-- Make the blurb, depending on the expiry.
local msg
if type(protectionObj.expiry) == 'number' then
msg = '${INTROFRAGMENT} or until editing %s have been resolved.'
else
msg = '${INTROFRAGMENT} until editing %s have been resolved.'
end
return string.format(msg, disputes)
end,
explanation = "This protection is '''not''' an endorsement of the"
.. ' ${CURRENTVERSION}. ${EXPLANATIONBLURB}',
tooltip = '${TOOLTIPFRAGMENT} due to editing disputes',
},
ecp = {
description = 'For articles in topic areas authorized by'
.. ' [[Wikipedia:Arbitration Committee|ArbCom]] or'
.. ' meets the criteria for community use',
tooltip = 'This ${PAGETYPE} is ${PROTECTIONLEVEL}',
alt = 'Extended-protected ${PAGETYPE}',
},
mainpage = {
description = 'For pages protected for being displayed on the [[Main Page]]',
text = 'This file is currently'
.. ' [[Wikipedia:This page is protected|protected]] from'
.. ' editing because it is currently or will soon be displayed'
.. ' on the [[Main Page]].',
explanation = 'Images on the Main Page are protected due to their high'
.. ' visibility. Please discuss any necessary changes on the ${TALKPAGE}.'
.. '<br /><span style="font-size:90%;">'
.. "'''Administrators:''' Once this image is definitely off the Main Page,"
.. ' please unprotect this file, or reduce to semi-protection,'
.. ' as appropriate.</span>',
},
office = {
description = 'For pages protected by the Wikimedia Foundation',
text = function (protectionObj, args)
local ret = 'This ${PAGETYPE} is currently under the'
.. ' scrutiny of the'
.. ' [[Wikipedia:Office actions|Wikimedia Foundation Office]]'
.. ' and is protected.'
if protectionObj.protectionDate then
ret = ret .. ' It has been protected since ${PROTECTIONDATE}.'
end
return ret
end,
explanation = "If you can edit this page, please discuss all changes and"
.. " additions on the ${TALKPAGE} first. '''Do not remove protection from this"
.. " page unless you are authorized by the Wikimedia Foundation to do"
.. " so.'''",
image = 'Office-protection-shackle.svg',
},
reset = {
description = 'For pages protected by the Wikimedia Foundation and'
.. ' "reset" to a bare-bones version',
text = 'This ${PAGETYPE} is currently under the'
.. ' scrutiny of the'
.. ' [[Wikipedia:Office actions|Wikimedia Foundation Office]]'
.. ' and is protected.',
explanation = function (protectionObj, args)
local ret = ''
if protectionObj.protectionDate then
ret = ret .. 'On ${PROTECTIONDATE} this ${PAGETYPE} was'
else
ret = ret .. 'This ${PAGETYPE} has been'
end
ret = ret .. ' reduced to a'
.. ' simplified, "bare bones" version so that it may be completely'
.. ' rewritten to ensure it meets the policies of'
.. ' [[WP:NPOV|Neutral Point of View]] and [[WP:V|Verifiability]].'
.. ' Standard Wikipedia policies will apply to its rewriting—which'
.. ' will eventually be open to all editors—and will be strictly'
.. ' enforced. The ${PAGETYPE} has been ${PROTECTIONLEVEL} while'
.. ' it is being rebuilt.\n\n'
.. 'Any insertion of material directly from'
.. ' pre-protection revisions of the ${PAGETYPE} will be removed, as'
.. ' will any material added to the ${PAGETYPE} that is not properly'
.. ' sourced. The associated talk page(s) were also cleared on the'
.. " same date.\n\n"
.. "If you can edit this page, please discuss all changes and"
.. " additions on the ${TALKPAGE} first. '''Do not override"
.. " this action, and do not remove protection from this page,"
.. " unless you are authorized by the Wikimedia Foundation"
.. " to do so. No editor may remove this notice.'''"
return ret
end,
image = 'Office-protection-shackle.svg',
},
sock = {
description = 'For pages protected due to'
.. ' [[Wikipedia:Sock puppetry|sock puppetry]]',
text = '${INTROFRAGMENT} to prevent [[Wikipedia:Sock puppetry|sock puppets]] of'
.. ' [[Wikipedia:Blocking policy|blocked]] or'
.. ' [[Wikipedia:Banning policy|banned users]]'
.. ' from editing it.',
tooltip = '${TOOLTIPFRAGMENT} to prevent sock puppets of blocked or banned users from'
.. ' editing it',
},
template = {
description = 'For [[Wikipedia:High-risk templates|high-risk]]'
.. ' templates and Lua modules',
text = 'This is a permanently [[Help:Protection|protected]] ${PAGETYPE},'
.. ' as it is [[Wikipedia:High-risk templates|high-risk]].',
explanation = 'Please discuss any changes on the ${TALKPAGE}; you may'
.. ' ${EDITREQUEST} to ask an'
.. ' [[Wikipedia:Administrators|administrator]] or'
.. ' [[Wikipedia:Template editor|template editor]] to make an edit if'
.. ' it is [[Help:Minor edit#When to mark an edit as a minor edit'
.. '|uncontroversial]] or supported by'
.. ' [[Wikipedia:Consensus|consensus]]. You can also'
.. ' [[Wikipedia:Requests for page protection|request]] that the page be'
.. ' unprotected.',
tooltip = 'This high-risk ${PAGETYPE} is permanently ${PROTECTIONLEVEL}'
.. ' to prevent vandalism',
alt = 'Permanently protected ${PAGETYPE}',
},
usertalk = {
description = 'For pages protected against disruptive edits by a'
.. ' particular user',
text = '${INTROFRAGMENT} to prevent ${VANDAL} from using it to make disruptive edits,'
.. ' such as abusing the'
.. ' {{[[Template:unblock|unblock]]}} template.',
explanation = 'If you cannot edit this user talk page and you need to'
.. ' make a change or leave a message, you can'
.. ' [[Wikipedia:Requests for page protection'
.. '#Current requests for edits to a protected page'
.. '|request an edit]],'
.. ' [[Wikipedia:Requests for page protection'
.. '#Current requests for reduction in protection level'
.. '|request unprotection]],'
.. ' [[Special:Userlogin|log in]],'
.. ' or [[Special:UserLogin/signup|create an account]].',
},
vandalism = {
description = 'For pages protected against'
.. ' [[Wikipedia:Vandalism|vandalism]]',
text = '${INTROFRAGMENT} due to [[Wikipedia:Vandalism|vandalism]].',
explanation = function (protectionObj, args)
local ret = ''
if protectionObj.level == 'sysop' then
ret = ret .. "This protection is '''not''' an endorsement of the"
.. ' ${CURRENTVERSION}. '
end
return ret .. '${EXPLANATIONBLURB}'
end,
tooltip = '${TOOLTIPFRAGMENT} due to vandalism',
}
},
move = {
dispute = {
description = 'For pages protected against page moves due to'
.. ' disputes over the page title',
explanation = "This protection is '''not''' an endorsement of the"
.. ' ${CURRENTVERSION}. ${EXPLANATIONBLURB}',
image = 'Move-protection-shackle.svg'
},
vandalism = {
description = 'For pages protected against'
.. ' [[Wikipedia:Vandalism#Page-move vandalism'
.. ' |page-move vandalism]]'
}
},
autoreview = {},
upload = {}
},
--------------------------------------------------------------------------------
--
-- GENERAL DATA TABLES
--
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
-- Protection blurbs
--------------------------------------------------------------------------------
-- This table produces the protection blurbs available with the
-- ${PROTECTIONBLURB} parameter. It is sorted by protection action and
-- protection level, and is checked by the module in the following order:
-- 1. page's protection action, page's protection level
-- 2. page's protection action, default protection level
-- 3. "edit" protection action, default protection level
--
-- It is possible to use banner parameters inside this table.
-- *required* - this table needs edit, move, autoreview and upload subtables.
protectionBlurbs = {
edit = {
default = 'This ${PAGETYPE} is currently [[Help:Protection|'
.. 'protected]] from editing',
autoconfirmed = 'Editing of this ${PAGETYPE} by [[Wikipedia:User access'
.. ' levels#New users|new]] or [[Wikipedia:User access levels#Unregistered'
.. ' users|unregistered]] users is currently [[Help:Protection|disabled]]',
extendedconfirmed = 'This ${PAGETYPE} is currently under extended confirmed protection',
},
move = {
default = 'This ${PAGETYPE} is currently [[Help:Protection|protected]]'
.. ' from [[Help:Moving a page|page moves]]'
},
autoreview = {
default = 'All edits made to this ${PAGETYPE} by'
.. ' [[Wikipedia:User access levels#New users|new]] or'
.. ' [[Wikipedia:User access levels#Unregistered users|unregistered]]'
.. ' users are currently'
.. ' [[Wikipedia:Pending changes|subject to review]]'
},
upload = {
default = 'Uploading new versions of this ${PAGETYPE} is currently disabled'
}
},
--------------------------------------------------------------------------------
-- Explanation blurbs
--------------------------------------------------------------------------------
-- This table produces the explanation blurbs available with the
-- ${EXPLANATIONBLURB} parameter. It is sorted by protection action,
-- protection level, and whether the page is a talk page or not. If the page is
-- a talk page it will have a talk key of "talk"; otherwise it will have a talk
-- key of "subject". The table is checked in the following order:
-- 1. page's protection action, page's protection level, page's talk key
-- 2. page's protection action, page's protection level, default talk key
-- 3. page's protection action, default protection level, page's talk key
-- 4. page's protection action, default protection level, default talk key
--
-- It is possible to use banner parameters inside this table.
-- *required* - this table needs edit, move, autoreview and upload subtables.
explanationBlurbs = {
edit = {
autoconfirmed = {
subject = 'See the [[Wikipedia:Protection policy|'
.. 'protection policy]] and ${PROTECTIONLOG} for more details. If you'
.. ' cannot edit this ${PAGETYPE} and you wish to make a change, you can'
.. ' ${EDITREQUEST}, discuss changes on the ${TALKPAGE},'
.. ' [[Wikipedia:Requests for page protection'
.. '#Current requests for reduction in protection level'
.. '|request unprotection]], [[Special:Userlogin|log in]], or'
.. ' [[Special:UserLogin/signup|create an account]].',
default = 'See the [[Wikipedia:Protection policy|'
.. 'protection policy]] and ${PROTECTIONLOG} for more details. If you'
.. ' cannot edit this ${PAGETYPE} and you wish to make a change, you can'
.. ' [[Wikipedia:Requests for page protection'
.. '#Current requests for reduction in protection level'
.. '|request unprotection]], [[Special:Userlogin|log in]], or'
.. ' [[Special:UserLogin/signup|create an account]].',
},
extendedconfirmed = {
default = 'Extended confirmed protection prevents edits from all unregistered editors'
.. ' and registered users with fewer than 30 days tenure and 500 edits.'
.. ' The [[Wikipedia:Protection policy#extended|policy on community use]]'
.. ' specifies that extended confirmed protection can be applied to combat'
.. ' disruption, if semi-protection has proven to be ineffective.'
.. ' Extended confirmed protection may also be applied to enforce'
.. ' [[Wikipedia:Arbitration Committee|arbitration sanctions]].'
.. ' Please discuss any changes on the ${TALKPAGE}; you may'
.. ' ${EDITREQUEST} to ask for uncontroversial changes supported by'
.. ' [[Wikipedia:Consensus|consensus]].'
},
default = {
subject = 'See the [[Wikipedia:Protection policy|'
.. 'protection policy]] and ${PROTECTIONLOG} for more details.'
.. ' Please discuss any changes on the ${TALKPAGE}; you'
.. ' may ${EDITREQUEST} to ask an'
.. ' [[Wikipedia:Administrators|administrator]] to make an edit if it'
.. ' is [[Help:Minor edit#When to mark an edit as a minor edit'
.. '|uncontroversial]] or supported by [[Wikipedia:Consensus'
.. '|consensus]]. You may also [[Wikipedia:Requests for'
.. ' page protection#Current requests for reduction in protection level'
.. '|request]] that this page be unprotected.',
default = 'See the [[Wikipedia:Protection policy|'
.. 'protection policy]] and ${PROTECTIONLOG} for more details.'
.. ' You may [[Wikipedia:Requests for page'
.. ' protection#Current requests for edits to a protected page|request an'
.. ' edit]] to this page, or [[Wikipedia:Requests for'
.. ' page protection#Current requests for reduction in protection level'
.. '|ask]] for it to be unprotected.'
}
},
move = {
default = {
subject = 'See the [[Wikipedia:Protection policy|'
.. 'protection policy]] and ${PROTECTIONLOG} for more details.'
.. ' The page may still be edited but cannot be moved'
.. ' until unprotected. Please discuss any suggested moves on the'
.. ' ${TALKPAGE} or at [[Wikipedia:Requested moves]]. You can also'
.. ' [[Wikipedia:Requests for page protection|request]] that the page be'
.. ' unprotected.',
default = 'See the [[Wikipedia:Protection policy|'
.. 'protection policy]] and ${PROTECTIONLOG} for more details.'
.. ' The page may still be edited but cannot be moved'
.. ' until unprotected. Please discuss any suggested moves at'
.. ' [[Wikipedia:Requested moves]]. You can also'
.. ' [[Wikipedia:Requests for page protection|request]] that the page be'
.. ' unprotected.'
}
},
autoreview = {
default = {
default = 'See the [[Wikipedia:Protection policy|'
.. 'protection policy]] and ${PROTECTIONLOG} for more details.'
.. ' Edits to this ${PAGETYPE} by new and unregistered users'
.. ' will not be visible to readers until they are accepted by'
.. ' a reviewer. To avoid the need for your edits to be'
.. ' reviewed, you may'
.. ' [[Wikipedia:Requests for page protection'
.. '#Current requests for reduction in protection level'
.. '|request unprotection]], [[Special:Userlogin|log in]], or'
.. ' [[Special:UserLogin/signup|create an account]].'
},
},
upload = {
default = {
default = 'See the [[Wikipedia:Protection policy|'
.. 'protection policy]] and ${PROTECTIONLOG} for more details.'
.. ' The page may still be edited but new versions of the file'
.. ' cannot be uploaded until it is unprotected. You can'
.. ' request that a new version be uploaded by using a'
.. ' [[Wikipedia:Edit requests|protected edit request]], or you'
.. ' can [[Wikipedia:Requests for page protection|request]]'
.. ' that the file be unprotected.'
}
}
},
--------------------------------------------------------------------------------
-- Protection levels
--------------------------------------------------------------------------------
-- This table provides the data for the ${PROTECTIONLEVEL} parameter, which
-- produces a short label for different protection levels. It is sorted by
-- protection action and protection level, and is checked in the following
-- order:
-- 1. page's protection action, page's protection level
-- 2. page's protection action, default protection level
-- 3. "edit" protection action, default protection level
--
-- It is possible to use banner parameters inside this table.
-- *required* - this table needs edit, move, autoreview and upload subtables.
protectionLevels = {
edit = {
default = 'protected',
templateeditor = 'template-protected',
extendedconfirmed = 'extended-protected',
autoconfirmed = 'semi-protected',
},
move = {
default = 'move-protected'
},
autoreview = {
},
upload = {
default = 'upload-protected'
}
},
--------------------------------------------------------------------------------
-- Images
--------------------------------------------------------------------------------
-- This table lists different padlock images for each protection action and
-- protection level. It is used if an image is not specified in any of the
-- banner data tables, and if the page does not satisfy the conditions for using
-- the ['image-filename-indef'] image. It is checked in the following order:
-- 1. page's protection action, page's protection level
-- 2. page's protection action, default protection level
images = {
edit = {
default = 'Full-protection-shackle.svg',
templateeditor = 'Template-protection-shackle.svg',
extendedconfirmed = 'Extended-protection-shackle.svg',
autoconfirmed = 'Semi-protection-shackle.svg'
},
move = {
default = 'Move-protection-shackle.svg',
},
autoreview = {
default = 'Pending-protection-shackle.svg'
},
upload = {
default = 'Upload-protection-shackle.svg'
}
},
-- Pages with a reason specified in this table will show the special "indef"
-- padlock, defined in the 'image-filename-indef' message, if no expiry is set.
indefImageReasons = {
template = true
},
--------------------------------------------------------------------------------
-- Image links
--------------------------------------------------------------------------------
-- This table provides the data for the ${IMAGELINK} parameter, which gets
-- the image link for small padlock icons based on the page's protection action
-- and protection level. It is checked in the following order:
-- 1. page's protection action, page's protection level
-- 2. page's protection action, default protection level
-- 3. "edit" protection action, default protection level
--
-- It is possible to use banner parameters inside this table.
-- *required* - this table needs edit, move, autoreview and upload subtables.
imageLinks = {
edit = {
default = 'Wikipedia:Protection policy#full',
templateeditor = 'Wikipedia:Protection policy#template',
extendedconfirmed = 'Wikipedia:Protection policy#extended',
autoconfirmed = 'Wikipedia:Protection policy#semi'
},
move = {
default = 'Wikipedia:Protection policy#move'
},
autoreview = {
default = 'Wikipedia:Protection policy#pending'
},
upload = {
default = 'Wikipedia:Protection policy#upload'
}
},
--------------------------------------------------------------------------------
-- Padlock indicator names
--------------------------------------------------------------------------------
-- This table provides the "name" attribute for the <indicator> extension tag
-- with which small padlock icons are generated. All indicator tags on a page
-- are displayed in alphabetical order based on this attribute, and with
-- indicator tags with duplicate names, the last tag on the page wins.
-- The attribute is chosen based on the protection action; table keys must be a
-- protection action name or the string "default".
padlockIndicatorNames = {
autoreview = 'pp-autoreview',
default = 'pp-default'
},
--------------------------------------------------------------------------------
-- Protection categories
--------------------------------------------------------------------------------
--[[
-- The protection categories are stored in the protectionCategories table.
-- Keys to this table are made up of the following strings:
--
-- 1. the expiry date
-- 2. the namespace
-- 3. the protection reason (e.g. "dispute" or "vandalism")
-- 4. the protection level (e.g. "sysop" or "autoconfirmed")
-- 5. the action (e.g. "edit" or "move")
--
-- When the module looks up a category in the table, first it will will check to
-- see a key exists that corresponds to all five parameters. For example, a
-- user page semi-protected from vandalism for two weeks would have the key
-- "temp-user-vandalism-autoconfirmed-edit". If no match is found, the module
-- changes the first part of the key to "all" and checks the table again. It
-- keeps checking increasingly generic key combinations until it finds the
-- field, or until it reaches the key "all-all-all-all-all".
--
-- The module uses a binary matrix to determine the order in which to search.
-- This is best demonstrated by a table. In this table, the "0" values
-- represent "all", and the "1" values represent the original data (e.g.
-- "indef" or "file" or "vandalism").
--
-- expiry namespace reason level action
-- order
-- 1 1 1 1 1 1
-- 2 0 1 1 1 1
-- 3 1 0 1 1 1
-- 4 0 0 1 1 1
-- 5 1 1 0 1 1
-- 6 0 1 0 1 1
-- 7 1 0 0 1 1
-- 8 0 0 0 1 1
-- 9 1 1 1 0 1
-- 10 0 1 1 0 1
-- 11 1 0 1 0 1
-- 12 0 0 1 0 1
-- 13 1 1 0 0 1
-- 14 0 1 0 0 1
-- 15 1 0 0 0 1
-- 16 0 0 0 0 1
-- 17 1 1 1 1 0
-- 18 0 1 1 1 0
-- 19 1 0 1 1 0
-- 20 0 0 1 1 0
-- 21 1 1 0 1 0
-- 22 0 1 0 1 0
-- 23 1 0 0 1 0
-- 24 0 0 0 1 0
-- 25 1 1 1 0 0
-- 26 0 1 1 0 0
-- 27 1 0 1 0 0
-- 28 0 0 1 0 0
-- 29 1 1 0 0 0
-- 30 0 1 0 0 0
-- 31 1 0 0 0 0
-- 32 0 0 0 0 0
--
-- In this scheme the action has the highest priority, as it is the last
-- to change, and the expiry has the least priority, as it changes the most.
-- The priorities of the expiry, the protection level and the action are
-- fixed, but the priorities of the reason and the namespace can be swapped
-- through the use of the cfg.bannerDataNamespaceHasPriority table.
--]]
-- If the reason specified to the template is listed in this table,
-- namespace data will take priority over reason data in the protectionCategories
-- table.
reasonsWithNamespacePriority = {
vandalism = true,
},
-- The string to use as a namespace key for the protectionCategories table for each
-- namespace number.
categoryNamespaceKeys = {
[ 2] = 'user',
[ 3] = 'user',
[ 4] = 'project',
[ 6] = 'file',
[ 8] = 'mediawiki',
[ 10] = 'template',
[ 12] = 'project',
[ 14] = 'category',
[100] = 'portal',
[828] = 'module',
},
protectionCategories = {
['all|all|all|all|all'] = 'Wikipedia fully protected pages',
['all|all|office|all|all'] = 'Wikipedia Office-protected pages',
['all|all|reset|all|all'] = 'Wikipedia Office-protected pages',
['all|all|dmca|all|all'] = 'Wikipedia Office-protected pages',
['all|all|mainpage|all|all'] = 'Wikipedia fully protected main page files',
['all|all|all|extendedconfirmed|all'] = 'Wikipedia extended-confirmed-protected pages',
['all|all|ecp|extendedconfirmed|all'] = 'Wikipedia extended-confirmed-protected pages',
['all|template|all|all|edit'] = 'Wikipedia fully protected templates',
['all|all|all|autoconfirmed|edit'] = 'Wikipedia semi-protected pages',
['indef|all|all|autoconfirmed|edit'] = 'Wikipedia indefinitely semi-protected pages',
['all|all|blp|autoconfirmed|edit'] = 'Wikipedia indefinitely semi-protected biographies of living people',
['temp|all|blp|autoconfirmed|edit'] = 'Wikipedia temporarily semi-protected biographies of living people',
['all|all|dispute|autoconfirmed|edit'] = 'Wikipedia pages semi-protected due to dispute',
['all|all|sock|autoconfirmed|edit'] = 'Wikipedia pages semi-protected from banned users',
['all|all|vandalism|autoconfirmed|edit'] = 'Wikipedia pages semi-protected against vandalism',
['all|category|all|autoconfirmed|edit'] = 'Wikipedia semi-protected categories',
['all|file|all|autoconfirmed|edit'] = 'Wikipedia semi-protected files',
['all|portal|all|autoconfirmed|edit'] = 'Wikipedia semi-protected portals',
['all|project|all|autoconfirmed|edit'] = 'Wikipedia semi-protected project pages',
['all|talk|all|autoconfirmed|edit'] = 'Wikipedia semi-protected talk pages',
['all|template|all|autoconfirmed|edit'] = 'Wikipedia semi-protected templates',
['all|user|all|autoconfirmed|edit'] = 'Wikipedia semi-protected user and user talk pages',
['all|all|all|templateeditor|edit'] = 'Wikipedia template-protected pages other than templates and modules',
['all|template|all|templateeditor|edit'] = 'Wikipedia template-protected templates',
['all|template|all|templateeditor|move'] = 'Wikipedia template-protected templates', -- move-protected templates
['all|all|blp|sysop|edit'] = 'Wikipedia indefinitely protected biographies of living people',
['temp|all|blp|sysop|edit'] = 'Wikipedia temporarily protected biographies of living people',
['all|all|dispute|sysop|edit'] = 'Wikipedia pages protected due to dispute',
['all|all|sock|sysop|edit'] = 'Wikipedia pages protected from banned users',
['all|all|vandalism|sysop|edit'] = 'Wikipedia pages protected against vandalism',
['all|category|all|sysop|edit'] = 'Wikipedia fully protected categories',
['all|file|all|sysop|edit'] = 'Wikipedia fully protected files',
['all|project|all|sysop|edit'] = 'Wikipedia fully protected project pages',
['all|talk|all|sysop|edit'] = 'Wikipedia fully protected talk pages',
['all|template|all|extendedconfirmed|edit'] = 'Wikipedia extended-confirmed-protected templates',
['all|template|all|sysop|edit'] = 'Wikipedia fully protected templates',
['all|user|all|sysop|edit'] = 'Wikipedia fully protected user and user talk pages',
['all|module|all|all|edit'] = 'Wikipedia fully protected modules',
['all|module|all|templateeditor|edit'] = 'Wikipedia template-protected modules',
['all|module|all|extendedconfirmed|edit'] = 'Wikipedia extended-confirmed-protected modules',
['all|module|all|autoconfirmed|edit'] = 'Wikipedia semi-protected modules',
['all|all|all|sysop|move'] = 'Wikipedia move-protected pages',
['indef|all|all|sysop|move'] = 'Wikipedia indefinitely move-protected pages',
['all|all|dispute|sysop|move'] = 'Wikipedia pages move-protected due to dispute',
['all|all|vandalism|sysop|move'] = 'Wikipedia pages move-protected due to vandalism',
['all|portal|all|sysop|move'] = 'Wikipedia move-protected portals',
['all|project|all|sysop|move'] = 'Wikipedia move-protected project pages',
['all|talk|all|sysop|move'] = 'Wikipedia move-protected talk pages',
['all|template|all|sysop|move'] = 'Wikipedia move-protected templates',
['all|user|all|sysop|move'] = 'Wikipedia move-protected user and user talk pages',
['all|all|all|autoconfirmed|autoreview'] = 'Wikipedia pending changes protected pages',
['all|file|all|all|upload'] = 'Wikipedia upload-protected files',
},
--------------------------------------------------------------------------------
-- Expiry category config
--------------------------------------------------------------------------------
-- This table configures the expiry category behaviour for each protection
-- action.
-- * If set to true, setting that action will always categorise the page if
-- an expiry parameter is not set.
-- * If set to false, setting that action will never categorise the page.
-- * If set to nil, the module will categorise the page if:
-- 1) an expiry parameter is not set, and
-- 2) a reason is provided, and
-- 3) the specified reason is not blacklisted in the reasonsWithoutExpiryCheck
-- table.
expiryCheckActions = {
edit = nil,
move = false,
autoreview = true,
upload = false
},
reasonsWithoutExpiryCheck = {
blp = true,
template = true,
},
--------------------------------------------------------------------------------
-- Pagetypes
--------------------------------------------------------------------------------
-- This table produces the page types available with the ${PAGETYPE} parameter.
-- Keys are namespace numbers, or the string "default" for the default value.
pagetypes = {
[0] = 'article',
[6] = 'file',
[10] = 'template',
[14] = 'category',
[828] = 'module',
default = 'page'
},
--------------------------------------------------------------------------------
-- Strings marking indefinite protection
--------------------------------------------------------------------------------
-- This table contains values passed to the expiry parameter that mean the page
-- is protected indefinitely.
indefStrings = {
['indef'] = true,
['indefinite'] = true,
['indefinitely'] = true,
['infinite'] = true,
},
--------------------------------------------------------------------------------
-- Group hierarchy
--------------------------------------------------------------------------------
-- This table maps each group to all groups that have a superset of the original
-- group's page editing permissions.
hierarchy = {
sysop = {},
reviewer = {'sysop'},
filemover = {'sysop'},
templateeditor = {'sysop'},
extendedconfirmed = {'sysop'},
autoconfirmed = {'reviewer', 'filemover', 'templateeditor', 'extendedconfirmed'},
user = {'autoconfirmed'},
['*'] = {'user'}
},
--------------------------------------------------------------------------------
-- Wrapper templates and their default arguments
--------------------------------------------------------------------------------
-- This table contains wrapper templates used with the module, and their
-- default arguments. Templates specified in this table should contain the
-- following invocation, and no other template content:
--
-- {{#invoke:Protection banner|main}}
--
-- If other content is desired, it can be added between
-- <noinclude>...</noinclude> tags.
--
-- When a user calls one of these wrapper templates, they will use the
-- default arguments automatically. However, users can override any of the
-- arguments.
wrappers = {
['Template:Pp'] = {},
['Template:Pp-extended'] = {'ecp'},
['Template:Pp-blp'] = {'blp'},
-- we don't need Template:Pp-create
['Template:Pp-dispute'] = {'dispute'},
['Template:Pp-main-page'] = {'mainpage'},
['Template:Pp-move'] = {action = 'move', catonly = 'yes'},
['Template:Pp-move-dispute'] = {'dispute', action = 'move', catonly = 'yes'},
-- we don't need Template:Pp-move-indef
['Template:Pp-move-vandalism'] = {'vandalism', action = 'move', catonly = 'yes'},
['Template:Pp-office'] = {'office'},
['Template:Pp-office-dmca'] = {'dmca'},
['Template:Pp-pc'] = {action = 'autoreview', small = true},
['Template:Pp-pc1'] = {action = 'autoreview', small = true},
['Template:Pp-reset'] = {'reset'},
['Template:Pp-semi-indef'] = {small = true},
['Template:Pp-sock'] = {'sock'},
['Template:Pp-template'] = {'template', small = true},
['Template:Pp-upload'] = {action = 'upload'},
['Template:Pp-usertalk'] = {'usertalk'},
['Template:Pp-vandalism'] = {'vandalism'},
},
--------------------------------------------------------------------------------
--
-- MESSAGES
--
--------------------------------------------------------------------------------
msg = {
--------------------------------------------------------------------------------
-- Intro blurb and intro fragment
--------------------------------------------------------------------------------
-- These messages specify what is produced by the ${INTROBLURB} and
-- ${INTROFRAGMENT} parameters. If the protection is temporary they use the
-- intro-blurb-expiry or intro-fragment-expiry, and if not they use
-- intro-blurb-noexpiry or intro-fragment-noexpiry.
-- It is possible to use banner parameters in these messages.
['intro-blurb-expiry'] = '${PROTECTIONBLURB} until ${EXPIRY}.',
['intro-blurb-noexpiry'] = '${PROTECTIONBLURB}.',
['intro-fragment-expiry'] = '${PROTECTIONBLURB} until ${EXPIRY},',
['intro-fragment-noexpiry'] = '${PROTECTIONBLURB}',
--------------------------------------------------------------------------------
-- Tooltip blurb
--------------------------------------------------------------------------------
-- These messages specify what is produced by the ${TOOLTIPBLURB} parameter.
-- If the protection is temporary the tooltip-blurb-expiry message is used, and
-- if not the tooltip-blurb-noexpiry message is used.
-- It is possible to use banner parameters in these messages.
['tooltip-blurb-expiry'] = 'This ${PAGETYPE} is ${PROTECTIONLEVEL} until ${EXPIRY}.',
['tooltip-blurb-noexpiry'] = 'This ${PAGETYPE} is ${PROTECTIONLEVEL}.',
['tooltip-fragment-expiry'] = 'This ${PAGETYPE} is ${PROTECTIONLEVEL} until ${EXPIRY},',
['tooltip-fragment-noexpiry'] = 'This ${PAGETYPE} is ${PROTECTIONLEVEL}',
--------------------------------------------------------------------------------
-- Special explanation blurb
--------------------------------------------------------------------------------
-- An explanation blurb for pages that cannot be unprotected, e.g. for pages
-- in the MediaWiki namespace.
-- It is possible to use banner parameters in this message.
['explanation-blurb-nounprotect'] = 'See the [[Wikipedia:Protection policy|'
.. 'protection policy]] and ${PROTECTIONLOG} for more details.'
.. ' Please discuss any changes on the ${TALKPAGE}; you'
.. ' may ${EDITREQUEST} to ask an'
.. ' [[Wikipedia:Administrators|administrator]] to make an edit if it'
.. ' is [[Help:Minor edit#When to mark an edit as a minor edit'
.. '|uncontroversial]] or supported by [[Wikipedia:Consensus'
.. '|consensus]].',
--------------------------------------------------------------------------------
-- Protection log display values
--------------------------------------------------------------------------------
-- These messages determine the display values for the protection log link
-- or the pending changes log link produced by the ${PROTECTIONLOG} parameter.
-- It is possible to use banner parameters in these messages.
['protection-log-display'] = 'protection log',
['pc-log-display'] = 'pending changes log',
--------------------------------------------------------------------------------
-- Current version display values
--------------------------------------------------------------------------------
-- These messages determine the display values for the page history link
-- or the move log link produced by the ${CURRENTVERSION} parameter.
-- It is possible to use banner parameters in these messages.
['current-version-move-display'] = 'current title',
['current-version-edit-display'] = 'current version',
--------------------------------------------------------------------------------
-- Talk page
--------------------------------------------------------------------------------
-- This message determines the display value of the talk page link produced
-- with the ${TALKPAGE} parameter.
-- It is possible to use banner parameters in this message.
['talk-page-link-display'] = 'talk page',
--------------------------------------------------------------------------------
-- Edit requests
--------------------------------------------------------------------------------
-- This message determines the display value of the edit request link produced
-- with the ${EDITREQUEST} parameter.
-- It is possible to use banner parameters in this message.
['edit-request-display'] = 'submit an edit request',
--------------------------------------------------------------------------------
-- Expiry date format
--------------------------------------------------------------------------------
-- This is the format for the blurb expiry date. It should be valid input for
-- the first parameter of the #time parser function.
['expiry-date-format'] = 'F j, Y "at" H:i e',
--------------------------------------------------------------------------------
-- Tracking categories
--------------------------------------------------------------------------------
-- These messages determine which tracking categories the module outputs.
['tracking-category-incorrect'] = 'Wikipedia pages with incorrect protection templates',
['tracking-category-template'] = 'Wikipedia template-protected pages other than templates and modules',
--------------------------------------------------------------------------------
-- Images
--------------------------------------------------------------------------------
-- These are images that are not defined by their protection action and protection level.
['image-filename-indef'] = 'Full-protection-shackle.svg',
['image-filename-default'] = 'Transparent.gif',
--------------------------------------------------------------------------------
-- End messages
--------------------------------------------------------------------------------
}
--------------------------------------------------------------------------------
-- End configuration
--------------------------------------------------------------------------------
}
a20552ae38cb5253a4fa29aa126abc74215a589f
Module:Sidebar
828
50
105
104
2023-09-14T01:11:44Z
Ilovethehitgameomori
2
1 revision imported
Scribunto
text/plain
require('strict')
local cfg = mw.loadData('Module:Sidebar/configuration')
local p = {}
local getArgs = require('Module:Arguments').getArgs
--[[
Categorizes calling templates and modules with a 'style' parameter of any sort
for tracking to convert to TemplateStyles.
TODO after a long cleanup: Catch sidebars in other namespaces than Template and Module.
TODO would probably want to remove /log and /archive as CS1 does
]]
local function categorizeTemplatesWithInlineStyles(args)
local title = mw.title.getCurrentTitle()
if title.namespace ~= 10 and title.namespace ~= 828 then return '' end
for _, pattern in ipairs (cfg.i18n.pattern.uncategorized_conversion_titles) do
if title.text:match(pattern) then return '' end
end
for key, _ in pairs(args) do
if mw.ustring.find(key, cfg.i18n.pattern.style_conversion) or key == 'width' then
return cfg.i18n.category.conversion
end
end
end
--[[
For compatibility with the original {{sidebar with collapsible lists}}
implementation, which passed some parameters through {{#if}} to trim their
whitespace. This also triggered the automatic newline behavior.
]]
-- See ([[meta:Help:Newlines and spaces#Automatic newline]])
local function trimAndAddAutomaticNewline(s)
s = mw.ustring.gsub(s, "^%s*(.-)%s*$", "%1")
if mw.ustring.find(s, '^[#*:;]') or mw.ustring.find(s, '^{|') then
return '\n' .. s
else
return s
end
end
--[[
Finds whether a sidebar has a subgroup sidebar.
]]
local function hasSubgroup(s)
if mw.ustring.find(s, cfg.i18n.pattern.subgroup) then
return true
else
return false
end
end
local function has_navbar(navbar_mode, sidebar_name)
return navbar_mode ~= cfg.i18n.navbar_none and
navbar_mode ~= cfg.i18n.navbar_off and
(
sidebar_name or
mw.getCurrentFrame():getParent():getTitle():gsub(cfg.i18n.pattern.sandbox, '') ~=
cfg.i18n.title_not_to_add_navbar
)
end
local function has_list_class(args, htmlclass)
local patterns = {
'^' .. htmlclass .. '$',
'%s' .. htmlclass .. '$',
'^' .. htmlclass .. '%s',
'%s' .. htmlclass .. '%s'
}
for arg, value in pairs(args) do
if type(arg) == 'string' and mw.ustring.find(arg, 'class') then
for _, pattern in ipairs(patterns) do
if mw.ustring.find(args[arg] or '', pattern) then
return true
end
end
end
end
return false
end
-- there are a lot of list classes in the wild, so we add their TemplateStyles
local function add_list_styles(args)
local frame = mw.getCurrentFrame()
local function add_list_templatestyles(htmlclass, templatestyles)
if has_list_class(args, htmlclass) then
return frame:extensionTag{
name = 'templatestyles', args = { src = templatestyles }
}
else
return ''
end
end
local plainlist_styles = add_list_templatestyles('plainlist', cfg.i18n.plainlist_templatestyles)
local hlist_styles = add_list_templatestyles('hlist', cfg.i18n.hlist_templatestyles)
-- a second workaround for [[phab:T303378]]
-- when that issue is fixed, we can actually use has_navbar not to emit the
-- tag here if we want
if has_navbar(args.navbar, args.name) and hlist_styles == '' then
hlist_styles = frame:extensionTag{
name = 'templatestyles', args = { src = cfg.i18n.hlist_templatestyles}
}
end
-- hlist -> plainlist is best-effort to preserve old Common.css ordering. [hlist_note]
return hlist_styles .. plainlist_styles
end
-- work around [[phab:T303378]]
-- for each arg: find all the templatestyles strip markers, insert them into a
-- table. then remove all templatestyles markers from the arg
local function move_hiding_templatestyles(args)
local gfind = string.gfind
local gsub = string.gsub
local templatestyles_markers = {}
local strip_marker_pattern = '(\127[^\127]*UNIQ%-%-templatestyles%-%x+%-QINU[^\127]*\127)'
for k, arg in pairs(args) do
for marker in gfind(arg, strip_marker_pattern) do
table.insert(templatestyles_markers, marker)
end
args[k] = gsub(arg, strip_marker_pattern, '')
end
return templatestyles_markers
end
--[[
Main sidebar function. Takes the frame, args, and an optional collapsibleClass.
The collapsibleClass is and should be used only for sidebars with collapsible
lists, as in p.collapsible.
]]
function p.sidebar(frame, args, collapsibleClass)
if not args then
args = getArgs(frame)
end
local hiding_templatestyles = table.concat(move_hiding_templatestyles(args))
local root = mw.html.create()
local child = args.child and mw.text.trim(args.child) == cfg.i18n.child_yes
root = root:tag('table')
if not child then
root
:addClass(cfg.i18n.class.sidebar)
-- force collapsibleclass to be sidebar-collapse otherwise output nothing
:addClass(collapsibleClass == cfg.i18n.class.collapse and cfg.i18n.class.collapse or nil)
:addClass('nomobile')
:addClass(args.float == cfg.i18n.float_none and cfg.i18n.class.float_none or nil)
:addClass(args.float == cfg.i18n.float_left and cfg.i18n.class.float_left or nil)
:addClass(args.wraplinks ~= cfg.i18n.wrap_true and cfg.i18n.class.wraplinks or nil)
:addClass(args.bodyclass or args.class)
:css('width', args.width or nil)
:cssText(args.bodystyle or args.style)
if args.outertitle then
root
:tag('caption')
:addClass(cfg.i18n.class.outer_title)
:addClass(args.outertitleclass)
:cssText(args.outertitlestyle)
:wikitext(args.outertitle)
end
if args.topimage then
local imageCell = root:tag('tr'):tag('td')
imageCell
:addClass(cfg.i18n.class.top_image)
:addClass(args.topimageclass)
:cssText(args.topimagestyle)
:wikitext(args.topimage)
if args.topcaption then
imageCell
:tag('div')
:addClass(cfg.i18n.class.top_caption)
:cssText(args.topcaptionstyle)
:wikitext(args.topcaption)
end
end
if args.pretitle then
root
:tag('tr')
:tag('td')
:addClass(args.topimage and cfg.i18n.class.pretitle_with_top_image
or cfg.i18n.class.pretitle)
:addClass(args.pretitleclass)
:cssText(args.basestyle)
:cssText(args.pretitlestyle)
:wikitext(args.pretitle)
end
else
root
:addClass(cfg.i18n.class.subgroup)
:addClass(args.bodyclass or args.class)
:cssText(args.bodystyle or args.style)
end
if args.title then
if child then
root
:wikitext(args.title)
else
root
:tag('tr')
:tag('th')
:addClass(args.pretitle and cfg.i18n.class.title_with_pretitle
or cfg.i18n.class.title)
:addClass(args.titleclass)
:cssText(args.basestyle)
:cssText(args.titlestyle)
:wikitext(args.title)
end
end
if args.image then
local imageCell = root:tag('tr'):tag('td')
imageCell
:addClass(cfg.i18n.class.image)
:addClass(args.imageclass)
:cssText(args.imagestyle)
:wikitext(args.image)
if args.caption then
imageCell
:tag('div')
:addClass(cfg.i18n.class.caption)
:cssText(args.captionstyle)
:wikitext(args.caption)
end
end
if args.above then
root
:tag('tr')
:tag('td')
:addClass(cfg.i18n.class.above)
:addClass(args.aboveclass)
:cssText(args.abovestyle)
:newline() -- newline required for bullet-points to work
:wikitext(args.above)
end
local rowNums = {}
for k, v in pairs(args) do
k = '' .. k
local num = k:match('^heading(%d+)$') or k:match('^content(%d+)$')
if num then table.insert(rowNums, tonumber(num)) end
end
table.sort(rowNums)
-- remove duplicates from the list (e.g. 3 will be duplicated if both heading3
-- and content3 are specified)
for i = #rowNums, 1, -1 do
if rowNums[i] == rowNums[i - 1] then
table.remove(rowNums, i)
end
end
for i, num in ipairs(rowNums) do
local heading = args['heading' .. num]
if heading then
root
:tag('tr')
:tag('th')
:addClass(cfg.i18n.class.heading)
:addClass(args.headingclass)
:addClass(args['heading' .. num .. 'class'])
:cssText(args.basestyle)
:cssText(args.headingstyle)
:cssText(args['heading' .. num .. 'style'])
:newline()
:wikitext(heading)
end
local content = args['content' .. num]
if content then
root
:tag('tr')
:tag('td')
:addClass(hasSubgroup(content) and cfg.i18n.class.content_with_subgroup
or cfg.i18n.class.content)
:addClass(args.contentclass)
:addClass(args['content' .. num .. 'class'])
:cssText(args.contentstyle)
:cssText(args['content' .. num .. 'style'])
:newline()
:wikitext(content)
:done()
-- Without a linebreak after the </td>, a nested list like
-- "* {{hlist| ...}}" doesn't parse correctly.
:newline()
end
end
if args.below then
root
:tag('tr')
:tag('td')
:addClass(cfg.i18n.class.below)
:addClass(args.belowclass)
:cssText(args.belowstyle)
:newline()
:wikitext(args.below)
end
if not child and has_navbar(args.navbar, args.name) then
root
:tag('tr')
:tag('td')
:addClass(cfg.i18n.class.navbar)
:cssText(args.navbarstyle)
:wikitext(require('Module:Navbar')._navbar{
args.name,
mini = 1,
fontstyle = args.navbarfontstyle
})
end
local base_templatestyles = frame:extensionTag{
name = 'templatestyles', args = { src = cfg.i18n.templatestyles }
}
local templatestyles = ''
if args['templatestyles'] and args['templatestyles'] ~= '' then
templatestyles = frame:extensionTag{
name = 'templatestyles', args = { src = args['templatestyles'] }
}
end
local child_templatestyles = ''
if args['child templatestyles'] and args['child templatestyles'] ~= '' then
child_templatestyles = frame:extensionTag{
name = 'templatestyles', args = { src = args['child templatestyles'] }
}
end
local grandchild_templatestyles = ''
if args['grandchild templatestyles'] and args['grandchild templatestyles'] ~= '' then
grandchild_templatestyles = frame:extensionTag{
name = 'templatestyles', args = { src = args['grandchild templatestyles'] }
}
end
return table.concat({
add_list_styles(args), -- see [hlist_note] above about ordering
base_templatestyles,
templatestyles,
child_templatestyles,
grandchild_templatestyles,
hiding_templatestyles,
tostring(root),
(child and cfg.i18n.category.child or ''),
categorizeTemplatesWithInlineStyles(args)
})
end
local function list_title(args, is_centered_list_titles, num)
local title_text = trimAndAddAutomaticNewline(args['list' .. num .. 'title']
or cfg.i18n.default_list_title)
local title
if is_centered_list_titles then
-- collapsible can be finicky, so provide some CSS/HTML to support
title = mw.html.create('div')
:addClass(cfg.i18n.class.list_title_centered)
:wikitext(title_text)
else
title = mw.html.create()
:wikitext(title_text)
end
local title_container = mw.html.create('div')
:addClass(cfg.i18n.class.list_title)
-- don't /need/ a listnumtitleclass because you can do
-- .templateclass .listnumclass .sidebar-list-title
:addClass(args.listtitleclass)
:cssText(args.basestyle)
:cssText(args.listtitlestyle)
:cssText(args['list' .. num .. 'titlestyle'])
:node(title)
:done()
return title_container
end
--[[
Main entry point for sidebar with collapsible lists.
Does the work of creating the collapsible lists themselves and including them
into the args.
]]
function p.collapsible(frame)
local args = getArgs(frame)
if not args.name and
frame:getParent():getTitle():gsub(cfg.i18n.pattern.collapse_sandbox, '') ==
cfg.i18n.collapse_title_not_to_add_navbar then
args.navbar = cfg.i18n.navbar_none
end
local contentArgs = {}
local is_centered_list_titles = false
if args['centered list titles'] and args['centered list titles'] ~= '' then
is_centered_list_titles = true
end
for k, v in pairs(args) do
local num = string.match(k, '^list(%d+)$')
if num then
local expand = args.expanded and
(args.expanded == 'all' or args.expanded == args['list' .. num .. 'name'])
local row = mw.html.create('div')
row
:addClass(cfg.i18n.class.list)
:addClass('mw-collapsible')
:addClass((not expand) and 'mw-collapsed' or nil)
:addClass(args['list' .. num .. 'class'])
:cssText(args.listframestyle)
:cssText(args['list' .. num .. 'framestyle'])
:node(list_title(args, is_centered_list_titles, num))
:tag('div')
:addClass(cfg.i18n.class.list_content)
:addClass('mw-collapsible-content')
-- don't /need/ a listnumstyleclass because you can do
-- .templatename .listnumclass .sidebar-list
:addClass(args.listclass)
:cssText(args.liststyle)
:cssText(args['list' .. num .. 'style'])
:wikitext(trimAndAddAutomaticNewline(args['list' .. num]))
contentArgs['content' .. num] = tostring(row)
end
end
for k, v in pairs(contentArgs) do
args[k] = v
end
return p.sidebar(frame, args, cfg.i18n.class.collapse)
end
return p
71fe765846593e025ca2f94371315e9dbb5bb4d2
Module:Sidebar/configuration
828
51
107
106
2023-09-14T01:11:44Z
Ilovethehitgameomori
2
1 revision imported
Scribunto
text/plain
return {
i18n = {
child_yes = 'yes',
float_none = 'none',
float_left = 'left',
wrap_true = 'true',
navbar_none = 'none',
navbar_off = 'off',
default_list_title = 'List',
title_not_to_add_navbar = 'Template:Sidebar',
collapse_title_not_to_add_navbar = 'Template:Sidebar with collapsible lists',
templatestyles = 'Module:Sidebar/styles.css',
hlist_templatestyles = 'Hlist/styles.css',
plainlist_templatestyles = 'Plainlist/styles.css',
category = {
child = '[[Category:Pages using sidebar with the child parameter]]',
conversion = '[[Category:Sidebars with styles needing conversion]]'
},
pattern = {
collapse_sandbox = '/sandbox$',
sandbox = '/sandbox$',
subgroup = 'sidebar%-subgroup',
style_conversion = 'style$',
uncategorized_conversion_titles = {
'/[Ss]andbox',
'/[Tt]estcases',
'/[Dd]oc$'
}
},
class = {
sidebar = 'sidebar',
subgroup = 'sidebar-subgroup',
collapse = 'sidebar-collapse',
float_none = 'sidebar-none',
float_left = 'sidebar-left',
wraplinks = 'nowraplinks',
outer_title = 'sidebar-outer-title',
top_image = 'sidebar-top-image',
top_caption = 'sidebar-top-caption',
pretitle = 'sidebar-pretitle',
pretitle_with_top_image = 'sidebar-pretitle-with-top-image',
title = 'sidebar-title',
title_with_pretitle = 'sidebar-title-with-pretitle',
image = 'sidebar-image',
caption = 'sidebar-caption',
above = 'sidebar-above',
heading = 'sidebar-heading',
content = 'sidebar-content',
content_with_subgroup = 'sidebar-content-with-subgroup',
below = 'sidebar-below',
navbar = 'sidebar-navbar',
list = 'sidebar-list',
list_title = 'sidebar-list-title',
list_title_centered = 'sidebar-list-title-c',
list_content = 'sidebar-list-content'
}
}
}
dc2a980ac2162a898f7c21e6d6ba7e994dfeb315
Template:Div col
10
53
111
110
2023-09-14T01:11:46Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
<includeonly><templatestyles src="Div col/styles.css"/><!--
--><div class="div-col {{#ifeq:{{{small|}}}|yes|div-col-small}} {{#ifeq:{{{rules|}}}|yes|div-col-rules}} {{{class|}}}" <!--
-->{{#if:{{{colwidth|}}}{{{gap|}}}{{{style|}}}|<!--
-->style="{{#if:{{{colwidth|}}}|column-width: {{{colwidth}}};}}{{#if:{{{gap|}}}|column-gap: {{{gap}}};}}{{#if:{{{style|}}}|{{{style}}}}}"<!--
-->}}><!--
-->{{#if:{{{content|}}}|{{{content}}}</div>}}<!-- Inventory how many pages use small=yes
-->{{#ifeq:{{{small|}}}|yes|[[Category:Pages using div col with small parameter]]}}<!--
--></includeonly>{{#invoke:Check for unknown parameters|check|unknown={{main other|[[Category:Pages using div col with unknown parameters|_VALUE_{{PAGENAME}}]]}}|preview=Page using [[Template:Div col]] with unknown parameter "_VALUE_"; use colwidth= to specify column size |ignoreblank=y | class | colwidth | content | gap | rules | small | style }}<noinclude>
{{Documentation}}
</noinclude>
6e84133dd867d6c701e7b161878cf66665bb7eb7
Template:Div col end
10
55
115
114
2023-09-14T01:11:47Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
<includeonly></div></includeonly><noinclude>
{{Documentation|Template:Div col/doc}}
</noinclude>
78088d41c21d779e3722f220fcc9773dfbbc1e4f
Template:Yesno-no
10
56
117
116
2023-09-14T01:11:47Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{safesubst:<noinclude />yesno|{{{1}}}|yes={{{yes|yes}}}|no={{{no|no}}}|blank={{{blank|no}}}|¬={{{¬|no}}}|def={{{def|no}}}}}<noinclude>
{{Documentation|Template:Yesno/doc}}
<!--Categories go in the doc page referenced above; interwikis go in Wikidata.-->
</noinclude>
1ad7b7800da1b867ead8f6ff8cef76e6201b3b56
Template:Para
10
57
119
118
2023-09-14T01:11:48Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
<code class="tpl-para" style="word-break:break-word;{{SAFESUBST:<noinclude />#if:{{{plain|}}}|border: none; background-color: inherit;}} {{SAFESUBST:<noinclude />#if:{{{plain|}}}{{{mxt|}}}{{{green|}}}{{{!mxt|}}}{{{red|}}}|color: {{SAFESUBST:<noinclude />#if:{{{mxt|}}}{{{green|}}}|#006400|{{SAFESUBST:<noinclude />#if:{{{!mxt|}}}{{{red|}}}|#8B0000|inherit}}}};}} {{SAFESUBST:<noinclude />#if:{{{style|}}}|{{{style}}}}}">|{{SAFESUBST:<noinclude />#if:{{{1|}}}|{{{1}}}=}}{{{2|}}}</code><noinclude>
{{Documentation}}
<!--Categories and interwikis go near the bottom of the /doc subpage.-->
</noinclude>
06006deea2ed5d552aab61b4332321ab749ae7e8
Template:Documentation
10
58
121
120
2023-09-14T01:11:48Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{#invoke:documentation|main|_content={{ {{#invoke:documentation|contentTitle}}}}}}<noinclude>
<!-- Add categories to the /doc subpage -->
</noinclude>
9e62b964e96c4e3d478edecbfcb3c0338ae8a276
Module:Documentation
828
59
123
122
2023-09-14T01:11:48Z
Ilovethehitgameomori
2
1 revision imported
Scribunto
text/plain
-- This module implements {{documentation}}.
-- Get required modules.
local getArgs = require('Module:Arguments').getArgs
-- Get the config table.
local cfg = mw.loadData('Module:Documentation/config')
local p = {}
-- Often-used functions.
local ugsub = mw.ustring.gsub
local format = mw.ustring.format
----------------------------------------------------------------------------
-- Helper functions
--
-- These are defined as local functions, but are made available in the p
-- table for testing purposes.
----------------------------------------------------------------------------
local function message(cfgKey, valArray, expectType)
--[[
-- Gets a message from the cfg table and formats it if appropriate.
-- The function raises an error if the value from the cfg table is not
-- of the type expectType. The default type for expectType is 'string'.
-- If the table valArray is present, strings such as $1, $2 etc. in the
-- message are substituted with values from the table keys [1], [2] etc.
-- For example, if the message "foo-message" had the value 'Foo $2 bar $1.',
-- message('foo-message', {'baz', 'qux'}) would return "Foo qux bar baz."
--]]
local msg = cfg[cfgKey]
expectType = expectType or 'string'
if type(msg) ~= expectType then
error('message: type error in message cfg.' .. cfgKey .. ' (' .. expectType .. ' expected, got ' .. type(msg) .. ')', 2)
end
if not valArray then
return msg
end
local function getMessageVal(match)
match = tonumber(match)
return valArray[match] or error('message: no value found for key $' .. match .. ' in message cfg.' .. cfgKey, 4)
end
return ugsub(msg, '$([1-9][0-9]*)', getMessageVal)
end
p.message = message
local function makeWikilink(page, display)
if display then
return format('[[%s|%s]]', page, display)
else
return format('[[%s]]', page)
end
end
p.makeWikilink = makeWikilink
local function makeCategoryLink(cat, sort)
local catns = mw.site.namespaces[14].name
return makeWikilink(catns .. ':' .. cat, sort)
end
p.makeCategoryLink = makeCategoryLink
local function makeUrlLink(url, display)
return format('[%s %s]', url, display)
end
p.makeUrlLink = makeUrlLink
local function makeToolbar(...)
local ret = {}
local lim = select('#', ...)
if lim < 1 then
return nil
end
for i = 1, lim do
ret[#ret + 1] = select(i, ...)
end
-- 'documentation-toolbar'
return format(
'<span class="%s">(%s)</span>',
message('toolbar-class'),
table.concat(ret, ' | ')
)
end
p.makeToolbar = makeToolbar
----------------------------------------------------------------------------
-- Argument processing
----------------------------------------------------------------------------
local function makeInvokeFunc(funcName)
return function (frame)
local args = getArgs(frame, {
valueFunc = function (key, value)
if type(value) == 'string' then
value = value:match('^%s*(.-)%s*$') -- Remove whitespace.
if key == 'heading' or value ~= '' then
return value
else
return nil
end
else
return value
end
end
})
return p[funcName](args)
end
end
----------------------------------------------------------------------------
-- Entry points
----------------------------------------------------------------------------
function p.nonexistent(frame)
if mw.title.getCurrentTitle().subpageText == 'testcases' then
return frame:expandTemplate{title = 'module test cases notice'}
else
return p.main(frame)
end
end
p.main = makeInvokeFunc('_main')
function p._main(args)
--[[
-- This function defines logic flow for the module.
-- @args - table of arguments passed by the user
--]]
local env = p.getEnvironment(args)
local root = mw.html.create()
root
:wikitext(p._getModuleWikitext(args, env))
:wikitext(p.protectionTemplate(env))
:wikitext(p.sandboxNotice(args, env))
:tag('div')
-- 'documentation-container'
:addClass(message('container'))
:attr('role', 'complementary')
:attr('aria-labelledby', args.heading ~= '' and 'documentation-heading' or nil)
:attr('aria-label', args.heading == '' and 'Documentation' or nil)
:newline()
:tag('div')
-- 'documentation'
:addClass(message('main-div-classes'))
:newline()
:wikitext(p._startBox(args, env))
:wikitext(p._content(args, env))
:tag('div')
-- 'documentation-clear'
:addClass(message('clear'))
:done()
:newline()
:done()
:wikitext(p._endBox(args, env))
:done()
:wikitext(p.addTrackingCategories(env))
-- 'Module:Documentation/styles.css'
return mw.getCurrentFrame():extensionTag (
'templatestyles', '', {src=cfg['templatestyles']
}) .. tostring(root)
end
----------------------------------------------------------------------------
-- Environment settings
----------------------------------------------------------------------------
function p.getEnvironment(args)
--[[
-- Returns a table with information about the environment, including title
-- objects and other namespace- or path-related data.
-- @args - table of arguments passed by the user
--
-- Title objects include:
-- env.title - the page we are making documentation for (usually the current title)
-- env.templateTitle - the template (or module, file, etc.)
-- env.docTitle - the /doc subpage.
-- env.sandboxTitle - the /sandbox subpage.
-- env.testcasesTitle - the /testcases subpage.
--
-- Data includes:
-- env.protectionLevels - the protection levels table of the title object.
-- env.subjectSpace - the number of the title's subject namespace.
-- env.docSpace - the number of the namespace the title puts its documentation in.
-- env.docpageBase - the text of the base page of the /doc, /sandbox and /testcases pages, with namespace.
-- env.compareUrl - URL of the Special:ComparePages page comparing the sandbox with the template.
--
-- All table lookups are passed through pcall so that errors are caught. If an error occurs, the value
-- returned will be nil.
--]]
local env, envFuncs = {}, {}
-- Set up the metatable. If triggered we call the corresponding function in the envFuncs table. The value
-- returned by that function is memoized in the env table so that we don't call any of the functions
-- more than once. (Nils won't be memoized.)
setmetatable(env, {
__index = function (t, key)
local envFunc = envFuncs[key]
if envFunc then
local success, val = pcall(envFunc)
if success then
env[key] = val -- Memoise the value.
return val
end
end
return nil
end
})
function envFuncs.title()
-- The title object for the current page, or a test page passed with args.page.
local title
local titleArg = args.page
if titleArg then
title = mw.title.new(titleArg)
else
title = mw.title.getCurrentTitle()
end
return title
end
function envFuncs.templateTitle()
--[[
-- The template (or module, etc.) title object.
-- Messages:
-- 'sandbox-subpage' --> 'sandbox'
-- 'testcases-subpage' --> 'testcases'
--]]
local subjectSpace = env.subjectSpace
local title = env.title
local subpage = title.subpageText
if subpage == message('sandbox-subpage') or subpage == message('testcases-subpage') then
return mw.title.makeTitle(subjectSpace, title.baseText)
else
return mw.title.makeTitle(subjectSpace, title.text)
end
end
function envFuncs.docTitle()
--[[
-- Title object of the /doc subpage.
-- Messages:
-- 'doc-subpage' --> 'doc'
--]]
local title = env.title
local docname = args[1] -- User-specified doc page.
local docpage
if docname then
docpage = docname
else
docpage = env.docpageBase .. '/' .. message('doc-subpage')
end
return mw.title.new(docpage)
end
function envFuncs.sandboxTitle()
--[[
-- Title object for the /sandbox subpage.
-- Messages:
-- 'sandbox-subpage' --> 'sandbox'
--]]
return mw.title.new(env.docpageBase .. '/' .. message('sandbox-subpage'))
end
function envFuncs.testcasesTitle()
--[[
-- Title object for the /testcases subpage.
-- Messages:
-- 'testcases-subpage' --> 'testcases'
--]]
return mw.title.new(env.docpageBase .. '/' .. message('testcases-subpage'))
end
function envFuncs.protectionLevels()
-- The protection levels table of the title object.
return env.title.protectionLevels
end
function envFuncs.subjectSpace()
-- The subject namespace number.
return mw.site.namespaces[env.title.namespace].subject.id
end
function envFuncs.docSpace()
-- The documentation namespace number. For most namespaces this is the
-- same as the subject namespace. However, pages in the Article, File,
-- MediaWiki or Category namespaces must have their /doc, /sandbox and
-- /testcases pages in talk space.
local subjectSpace = env.subjectSpace
if subjectSpace == 0 or subjectSpace == 6 or subjectSpace == 8 or subjectSpace == 14 then
return subjectSpace + 1
else
return subjectSpace
end
end
function envFuncs.docpageBase()
-- The base page of the /doc, /sandbox, and /testcases subpages.
-- For some namespaces this is the talk page, rather than the template page.
local templateTitle = env.templateTitle
local docSpace = env.docSpace
local docSpaceText = mw.site.namespaces[docSpace].name
-- Assemble the link. docSpace is never the main namespace, so we can hardcode the colon.
return docSpaceText .. ':' .. templateTitle.text
end
function envFuncs.compareUrl()
-- Diff link between the sandbox and the main template using [[Special:ComparePages]].
local templateTitle = env.templateTitle
local sandboxTitle = env.sandboxTitle
if templateTitle.exists and sandboxTitle.exists then
local compareUrl = mw.uri.canonicalUrl(
'Special:ComparePages',
{ page1 = templateTitle.prefixedText, page2 = sandboxTitle.prefixedText}
)
return tostring(compareUrl)
else
return nil
end
end
return env
end
----------------------------------------------------------------------------
-- Auxiliary templates
----------------------------------------------------------------------------
p.getModuleWikitext = makeInvokeFunc('_getModuleWikitext')
function p._getModuleWikitext(args, env)
local currentTitle = mw.title.getCurrentTitle()
if currentTitle.contentModel ~= 'Scribunto' then return end
pcall(require, currentTitle.prefixedText) -- if it fails, we don't care
local moduleWikitext = package.loaded["Module:Module wikitext"]
if moduleWikitext then
return moduleWikitext.main()
end
end
function p.sandboxNotice(args, env)
--[=[
-- Generates a sandbox notice for display above sandbox pages.
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
--
-- Messages:
-- 'sandbox-notice-image' --> '[[File:Sandbox.svg|50px|alt=|link=]]'
-- 'sandbox-notice-blurb' --> 'This is the $1 for $2.'
-- 'sandbox-notice-diff-blurb' --> 'This is the $1 for $2 ($3).'
-- 'sandbox-notice-pagetype-template' --> '[[Wikipedia:Template test cases|template sandbox]] page'
-- 'sandbox-notice-pagetype-module' --> '[[Wikipedia:Template test cases|module sandbox]] page'
-- 'sandbox-notice-pagetype-other' --> 'sandbox page'
-- 'sandbox-notice-compare-link-display' --> 'diff'
-- 'sandbox-notice-testcases-blurb' --> 'See also the companion subpage for $1.'
-- 'sandbox-notice-testcases-link-display' --> 'test cases'
-- 'sandbox-category' --> 'Template sandboxes'
--]=]
local title = env.title
local sandboxTitle = env.sandboxTitle
local templateTitle = env.templateTitle
local subjectSpace = env.subjectSpace
if not (subjectSpace and title and sandboxTitle and templateTitle
and mw.title.equals(title, sandboxTitle)) then
return nil
end
-- Build the table of arguments to pass to {{ombox}}. We need just two fields, "image" and "text".
local omargs = {}
omargs.image = message('sandbox-notice-image')
-- Get the text. We start with the opening blurb, which is something like
-- "This is the template sandbox for [[Template:Foo]] (diff)."
local text = ''
local pagetype
if subjectSpace == 10 then
pagetype = message('sandbox-notice-pagetype-template')
elseif subjectSpace == 828 then
pagetype = message('sandbox-notice-pagetype-module')
else
pagetype = message('sandbox-notice-pagetype-other')
end
local templateLink = makeWikilink(templateTitle.prefixedText)
local compareUrl = env.compareUrl
if compareUrl then
local compareDisplay = message('sandbox-notice-compare-link-display')
local compareLink = makeUrlLink(compareUrl, compareDisplay)
text = text .. message('sandbox-notice-diff-blurb', {pagetype, templateLink, compareLink})
else
text = text .. message('sandbox-notice-blurb', {pagetype, templateLink})
end
-- Get the test cases page blurb if the page exists. This is something like
-- "See also the companion subpage for [[Template:Foo/testcases|test cases]]."
local testcasesTitle = env.testcasesTitle
if testcasesTitle and testcasesTitle.exists then
if testcasesTitle.contentModel == "Scribunto" then
local testcasesLinkDisplay = message('sandbox-notice-testcases-link-display')
local testcasesRunLinkDisplay = message('sandbox-notice-testcases-run-link-display')
local testcasesLink = makeWikilink(testcasesTitle.prefixedText, testcasesLinkDisplay)
local testcasesRunLink = makeWikilink(testcasesTitle.talkPageTitle.prefixedText, testcasesRunLinkDisplay)
text = text .. '<br />' .. message('sandbox-notice-testcases-run-blurb', {testcasesLink, testcasesRunLink})
else
local testcasesLinkDisplay = message('sandbox-notice-testcases-link-display')
local testcasesLink = makeWikilink(testcasesTitle.prefixedText, testcasesLinkDisplay)
text = text .. '<br />' .. message('sandbox-notice-testcases-blurb', {testcasesLink})
end
end
-- Add the sandbox to the sandbox category.
omargs.text = text .. makeCategoryLink(message('sandbox-category'))
-- 'documentation-clear'
return '<div class="' .. message('clear') .. '"></div>'
.. require('Module:Message box').main('ombox', omargs)
end
function p.protectionTemplate(env)
-- Generates the padlock icon in the top right.
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
-- Messages:
-- 'protection-template' --> 'pp-template'
-- 'protection-template-args' --> {docusage = 'yes'}
local protectionLevels = env.protectionLevels
if not protectionLevels then
return nil
end
local editProt = protectionLevels.edit and protectionLevels.edit[1]
local moveProt = protectionLevels.move and protectionLevels.move[1]
if editProt then
-- The page is edit-protected.
return require('Module:Protection banner')._main{
message('protection-reason-edit'), small = true
}
elseif moveProt and moveProt ~= 'autoconfirmed' then
-- The page is move-protected but not edit-protected. Exclude move
-- protection with the level "autoconfirmed", as this is equivalent to
-- no move protection at all.
return require('Module:Protection banner')._main{
action = 'move', small = true
}
else
return nil
end
end
----------------------------------------------------------------------------
-- Start box
----------------------------------------------------------------------------
p.startBox = makeInvokeFunc('_startBox')
function p._startBox(args, env)
--[[
-- This function generates the start box.
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
--
-- The actual work is done by p.makeStartBoxLinksData and p.renderStartBoxLinks which make
-- the [view] [edit] [history] [purge] links, and by p.makeStartBoxData and p.renderStartBox
-- which generate the box HTML.
--]]
env = env or p.getEnvironment(args)
local links
local content = args.content
if not content or args[1] then
-- No need to include the links if the documentation is on the template page itself.
local linksData = p.makeStartBoxLinksData(args, env)
if linksData then
links = p.renderStartBoxLinks(linksData)
end
end
-- Generate the start box html.
local data = p.makeStartBoxData(args, env, links)
if data then
return p.renderStartBox(data)
else
-- User specified no heading.
return nil
end
end
function p.makeStartBoxLinksData(args, env)
--[[
-- Does initial processing of data to make the [view] [edit] [history] [purge] links.
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
--
-- Messages:
-- 'view-link-display' --> 'view'
-- 'edit-link-display' --> 'edit'
-- 'history-link-display' --> 'history'
-- 'purge-link-display' --> 'purge'
-- 'module-preload' --> 'Template:Documentation/preload-module-doc'
-- 'docpage-preload' --> 'Template:Documentation/preload'
-- 'create-link-display' --> 'create'
--]]
local subjectSpace = env.subjectSpace
local title = env.title
local docTitle = env.docTitle
if not title or not docTitle then
return nil
end
if docTitle.isRedirect then
docTitle = docTitle.redirectTarget
end
-- Create link if /doc doesn't exist.
local preload = args.preload
if not preload then
if subjectSpace == 828 then -- Module namespace
preload = message('module-preload')
else
preload = message('docpage-preload')
end
end
return {
title = title,
docTitle = docTitle,
-- View, display, edit, and purge links if /doc exists.
viewLinkDisplay = message('view-link-display'),
editLinkDisplay = message('edit-link-display'),
historyLinkDisplay = message('history-link-display'),
purgeLinkDisplay = message('purge-link-display'),
preload = preload,
createLinkDisplay = message('create-link-display')
}
end
function p.renderStartBoxLinks(data)
--[[
-- Generates the [view][edit][history][purge] or [create][purge] links from the data table.
-- @data - a table of data generated by p.makeStartBoxLinksData
--]]
local docTitle = data.docTitle
-- yes, we do intend to purge the template page on which the documentation appears
local purgeLink = makeWikilink("Special:Purge/" .. data.title.prefixedText, data.purgeLinkDisplay)
if docTitle.exists then
local viewLink = makeWikilink(docTitle.prefixedText, data.viewLinkDisplay)
local editLink = makeWikilink("Special:EditPage/" .. docTitle.prefixedText, data.editLinkDisplay)
local historyLink = makeWikilink("Special:PageHistory/" .. docTitle.prefixedText, data.historyLinkDisplay)
return "[" .. viewLink .. "] [" .. editLink .. "] [" .. historyLink .. "] [" .. purgeLink .. "]"
else
local createLink = makeUrlLink(docTitle:canonicalUrl{action = 'edit', preload = data.preload}, data.createLinkDisplay)
return "[" .. createLink .. "] [" .. purgeLink .. "]"
end
return ret
end
function p.makeStartBoxData(args, env, links)
--[=[
-- Does initial processing of data to pass to the start-box render function, p.renderStartBox.
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
-- @links - a string containing the [view][edit][history][purge] links - could be nil if there's an error.
--
-- Messages:
-- 'documentation-icon-wikitext' --> '[[File:Test Template Info-Icon - Version (2).svg|50px|link=|alt=]]'
-- 'template-namespace-heading' --> 'Template documentation'
-- 'module-namespace-heading' --> 'Module documentation'
-- 'file-namespace-heading' --> 'Summary'
-- 'other-namespaces-heading' --> 'Documentation'
-- 'testcases-create-link-display' --> 'create'
--]=]
local subjectSpace = env.subjectSpace
if not subjectSpace then
-- Default to an "other namespaces" namespace, so that we get at least some output
-- if an error occurs.
subjectSpace = 2
end
local data = {}
-- Heading
local heading = args.heading -- Blank values are not removed.
if heading == '' then
-- Don't display the start box if the heading arg is defined but blank.
return nil
end
if heading then
data.heading = heading
elseif subjectSpace == 10 then -- Template namespace
data.heading = message('documentation-icon-wikitext') .. ' ' .. message('template-namespace-heading')
elseif subjectSpace == 828 then -- Module namespace
data.heading = message('documentation-icon-wikitext') .. ' ' .. message('module-namespace-heading')
elseif subjectSpace == 6 then -- File namespace
data.heading = message('file-namespace-heading')
else
data.heading = message('other-namespaces-heading')
end
-- Heading CSS
local headingStyle = args['heading-style']
if headingStyle then
data.headingStyleText = headingStyle
else
-- 'documentation-heading'
data.headingClass = message('main-div-heading-class')
end
-- Data for the [view][edit][history][purge] or [create] links.
if links then
-- 'mw-editsection-like plainlinks'
data.linksClass = message('start-box-link-classes')
data.links = links
end
return data
end
function p.renderStartBox(data)
-- Renders the start box html.
-- @data - a table of data generated by p.makeStartBoxData.
local sbox = mw.html.create('div')
sbox
-- 'documentation-startbox'
:addClass(message('start-box-class'))
:newline()
:tag('span')
:addClass(data.headingClass)
:attr('id', 'documentation-heading')
:cssText(data.headingStyleText)
:wikitext(data.heading)
local links = data.links
if links then
sbox:tag('span')
:addClass(data.linksClass)
:attr('id', data.linksId)
:wikitext(links)
end
return tostring(sbox)
end
----------------------------------------------------------------------------
-- Documentation content
----------------------------------------------------------------------------
p.content = makeInvokeFunc('_content')
function p._content(args, env)
-- Displays the documentation contents
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
env = env or p.getEnvironment(args)
local docTitle = env.docTitle
local content = args.content
if not content and docTitle and docTitle.exists then
content = args._content or mw.getCurrentFrame():expandTemplate{title = docTitle.prefixedText}
end
-- The line breaks below are necessary so that "=== Headings ===" at the start and end
-- of docs are interpreted correctly.
return '\n' .. (content or '') .. '\n'
end
p.contentTitle = makeInvokeFunc('_contentTitle')
function p._contentTitle(args, env)
env = env or p.getEnvironment(args)
local docTitle = env.docTitle
if not args.content and docTitle and docTitle.exists then
return docTitle.prefixedText
else
return ''
end
end
----------------------------------------------------------------------------
-- End box
----------------------------------------------------------------------------
p.endBox = makeInvokeFunc('_endBox')
function p._endBox(args, env)
--[=[
-- This function generates the end box (also known as the link box).
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
--
--]=]
-- Get environment data.
env = env or p.getEnvironment(args)
local subjectSpace = env.subjectSpace
local docTitle = env.docTitle
if not subjectSpace or not docTitle then
return nil
end
-- Check whether we should output the end box at all. Add the end
-- box by default if the documentation exists or if we are in the
-- user, module or template namespaces.
local linkBox = args['link box']
if linkBox == 'off'
or not (
docTitle.exists
or subjectSpace == 2
or subjectSpace == 828
or subjectSpace == 10
)
then
return nil
end
-- Assemble the link box.
local text = ''
if linkBox then
text = text .. linkBox
else
text = text .. (p.makeDocPageBlurb(args, env) or '') -- "This documentation is transcluded from [[Foo]]."
if subjectSpace == 2 or subjectSpace == 10 or subjectSpace == 828 then
-- We are in the user, template or module namespaces.
-- Add sandbox and testcases links.
-- "Editors can experiment in this template's sandbox and testcases pages."
text = text .. (p.makeExperimentBlurb(args, env) or '') .. '<br />'
if not args.content and not args[1] then
-- "Please add categories to the /doc subpage."
-- Don't show this message with inline docs or with an explicitly specified doc page,
-- as then it is unclear where to add the categories.
text = text .. (p.makeCategoriesBlurb(args, env) or '')
end
text = text .. ' ' .. (p.makeSubpagesBlurb(args, env) or '') --"Subpages of this template"
end
end
local box = mw.html.create('div')
-- 'documentation-metadata'
box:attr('role', 'note')
:addClass(message('end-box-class'))
-- 'plainlinks'
:addClass(message('end-box-plainlinks'))
:wikitext(text)
:done()
return '\n' .. tostring(box)
end
function p.makeDocPageBlurb(args, env)
--[=[
-- Makes the blurb "This documentation is transcluded from [[Template:Foo]] (edit, history)".
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
--
-- Messages:
-- 'edit-link-display' --> 'edit'
-- 'history-link-display' --> 'history'
-- 'transcluded-from-blurb' -->
-- 'The above [[Wikipedia:Template documentation|documentation]]
-- is [[Help:Transclusion|transcluded]] from $1.'
-- 'module-preload' --> 'Template:Documentation/preload-module-doc'
-- 'create-link-display' --> 'create'
-- 'create-module-doc-blurb' -->
-- 'You might want to $1 a documentation page for this [[Wikipedia:Lua|Scribunto module]].'
--]=]
local docTitle = env.docTitle
if not docTitle then
return nil
end
local ret
if docTitle.exists then
-- /doc exists; link to it.
local docLink = makeWikilink(docTitle.prefixedText)
local editDisplay = message('edit-link-display')
local editLink = makeWikilink("Special:EditPage/" .. docTitle.prefixedText, editDisplay)
local historyDisplay = message('history-link-display')
local historyLink = makeWikilink("Special:PageHistory/" .. docTitle.prefixedText, historyDisplay)
ret = message('transcluded-from-blurb', {docLink})
.. ' '
.. makeToolbar(editLink, historyLink)
.. '<br />'
elseif env.subjectSpace == 828 then
-- /doc does not exist; ask to create it.
local createUrl = docTitle:canonicalUrl{action = 'edit', preload = message('module-preload')}
local createDisplay = message('create-link-display')
local createLink = makeUrlLink(createUrl, createDisplay)
ret = message('create-module-doc-blurb', {createLink})
.. '<br />'
end
return ret
end
function p.makeExperimentBlurb(args, env)
--[[
-- Renders the text "Editors can experiment in this template's sandbox (edit | diff) and testcases (edit) pages."
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
--
-- Messages:
-- 'sandbox-link-display' --> 'sandbox'
-- 'sandbox-edit-link-display' --> 'edit'
-- 'compare-link-display' --> 'diff'
-- 'module-sandbox-preload' --> 'Template:Documentation/preload-module-sandbox'
-- 'template-sandbox-preload' --> 'Template:Documentation/preload-sandbox'
-- 'sandbox-create-link-display' --> 'create'
-- 'mirror-edit-summary' --> 'Create sandbox version of $1'
-- 'mirror-link-display' --> 'mirror'
-- 'mirror-link-preload' --> 'Template:Documentation/mirror'
-- 'sandbox-link-display' --> 'sandbox'
-- 'testcases-link-display' --> 'testcases'
-- 'testcases-edit-link-display'--> 'edit'
-- 'template-sandbox-preload' --> 'Template:Documentation/preload-sandbox'
-- 'testcases-create-link-display' --> 'create'
-- 'testcases-link-display' --> 'testcases'
-- 'testcases-edit-link-display' --> 'edit'
-- 'module-testcases-preload' --> 'Template:Documentation/preload-module-testcases'
-- 'template-testcases-preload' --> 'Template:Documentation/preload-testcases'
-- 'experiment-blurb-module' --> 'Editors can experiment in this module's $1 and $2 pages.'
-- 'experiment-blurb-template' --> 'Editors can experiment in this template's $1 and $2 pages.'
--]]
local subjectSpace = env.subjectSpace
local templateTitle = env.templateTitle
local sandboxTitle = env.sandboxTitle
local testcasesTitle = env.testcasesTitle
local templatePage = templateTitle.prefixedText
if not subjectSpace or not templateTitle or not sandboxTitle or not testcasesTitle then
return nil
end
-- Make links.
local sandboxLinks, testcasesLinks
if sandboxTitle.exists then
local sandboxPage = sandboxTitle.prefixedText
local sandboxDisplay = message('sandbox-link-display')
local sandboxLink = makeWikilink(sandboxPage, sandboxDisplay)
local sandboxEditDisplay = message('sandbox-edit-link-display')
local sandboxEditLink = makeWikilink("Special:EditPage/" .. sandboxPage, sandboxEditDisplay)
local compareUrl = env.compareUrl
local compareLink
if compareUrl then
local compareDisplay = message('compare-link-display')
compareLink = makeUrlLink(compareUrl, compareDisplay)
end
sandboxLinks = sandboxLink .. ' ' .. makeToolbar(sandboxEditLink, compareLink)
else
local sandboxPreload
if subjectSpace == 828 then
sandboxPreload = message('module-sandbox-preload')
else
sandboxPreload = message('template-sandbox-preload')
end
local sandboxCreateUrl = sandboxTitle:canonicalUrl{action = 'edit', preload = sandboxPreload}
local sandboxCreateDisplay = message('sandbox-create-link-display')
local sandboxCreateLink = makeUrlLink(sandboxCreateUrl, sandboxCreateDisplay)
local mirrorSummary = message('mirror-edit-summary', {makeWikilink(templatePage)})
local mirrorPreload = message('mirror-link-preload')
local mirrorUrl = sandboxTitle:canonicalUrl{action = 'edit', preload = mirrorPreload, summary = mirrorSummary}
if subjectSpace == 828 then
mirrorUrl = sandboxTitle:canonicalUrl{action = 'edit', preload = templateTitle.prefixedText, summary = mirrorSummary}
end
local mirrorDisplay = message('mirror-link-display')
local mirrorLink = makeUrlLink(mirrorUrl, mirrorDisplay)
sandboxLinks = message('sandbox-link-display') .. ' ' .. makeToolbar(sandboxCreateLink, mirrorLink)
end
if testcasesTitle.exists then
local testcasesPage = testcasesTitle.prefixedText
local testcasesDisplay = message('testcases-link-display')
local testcasesLink = makeWikilink(testcasesPage, testcasesDisplay)
local testcasesEditUrl = testcasesTitle:canonicalUrl{action = 'edit'}
local testcasesEditDisplay = message('testcases-edit-link-display')
local testcasesEditLink = makeWikilink("Special:EditPage/" .. testcasesPage, testcasesEditDisplay)
-- for Modules, add testcases run link if exists
if testcasesTitle.contentModel == "Scribunto" and testcasesTitle.talkPageTitle and testcasesTitle.talkPageTitle.exists then
local testcasesRunLinkDisplay = message('testcases-run-link-display')
local testcasesRunLink = makeWikilink(testcasesTitle.talkPageTitle.prefixedText, testcasesRunLinkDisplay)
testcasesLinks = testcasesLink .. ' ' .. makeToolbar(testcasesEditLink, testcasesRunLink)
else
testcasesLinks = testcasesLink .. ' ' .. makeToolbar(testcasesEditLink)
end
else
local testcasesPreload
if subjectSpace == 828 then
testcasesPreload = message('module-testcases-preload')
else
testcasesPreload = message('template-testcases-preload')
end
local testcasesCreateUrl = testcasesTitle:canonicalUrl{action = 'edit', preload = testcasesPreload}
local testcasesCreateDisplay = message('testcases-create-link-display')
local testcasesCreateLink = makeUrlLink(testcasesCreateUrl, testcasesCreateDisplay)
testcasesLinks = message('testcases-link-display') .. ' ' .. makeToolbar(testcasesCreateLink)
end
local messageName
if subjectSpace == 828 then
messageName = 'experiment-blurb-module'
else
messageName = 'experiment-blurb-template'
end
return message(messageName, {sandboxLinks, testcasesLinks})
end
function p.makeCategoriesBlurb(args, env)
--[[
-- Generates the text "Please add categories to the /doc subpage."
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
-- Messages:
-- 'doc-link-display' --> '/doc'
-- 'add-categories-blurb' --> 'Please add categories to the $1 subpage.'
--]]
local docTitle = env.docTitle
if not docTitle then
return nil
end
local docPathLink = makeWikilink(docTitle.prefixedText, message('doc-link-display'))
return message('add-categories-blurb', {docPathLink})
end
function p.makeSubpagesBlurb(args, env)
--[[
-- Generates the "Subpages of this template" link.
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
-- Messages:
-- 'template-pagetype' --> 'template'
-- 'module-pagetype' --> 'module'
-- 'default-pagetype' --> 'page'
-- 'subpages-link-display' --> 'Subpages of this $1'
--]]
local subjectSpace = env.subjectSpace
local templateTitle = env.templateTitle
if not subjectSpace or not templateTitle then
return nil
end
local pagetype
if subjectSpace == 10 then
pagetype = message('template-pagetype')
elseif subjectSpace == 828 then
pagetype = message('module-pagetype')
else
pagetype = message('default-pagetype')
end
local subpagesLink = makeWikilink(
'Special:PrefixIndex/' .. templateTitle.prefixedText .. '/',
message('subpages-link-display', {pagetype})
)
return message('subpages-blurb', {subpagesLink})
end
----------------------------------------------------------------------------
-- Tracking categories
----------------------------------------------------------------------------
function p.addTrackingCategories(env)
--[[
-- Check if {{documentation}} is transcluded on a /doc or /testcases page.
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
-- Messages:
-- 'display-strange-usage-category' --> true
-- 'doc-subpage' --> 'doc'
-- 'testcases-subpage' --> 'testcases'
-- 'strange-usage-category' --> 'Wikipedia pages with strange ((documentation)) usage'
--
-- /testcases pages in the module namespace are not categorised, as they may have
-- {{documentation}} transcluded automatically.
--]]
local title = env.title
local subjectSpace = env.subjectSpace
if not title or not subjectSpace then
return nil
end
local subpage = title.subpageText
local ret = ''
if message('display-strange-usage-category', nil, 'boolean')
and (
subpage == message('doc-subpage')
or subjectSpace ~= 828 and subpage == message('testcases-subpage')
)
then
ret = ret .. makeCategoryLink(message('strange-usage-category'))
end
return ret
end
return p
268dc89480af10873bfbca5439ae8e61b404f770
Module:Documentation/config
828
60
125
124
2023-09-14T01:11:49Z
Ilovethehitgameomori
2
1 revision imported
Scribunto
text/plain
----------------------------------------------------------------------------------------------------
--
-- Configuration for Module:Documentation
--
-- Here you can set the values of the parameters and messages used in Module:Documentation to
-- localise it to your wiki and your language. Unless specified otherwise, values given here
-- should be string values.
----------------------------------------------------------------------------------------------------
local cfg = {} -- Do not edit this line.
----------------------------------------------------------------------------------------------------
-- Protection template configuration
----------------------------------------------------------------------------------------------------
-- cfg['protection-reason-edit']
-- The protection reason for edit-protected templates to pass to
-- [[Module:Protection banner]].
cfg['protection-reason-edit'] = 'template'
--[[
----------------------------------------------------------------------------------------------------
-- Sandbox notice configuration
--
-- On sandbox pages the module can display a template notifying users that the current page is a
-- sandbox, and the location of test cases pages, etc. The module decides whether the page is a
-- sandbox or not based on the value of cfg['sandbox-subpage']. The following settings configure the
-- messages that the notices contains.
----------------------------------------------------------------------------------------------------
--]]
-- cfg['sandbox-notice-image']
-- The image displayed in the sandbox notice.
cfg['sandbox-notice-image'] = '[[File:Sandbox.svg|50px|alt=|link=]]'
--[[
-- cfg['sandbox-notice-pagetype-template']
-- cfg['sandbox-notice-pagetype-module']
-- cfg['sandbox-notice-pagetype-other']
-- The page type of the sandbox page. The message that is displayed depends on the current subject
-- namespace. This message is used in either cfg['sandbox-notice-blurb'] or
-- cfg['sandbox-notice-diff-blurb'].
--]]
cfg['sandbox-notice-pagetype-template'] = '[[Wikipedia:Template test cases|template sandbox]] page'
cfg['sandbox-notice-pagetype-module'] = '[[Wikipedia:Template test cases|module sandbox]] page'
cfg['sandbox-notice-pagetype-other'] = 'sandbox page'
--[[
-- cfg['sandbox-notice-blurb']
-- cfg['sandbox-notice-diff-blurb']
-- cfg['sandbox-notice-diff-display']
-- Either cfg['sandbox-notice-blurb'] or cfg['sandbox-notice-diff-blurb'] is the opening sentence
-- of the sandbox notice. The latter has a diff link, but the former does not. $1 is the page
-- type, which is either cfg['sandbox-notice-pagetype-template'],
-- cfg['sandbox-notice-pagetype-module'] or cfg['sandbox-notice-pagetype-other'] depending what
-- namespace we are in. $2 is a link to the main template page, and $3 is a diff link between
-- the sandbox and the main template. The display value of the diff link is set by
-- cfg['sandbox-notice-compare-link-display'].
--]]
cfg['sandbox-notice-blurb'] = 'This is the $1 for $2.'
cfg['sandbox-notice-diff-blurb'] = 'This is the $1 for $2 ($3).'
cfg['sandbox-notice-compare-link-display'] = 'diff'
--[[
-- cfg['sandbox-notice-testcases-blurb']
-- cfg['sandbox-notice-testcases-link-display']
-- cfg['sandbox-notice-testcases-run-blurb']
-- cfg['sandbox-notice-testcases-run-link-display']
-- cfg['sandbox-notice-testcases-blurb'] is a sentence notifying the user that there is a test cases page
-- corresponding to this sandbox that they can edit. $1 is a link to the test cases page.
-- cfg['sandbox-notice-testcases-link-display'] is the display value for that link.
-- cfg['sandbox-notice-testcases-run-blurb'] is a sentence notifying the user that there is a test cases page
-- corresponding to this sandbox that they can edit, along with a link to run it. $1 is a link to the test
-- cases page, and $2 is a link to the page to run it.
-- cfg['sandbox-notice-testcases-run-link-display'] is the display value for the link to run the test
-- cases.
--]]
cfg['sandbox-notice-testcases-blurb'] = 'See also the companion subpage for $1.'
cfg['sandbox-notice-testcases-link-display'] = 'test cases'
cfg['sandbox-notice-testcases-run-blurb'] = 'See also the companion subpage for $1 ($2).'
cfg['sandbox-notice-testcases-run-link-display'] = 'run'
-- cfg['sandbox-category']
-- A category to add to all template sandboxes.
cfg['sandbox-category'] = 'Template sandboxes'
----------------------------------------------------------------------------------------------------
-- Start box configuration
----------------------------------------------------------------------------------------------------
-- cfg['documentation-icon-wikitext']
-- The wikitext for the icon shown at the top of the template.
cfg['documentation-icon-wikitext'] = '[[File:Test Template Info-Icon - Version (2).svg|50px|link=|alt=]]'
-- cfg['template-namespace-heading']
-- The heading shown in the template namespace.
cfg['template-namespace-heading'] = 'Template documentation'
-- cfg['module-namespace-heading']
-- The heading shown in the module namespace.
cfg['module-namespace-heading'] = 'Module documentation'
-- cfg['file-namespace-heading']
-- The heading shown in the file namespace.
cfg['file-namespace-heading'] = 'Summary'
-- cfg['other-namespaces-heading']
-- The heading shown in other namespaces.
cfg['other-namespaces-heading'] = 'Documentation'
-- cfg['view-link-display']
-- The text to display for "view" links.
cfg['view-link-display'] = 'view'
-- cfg['edit-link-display']
-- The text to display for "edit" links.
cfg['edit-link-display'] = 'edit'
-- cfg['history-link-display']
-- The text to display for "history" links.
cfg['history-link-display'] = 'history'
-- cfg['purge-link-display']
-- The text to display for "purge" links.
cfg['purge-link-display'] = 'purge'
-- cfg['create-link-display']
-- The text to display for "create" links.
cfg['create-link-display'] = 'create'
----------------------------------------------------------------------------------------------------
-- Link box (end box) configuration
----------------------------------------------------------------------------------------------------
-- cfg['transcluded-from-blurb']
-- Notice displayed when the docs are transcluded from another page. $1 is a wikilink to that page.
cfg['transcluded-from-blurb'] = 'The above [[Wikipedia:Template documentation|documentation]] is [[Help:Transclusion|transcluded]] from $1.'
--[[
-- cfg['create-module-doc-blurb']
-- Notice displayed in the module namespace when the documentation subpage does not exist.
-- $1 is a link to create the documentation page with the preload cfg['module-preload'] and the
-- display cfg['create-link-display'].
--]]
cfg['create-module-doc-blurb'] = 'You might want to $1 a documentation page for this [[Wikipedia:Lua|Scribunto module]].'
----------------------------------------------------------------------------------------------------
-- Experiment blurb configuration
----------------------------------------------------------------------------------------------------
--[[
-- cfg['experiment-blurb-template']
-- cfg['experiment-blurb-module']
-- The experiment blurb is the text inviting editors to experiment in sandbox and test cases pages.
-- It is only shown in the template and module namespaces. With the default English settings, it
-- might look like this:
--
-- Editors can experiment in this template's sandbox (edit | diff) and testcases (edit) pages.
--
-- In this example, "sandbox", "edit", "diff", "testcases", and "edit" would all be links.
--
-- There are two versions, cfg['experiment-blurb-template'] and cfg['experiment-blurb-module'], depending
-- on what namespace we are in.
--
-- Parameters:
--
-- $1 is a link to the sandbox page. If the sandbox exists, it is in the following format:
--
-- cfg['sandbox-link-display'] (cfg['sandbox-edit-link-display'] | cfg['compare-link-display'])
--
-- If the sandbox doesn't exist, it is in the format:
--
-- cfg['sandbox-link-display'] (cfg['sandbox-create-link-display'] | cfg['mirror-link-display'])
--
-- The link for cfg['sandbox-create-link-display'] link preloads the page with cfg['template-sandbox-preload']
-- or cfg['module-sandbox-preload'], depending on the current namespace. The link for cfg['mirror-link-display']
-- loads a default edit summary of cfg['mirror-edit-summary'].
--
-- $2 is a link to the test cases page. If the test cases page exists, it is in the following format:
--
-- cfg['testcases-link-display'] (cfg['testcases-edit-link-display'] | cfg['testcases-run-link-display'])
--
-- If the test cases page doesn't exist, it is in the format:
--
-- cfg['testcases-link-display'] (cfg['testcases-create-link-display'])
--
-- If the test cases page doesn't exist, the link for cfg['testcases-create-link-display'] preloads the
-- page with cfg['template-testcases-preload'] or cfg['module-testcases-preload'], depending on the current
-- namespace.
--]]
cfg['experiment-blurb-template'] = "Editors can experiment in this template's $1 and $2 pages."
cfg['experiment-blurb-module'] = "Editors can experiment in this module's $1 and $2 pages."
----------------------------------------------------------------------------------------------------
-- Sandbox link configuration
----------------------------------------------------------------------------------------------------
-- cfg['sandbox-subpage']
-- The name of the template subpage typically used for sandboxes.
cfg['sandbox-subpage'] = 'sandbox'
-- cfg['template-sandbox-preload']
-- Preload file for template sandbox pages.
cfg['template-sandbox-preload'] = 'Template:Documentation/preload-sandbox'
-- cfg['module-sandbox-preload']
-- Preload file for Lua module sandbox pages.
cfg['module-sandbox-preload'] = 'Template:Documentation/preload-module-sandbox'
-- cfg['sandbox-link-display']
-- The text to display for "sandbox" links.
cfg['sandbox-link-display'] = 'sandbox'
-- cfg['sandbox-edit-link-display']
-- The text to display for sandbox "edit" links.
cfg['sandbox-edit-link-display'] = 'edit'
-- cfg['sandbox-create-link-display']
-- The text to display for sandbox "create" links.
cfg['sandbox-create-link-display'] = 'create'
-- cfg['compare-link-display']
-- The text to display for "compare" links.
cfg['compare-link-display'] = 'diff'
-- cfg['mirror-edit-summary']
-- The default edit summary to use when a user clicks the "mirror" link. $1 is a wikilink to the
-- template page.
cfg['mirror-edit-summary'] = 'Create sandbox version of $1'
-- cfg['mirror-link-display']
-- The text to display for "mirror" links.
cfg['mirror-link-display'] = 'mirror'
-- cfg['mirror-link-preload']
-- The page to preload when a user clicks the "mirror" link.
cfg['mirror-link-preload'] = 'Template:Documentation/mirror'
----------------------------------------------------------------------------------------------------
-- Test cases link configuration
----------------------------------------------------------------------------------------------------
-- cfg['testcases-subpage']
-- The name of the template subpage typically used for test cases.
cfg['testcases-subpage'] = 'testcases'
-- cfg['template-testcases-preload']
-- Preload file for template test cases pages.
cfg['template-testcases-preload'] = 'Template:Documentation/preload-testcases'
-- cfg['module-testcases-preload']
-- Preload file for Lua module test cases pages.
cfg['module-testcases-preload'] = 'Template:Documentation/preload-module-testcases'
-- cfg['testcases-link-display']
-- The text to display for "testcases" links.
cfg['testcases-link-display'] = 'testcases'
-- cfg['testcases-edit-link-display']
-- The text to display for test cases "edit" links.
cfg['testcases-edit-link-display'] = 'edit'
-- cfg['testcases-run-link-display']
-- The text to display for test cases "run" links.
cfg['testcases-run-link-display'] = 'run'
-- cfg['testcases-create-link-display']
-- The text to display for test cases "create" links.
cfg['testcases-create-link-display'] = 'create'
----------------------------------------------------------------------------------------------------
-- Add categories blurb configuration
----------------------------------------------------------------------------------------------------
--[[
-- cfg['add-categories-blurb']
-- Text to direct users to add categories to the /doc subpage. Not used if the "content" or
-- "docname fed" arguments are set, as then it is not clear where to add the categories. $1 is a
-- link to the /doc subpage with a display value of cfg['doc-link-display'].
--]]
cfg['add-categories-blurb'] = 'Add categories to the $1 subpage.'
-- cfg['doc-link-display']
-- The text to display when linking to the /doc subpage.
cfg['doc-link-display'] = '/doc'
----------------------------------------------------------------------------------------------------
-- Subpages link configuration
----------------------------------------------------------------------------------------------------
--[[
-- cfg['subpages-blurb']
-- The "Subpages of this template" blurb. $1 is a link to the main template's subpages with a
-- display value of cfg['subpages-link-display']. In the English version this blurb is simply
-- the link followed by a period, and the link display provides the actual text.
--]]
cfg['subpages-blurb'] = '$1.'
--[[
-- cfg['subpages-link-display']
-- The text to display for the "subpages of this page" link. $1 is cfg['template-pagetype'],
-- cfg['module-pagetype'] or cfg['default-pagetype'], depending on whether the current page is in
-- the template namespace, the module namespace, or another namespace.
--]]
cfg['subpages-link-display'] = 'Subpages of this $1'
-- cfg['template-pagetype']
-- The pagetype to display for template pages.
cfg['template-pagetype'] = 'template'
-- cfg['module-pagetype']
-- The pagetype to display for Lua module pages.
cfg['module-pagetype'] = 'module'
-- cfg['default-pagetype']
-- The pagetype to display for pages other than templates or Lua modules.
cfg['default-pagetype'] = 'page'
----------------------------------------------------------------------------------------------------
-- Doc link configuration
----------------------------------------------------------------------------------------------------
-- cfg['doc-subpage']
-- The name of the subpage typically used for documentation pages.
cfg['doc-subpage'] = 'doc'
-- cfg['docpage-preload']
-- Preload file for template documentation pages in all namespaces.
cfg['docpage-preload'] = 'Template:Documentation/preload'
-- cfg['module-preload']
-- Preload file for Lua module documentation pages.
cfg['module-preload'] = 'Template:Documentation/preload-module-doc'
----------------------------------------------------------------------------------------------------
-- HTML and CSS configuration
----------------------------------------------------------------------------------------------------
-- cfg['templatestyles']
-- The name of the TemplateStyles page where CSS is kept.
-- Sandbox CSS will be at Module:Documentation/sandbox/styles.css when needed.
cfg['templatestyles'] = 'Module:Documentation/styles.css'
-- cfg['container']
-- Class which can be used to set flex or grid CSS on the
-- two child divs documentation and documentation-metadata
cfg['container'] = 'documentation-container'
-- cfg['main-div-classes']
-- Classes added to the main HTML "div" tag.
cfg['main-div-classes'] = 'documentation'
-- cfg['main-div-heading-class']
-- Class for the main heading for templates and modules and assoc. talk spaces
cfg['main-div-heading-class'] = 'documentation-heading'
-- cfg['start-box-class']
-- Class for the start box
cfg['start-box-class'] = 'documentation-startbox'
-- cfg['start-box-link-classes']
-- Classes used for the [view][edit][history] or [create] links in the start box.
-- mw-editsection-like is per [[Wikipedia:Village pump (technical)/Archive 117]]
cfg['start-box-link-classes'] = 'mw-editsection-like plainlinks'
-- cfg['end-box-class']
-- Class for the end box.
cfg['end-box-class'] = 'documentation-metadata'
-- cfg['end-box-plainlinks']
-- Plainlinks
cfg['end-box-plainlinks'] = 'plainlinks'
-- cfg['toolbar-class']
-- Class added for toolbar links.
cfg['toolbar-class'] = 'documentation-toolbar'
-- cfg['clear']
-- Just used to clear things.
cfg['clear'] = 'documentation-clear'
----------------------------------------------------------------------------------------------------
-- Tracking category configuration
----------------------------------------------------------------------------------------------------
-- cfg['display-strange-usage-category']
-- Set to true to enable output of cfg['strange-usage-category'] if the module is used on a /doc subpage
-- or a /testcases subpage. This should be a boolean value (either true or false).
cfg['display-strange-usage-category'] = true
-- cfg['strange-usage-category']
-- Category to output if cfg['display-strange-usage-category'] is set to true and the module is used on a
-- /doc subpage or a /testcases subpage.
cfg['strange-usage-category'] = 'Wikipedia pages with strange ((documentation)) usage'
--[[
----------------------------------------------------------------------------------------------------
-- End configuration
--
-- Don't edit anything below this line.
----------------------------------------------------------------------------------------------------
--]]
return cfg
71b68ed73088f1a59d61acf06bbee9fde6677f03
Template:Sandbox other
10
62
129
128
2023-09-14T01:11:50Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{#if:{{#ifeq:{{#invoke:String|sublength|s={{SUBPAGENAME}}|i=0|len=7}}|sandbox|1}}{{#ifeq:{{SUBPAGENAME}}|doc|1}}{{#invoke:String|match|{{PAGENAME}}|/sandbox/styles.css$|plain=false|nomatch=}}|{{{1|}}}|{{{2|}}}}}<!--
--><noinclude>{{documentation}}</noinclude>
91e4ae891d6b791615152c1fbc971414961ba872
Template:Documentation subpage
10
63
131
130
2023-09-14T01:11:51Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
<includeonly><!--
-->{{#ifeq:{{lc:{{SUBPAGENAME}}}} |{{{override|doc}}}
| <!--(this template has been transcluded on a /doc or /{{{override}}} page)-->
</includeonly><!--
-->{{#ifeq:{{{doc-notice|show}}} |show
| {{Mbox
| type = notice
| style = margin-bottom:1.0em;
| image = [[File:Edit-copy green.svg|40px|alt=|link=]]
| text =
{{strong|This is a [[Wikipedia:Template documentation|documentation]] [[Wikipedia:Subpages|subpage]]}} for {{terminate sentence|{{{1|[[:{{SUBJECTSPACE}}:{{BASEPAGENAME}}]]}}}}}<br />It may contain usage information, [[Wikipedia:Categorization|categories]] and other content that is not part of the original {{#if:{{{text2|}}} |{{{text2}}} |{{#if:{{{text1|}}} |{{{text1}}} |{{#ifeq:{{SUBJECTSPACE}} |{{ns:User}} |{{lc:{{SUBJECTSPACE}}}} template page |{{#if:{{SUBJECTSPACE}} |{{lc:{{SUBJECTSPACE}}}} page|article}}}}}}}}.
}}
}}<!--
-->{{DEFAULTSORT:{{{defaultsort|{{PAGENAME}}}}}}}<!--
-->{{#if:{{{inhibit|}}} |<!--(don't categorize)-->
| <includeonly><!--
-->{{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}
| [[Category:{{#switch:{{SUBJECTSPACE}} |Template=Template |Module=Module |User=User |#default=Wikipedia}} documentation pages]]
| [[Category:Documentation subpages without corresponding pages]]
}}<!--
--></includeonly>
}}<!--
(completing initial #ifeq: at start of template:)
--><includeonly>
| <!--(this template has not been transcluded on a /doc or /{{{override}}} page)-->
}}<!--
--></includeonly><noinclude>{{Documentation}}</noinclude>
41ca90af0945442788a2dbd08c8c54a61a23c057
Template:Template link with link off
10
64
133
132
2023-09-14T01:11:52Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
<includeonly>{{#Invoke:Template link general|main|nowrap=yes|nolink=yes}}</includeonly><noinclude>
{{Documentation|1=Template:Tlg/doc
|content = {{tlg/doc|tlf}}
}}
<!-- Add categories to the /doc subpage, not here! -->
</noinclude>
b099fea5d1f36b0b4b9cb253ad3a9f4e095f6851
Template:Tlf
10
65
135
134
2023-09-14T01:11:52Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
#REDIRECT [[Template:Template link with link off]]
{{Redirect category shell|
{{R from move}}
}}
52759e1d3f7c9aa4a03d0b7d4f84f4c6adf53edf
Template:High-use
10
66
137
136
2023-09-14T01:11:52Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{#invoke:High-use|main|1={{{1|}}}|2={{{2|}}}|info={{{info|}}}|demo={{{demo|}}}|form={{{form|}}}|expiry={{{expiry|}}}|system={{{system|}}}}}<noinclude>
{{Documentation}}
<!-- Add categories to the /doc subpage; interwiki links go to Wikidata, thank you! -->
</noinclude>
a3322d1bd47ac03df14fa2090855cff4fede9bc7
Template:TemplateData header
10
67
139
138
2023-09-14T01:11:53Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
<div class="templatedata-header">{{#if:{{{noheader|}}}|<!--
noheader:
-->{{Template parameter usage|based=y}}|<!--
+header:
-->This is the {{#if:{{{nolink|}}}|<!--
+header, nolink TD
-->TemplateData|<!--
+header, +link [[TD]]; DEFAULT:
-->[[Wikipedia:TemplateData|TemplateData]]}}<!--
e.o. #if:nolink; DEFAULT:
--> for this template used by [[mw:Extension:TemplateWizard|TemplateWizard]], [[Wikipedia:VisualEditor|VisualEditor]] and other tools. {{Template parameter usage|based=y}}<!--
e.o. #if:noheader
-->}}
'''TemplateData for {{{1|{{BASEPAGENAME}}}}}'''
</div><includeonly><!--
check parameters
-->{{#invoke:Check for unknown parameters|check
|unknown={{template other|1=[[Category:Pages using TemplateData header with unknown parameters|_VALUE_]]}}
|template=Template:TemplateData header
|1 |nolink |noheader
|preview=<div class="error" style="font-weight:normal">Unknown parameter '_VALUE_' in [[Template:TemplateData header]].</div>
}}<!--
-->{{template other|{{sandbox other||
[[Category:Templates using TemplateData]]
}}}}</includeonly><!--
--><noinclude>{{Documentation}}</noinclude>
ddfbb4ae793846b96d4c06330417fa6ed4da2adc
Template:Template parameter usage
10
68
141
140
2023-09-14T01:11:54Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{#switch:{{{label|}}}
|=[https://bambots.brucemyers.com/TemplateParam.php?wiki=enwiki&template={{Urlencode:{{#if:{{{1|}}}|{{ROOTPAGENAME:{{{1|}}}}}|{{ROOTPAGENAME}}}}}} {{#ifeq:{{yesno-no|{{{lc}}}}}|no|C|c}}lick here] to see a monthly parameter usage report for {{#if:{{{1|}}}|[[Template:{{ROOTPAGENAME:{{{1|}}}}}]]|this template}} in articles{{#ifeq:{{yesno-no|{{{based}}}}}|yes| based on {{#if:{{{1|}}}|its|this}} TemplateData}}.
|None|none=[https://bambots.brucemyers.com/TemplateParam.php?wiki=enwiki&template={{Urlencode:{{#if:{{{1|}}}|{{ROOTPAGENAME:{{{1|}}}}}|{{ROOTPAGENAME}}}}}} {{#ifeq:{{yesno-no|{{{lc}}}}}|no|P|p}}arameter usage report]{{#ifeq:{{yesno-no|{{{based}}}}}|yes| based on {{#if:{{{1|}}}|its|this}} TemplateData}}
|for|For=[https://bambots.brucemyers.com/TemplateParam.php?wiki=enwiki&template={{Urlencode:{{#if:{{{1|}}}|{{ROOTPAGENAME:{{{1|}}}}}|{{ROOTPAGENAME}}}}}} {{#ifeq:{{yesno-no|{{{lc}}}}}|no|P|p}}arameter usage report] for {{#if:{{{1|}}}|[[Template:{{ROOTPAGENAME:{{{1|}}}}}]]|[[Template:{{ROOTPAGENAME}}]]}}{{#ifeq:{{yesno-no|{{{based}}}}}|yes| based on {{#if:{{{1|}}}|its|this}} TemplateData}}.
|#default=[https://bambots.brucemyers.com/TemplateParam.php?wiki=enwiki&template={{Urlencode:{{#if:{{{1|}}}|{{ROOTPAGENAME:{{{1|}}}}}|{{ROOTPAGENAME}}}}}} {{{label|}}}]{{#ifeq:{{yesno-no|{{{based}}}}}|yes| based on {{#if:{{{1|}}}|its|this}} TemplateData}}
}}<noinclude>
{{documentation}}
</noinclude>
10a89e6a4bc63a1427518ea21bf94b8f623a7391
Module:High-use
828
69
143
142
2023-09-14T01:11:55Z
Ilovethehitgameomori
2
1 revision imported
Scribunto
text/plain
local p = {}
-- _fetch looks at the "demo" argument.
local _fetch = require('Module:Transclusion_count').fetch
local yesno = require('Module:Yesno')
function p.num(frame, count)
if count == nil then
if yesno(frame.args['fetch']) == false then
if (frame.args[1] or '') ~= '' then count = tonumber(frame.args[1]) end
else
count = _fetch(frame)
end
end
-- Build output string
local return_value = ""
if count == nil then
if frame.args[1] == "risk" then
return_value = "a very large number of"
else
return_value = "many"
end
else
-- Use 2 significant figures for smaller numbers and 3 for larger ones
local sigfig = 2
if count >= 100000 then
sigfig = 3
end
-- Prepare to round to appropriate number of sigfigs
local f = math.floor(math.log10(count)) - sigfig + 1
-- Round and insert "approximately" or "+" when appropriate
if (frame.args[2] == "yes") or (mw.ustring.sub(frame.args[1],-1) == "+") then
-- Round down
return_value = string.format("%s+", mw.getContentLanguage():formatNum(math.floor( (count / 10^(f)) ) * (10^(f))) )
else
-- Round to nearest
return_value = string.format("approximately %s", mw.getContentLanguage():formatNum(math.floor( (count / 10^(f)) + 0.5) * (10^(f))) )
end
-- Insert percentage of pages if that is likely to be >= 1% and when |no-percent= not set to yes
if count and count > 250000 and not yesno (frame:getParent().args['no-percent']) then
local percent = math.floor( ( (count/frame:callParserFunction('NUMBEROFPAGES', 'R') ) * 100) + 0.5)
if percent >= 1 then
return_value = string.format("%s pages, or roughly %s%% of all", return_value, percent)
end
end
end
return return_value
end
-- Actions if there is a large (greater than or equal to 100,000) transclusion count
function p.risk(frame)
local return_value = ""
if frame.args[1] == "risk" then
return_value = "risk"
else
local count = _fetch(frame)
if count and count >= 100000 then return_value = "risk" end
end
return return_value
end
function p.text(frame, count)
-- Only show the information about how this template gets updated if someone
-- is actually editing the page and maybe trying to update the count.
local bot_text = (frame:preprocess("{{REVISIONID}}") == "") and "\n\n----\n'''Preview message''': Transclusion count updated automatically ([[Template:High-use/doc#Technical details|see documentation]])." or ''
if count == nil then
if yesno(frame.args['fetch']) == false then
if (frame.args[1] or '') ~= '' then count = tonumber(frame.args[1]) end
else
count = _fetch(frame)
end
end
local title = mw.title.getCurrentTitle()
if title.subpageText == "doc" or title.subpageText == "sandbox" then
title = title.basePageTitle
end
local systemMessages = frame.args['system']
if frame.args['system'] == '' then
systemMessages = nil
end
-- This retrieves the project URL automatically to simplify localiation.
local templateCount = ('on [https://linkcount.toolforge.org/index.php?project=%s&page=%s %s pages]'):format(
mw.title.getCurrentTitle():fullUrl():gsub('//(.-)/.*', '%1'),
mw.uri.encode(title.fullText), p.num(frame, count))
local used_on_text = "'''This " .. (mw.title.getCurrentTitle().namespace == 828 and "Lua module" or "template") .. ' is used ';
if systemMessages then
used_on_text = used_on_text .. systemMessages ..
((count and count > 2000) and ("''', and " .. templateCount) or ("'''"))
else
used_on_text = used_on_text .. templateCount .. "'''"
end
local sandbox_text = ("%s's [[%s/sandbox|/sandbox]] or [[%s/testcases|/testcases]] subpages, or in your own [[%s]]. "):format(
(mw.title.getCurrentTitle().namespace == 828 and "module" or "template"),
title.fullText, title.fullText,
mw.title.getCurrentTitle().namespace == 828 and "Module:Sandbox|module sandbox" or "Wikipedia:User pages#SUB|user subpage"
)
local infoArg = frame.args["info"] ~= "" and frame.args["info"]
if (systemMessages or frame.args[1] == "risk" or (count and count >= 100000) ) then
local info = systemMessages and '.<br/>Changes to it can cause immediate changes to the Wikipedia user interface.' or '.'
if infoArg then
info = info .. "<br />" .. infoArg
end
sandbox_text = info .. '<br /> To avoid major disruption' ..
(count and count >= 100000 and ' and server load' or '') ..
', any changes should be tested in the ' .. sandbox_text ..
'The tested changes can be added to this page in a single edit. '
else
sandbox_text = (infoArg and ('.<br />' .. infoArg .. ' C') or ' and c') ..
'hanges may be widely noticed. Test changes in the ' .. sandbox_text
end
local discussion_text = systemMessages and 'Please discuss changes ' or 'Consider discussing changes '
if frame.args["2"] and frame.args["2"] ~= "" and frame.args["2"] ~= "yes" then
discussion_text = string.format("%sat [[%s]]", discussion_text, frame.args["2"])
else
discussion_text = string.format("%son the [[%s|talk page]]", discussion_text, title.talkPageTitle.fullText )
end
return used_on_text .. sandbox_text .. discussion_text .. " before implementing them." .. bot_text
end
function p.main(frame)
local count = nil
if yesno(frame.args['fetch']) == false then
if (frame.args[1] or '') ~= '' then count = tonumber(frame.args[1]) end
else
count = _fetch(frame)
end
local image = "[[File:Ambox warning yellow.svg|40px|alt=Warning|link=]]"
local type_param = "style"
local epilogue = ''
if frame.args['system'] and frame.args['system'] ~= '' then
image = "[[File:Ambox important.svg|40px|alt=Warning|link=]]"
type_param = "content"
local nocat = frame:getParent().args['nocat'] or frame.args['nocat']
local categorise = (nocat == '' or not yesno(nocat))
if categorise then
epilogue = frame:preprocess('{{Sandbox other||{{#switch:{{#invoke:Effective protection level|{{#switch:{{NAMESPACE}}|File=upload|#default=edit}}|{{FULLPAGENAME}}}}|sysop|templateeditor|interfaceadmin=|#default=[[Category:Pages used in system messages needing protection]]}}}}')
end
elseif (frame.args[1] == "risk" or (count and count >= 100000)) then
image = "[[File:Ambox warning orange.svg|40px|alt=Warning|link=]]"
type_param = "content"
end
if frame.args["form"] == "editnotice" then
return frame:expandTemplate{
title = 'editnotice',
args = {
["image"] = image,
["text"] = p.text(frame, count),
["expiry"] = (frame.args["expiry"] or "")
}
} .. epilogue
else
return require('Module:Message box').main('ombox', {
type = type_param,
image = image,
text = p.text(frame, count),
expiry = (frame.args["expiry"] or "")
}) .. epilogue
end
end
return p
134551888e066954a89c109d2faa8af71a4454a4
Module:Transclusion count
828
70
145
144
2023-09-14T01:11:55Z
Ilovethehitgameomori
2
1 revision imported
Scribunto
text/plain
local p = {}
function p.fetch(frame)
local template = nil
local return_value = nil
-- Use demo parameter if it exists, otherswise use current template name
local namespace = mw.title.getCurrentTitle().namespace
if frame.args["demo"] and frame.args["demo"] ~= "" then
template = mw.ustring.gsub(frame.args["demo"],"^[Tt]emplate:","")
elseif namespace == 10 then -- Template namespace
template = mw.title.getCurrentTitle().text
elseif namespace == 828 then -- Module namespace
template = (mw.site.namespaces[828].name .. ":" .. mw.title.getCurrentTitle().text)
end
-- If in template or module namespace, look up count in /data
if template ~= nil then
namespace = mw.title.new(template, "Template").namespace
if namespace == 10 or namespace == 828 then
template = mw.ustring.gsub(template, "/doc$", "") -- strip /doc from end
template = mw.ustring.gsub(template, "/sandbox$", "") -- strip /sandbox from end
local index = mw.ustring.sub(mw.title.new(template).text,1,1)
local status, data = pcall(function ()
return(mw.loadData('Module:Transclusion_count/data/' .. (mw.ustring.find(index, "%a") and index or "other")))
end)
if status then
return_value = tonumber(data[mw.ustring.gsub(template, " ", "_")])
end
end
end
-- If database value doesn't exist, use value passed to template
if return_value == nil and frame.args[1] ~= nil then
local arg1=mw.ustring.match(frame.args[1], '[%d,]+')
if arg1 and arg1 ~= '' then
return_value = tonumber(frame:callParserFunction('formatnum', arg1, 'R'))
end
end
return return_value
end
-- Tabulate this data for [[Wikipedia:Database reports/Templates transcluded on the most pages]]
function p.tabulate(frame)
local list = {}
for i = 65, 91 do
local data = mw.loadData('Module:Transclusion count/data/' .. ((i == 91) and 'other' or string.char(i)))
for name, count in pairs(data) do
table.insert(list, {mw.title.new(name, "Template").fullText, count})
end
end
table.sort(list, function(a, b)
return (a[2] == b[2]) and (a[1] < b[1]) or (a[2] > b[2])
end)
local lang = mw.getContentLanguage();
for i = 1, #list do
list[i] = ('|-\n| %d || [[%s]] || %s\n'):format(i, list[i][1]:gsub('_', ' '), lang:formatNum(list[i][2]))
end
return table.concat(list)
end
return p
000ef6bcbf7b66e727870b0c300c4009da300513
Module:Lua banner
828
71
147
146
2023-09-14T01:11:57Z
Ilovethehitgameomori
2
1 revision imported
Scribunto
text/plain
-- This module implements the {{lua}} template.
local yesno = require('Module:Yesno')
local mList = require('Module:List')
local mTableTools = require('Module:TableTools')
local mMessageBox = require('Module:Message box')
local p = {}
function p.main(frame)
local origArgs = frame:getParent().args
local args = {}
for k, v in pairs(origArgs) do
v = v:match('^%s*(.-)%s*$')
if v ~= '' then
args[k] = v
end
end
return p._main(args)
end
function p._main(args)
local modules = mTableTools.compressSparseArray(args)
local box = p.renderBox(modules)
local trackingCategories = p.renderTrackingCategories(args, modules)
return box .. trackingCategories
end
function p.renderBox(modules)
local boxArgs = {}
if #modules < 1 then
boxArgs.text = '<strong class="error">Error: no modules specified</strong>'
else
local moduleLinks = {}
for i, module in ipairs(modules) do
moduleLinks[i] = string.format('[[:%s]]', module)
local maybeSandbox = mw.title.new(module .. '/sandbox')
if maybeSandbox.exists then
moduleLinks[i] = moduleLinks[i] .. string.format(' ([[:%s|sandbox]])', maybeSandbox.fullText)
end
end
local moduleList = mList.makeList('bulleted', moduleLinks)
local title = mw.title.getCurrentTitle()
if title.subpageText == "doc" then
title = title.basePageTitle
end
if title.contentModel == "Scribunto" then
boxArgs.text = 'This module depends on the following other modules:' .. moduleList
else
boxArgs.text = 'This template uses [[Wikipedia:Lua|Lua]]:\n' .. moduleList
end
end
boxArgs.type = 'notice'
boxArgs.small = true
boxArgs.image = '[[File:Lua-Logo.svg|30px|alt=|link=]]'
return mMessageBox.main('mbox', boxArgs)
end
function p.renderTrackingCategories(args, modules, titleObj)
if yesno(args.nocat) then
return ''
end
local cats = {}
-- Error category
if #modules < 1 then
cats[#cats + 1] = 'Lua templates with errors'
end
-- Lua templates category
titleObj = titleObj or mw.title.getCurrentTitle()
local subpageBlacklist = {
doc = true,
sandbox = true,
sandbox2 = true,
testcases = true
}
if not subpageBlacklist[titleObj.subpageText] then
local protCatName
if titleObj.namespace == 10 then
local category = args.category
if not category then
local categories = {
['Module:String'] = 'Templates based on the String Lua module',
['Module:Math'] = 'Templates based on the Math Lua module',
['Module:BaseConvert'] = 'Templates based on the BaseConvert Lua module',
['Module:Citation/CS1'] = 'Templates based on the Citation/CS1 Lua module'
}
category = modules[1] and categories[modules[1]]
category = category or 'Lua-based templates'
end
cats[#cats + 1] = category
protCatName = "Templates using under-protected Lua modules"
elseif titleObj.namespace == 828 then
protCatName = "Modules depending on under-protected modules"
end
if not args.noprotcat and protCatName then
local protLevels = {
autoconfirmed = 1,
extendedconfirmed = 2,
templateeditor = 3,
sysop = 4
}
local currentProt
if titleObj.id ~= 0 then
-- id is 0 (page does not exist) if am previewing before creating a template.
currentProt = titleObj.protectionLevels["edit"][1]
end
if currentProt == nil then currentProt = 0 else currentProt = protLevels[currentProt] end
for i, module in ipairs(modules) do
if module ~= "WP:libraryUtil" then
local moduleProt = mw.title.new(module).protectionLevels["edit"][1]
if moduleProt == nil then moduleProt = 0 else moduleProt = protLevels[moduleProt] end
if moduleProt < currentProt then
cats[#cats + 1] = protCatName
break
end
end
end
end
end
for i, cat in ipairs(cats) do
cats[i] = string.format('[[Category:%s]]', cat)
end
return table.concat(cats)
end
return p
03ec1b34a40121efc562c0c64a67ebbf57d56dff
Module:Parameter names example
828
72
149
148
2023-09-14T01:11:57Z
Ilovethehitgameomori
2
1 revision imported
Scribunto
text/plain
-- This module implements {{parameter names example}}.
local p = {}
local function makeParam(s)
local lb = '{'
local rb = '}'
return lb:rep(3) .. s .. rb:rep(3)
end
local function italicize(s)
return "''" .. s .. "''"
end
local function plain(s)
return s
end
function p._main(args, frame)
-- Find how we want to format the arguments to the template.
local formatFunc
if args._display == 'italics' or args._display == 'italic' then
formatFunc = italicize
elseif args._display == 'plain' then
formatFunc = plain
else
formatFunc = makeParam
end
-- Build the table of template arguments.
local targs = {}
for k, v in pairs(args) do
if type(k) == 'number' then
targs[v] = formatFunc(v)
elseif not k:find('^_') then
targs[k] = v
end
end
--targs['nocat'] = 'yes';
--targs['categories'] = 'no';
--targs['demo'] = 'yes';
-- Find the template name.
local template
if args._template then
template = args._template
else
local currentTitle = mw.title.getCurrentTitle()
if currentTitle.prefixedText:find('/sandbox$') then
template = currentTitle.prefixedText
else
template = currentTitle.basePageTitle.prefixedText
end
end
-- Call the template with the arguments.
frame = frame or mw.getCurrentFrame()
local success, result = pcall(
frame.expandTemplate,
frame,
{title = template, args = targs}
)
if success then
return result
else
return ''
end
end
function p.main(frame)
local args = require('Module:Arguments').getArgs(frame, {
wrappers = 'Template:Parameter names example'
})
return p._main(args, frame)
end
return p
fdf94fb7a5dc1fabf118d60488a02f1e65b0df24
Template:Lua
10
73
151
150
2023-09-14T01:11:58Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
<includeonly>{{#invoke:Lua banner|main}}</includeonly><noinclude>
{{Lua|Module:Lua banner}}
{{documentation}}
<!-- Categories go on the /doc subpage and interwikis go on Wikidata. -->
</noinclude>
dba3962144dacd289dbc34f50fbe0a7bf6d7f2f7
Template:Parameter names example
10
74
153
152
2023-09-14T01:11:58Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
<includeonly>{{#invoke:Parameter names example|main}}</includeonly><noinclude>
{{Documentation}}
</noinclude>
de1e29d6ebc113e9d1649ea6a976625885db8a2f
Template:Category link with count
10
75
155
154
2023-09-14T01:11:59Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
[[:Category:{{#invoke:string|replace|1={{{1}}}|2=^:?[Cc]ategory:|3=|plain=false}}|<!--
-->{{#if:{{{name|}}}|{{{name}}}|Category:{{#invoke:string|replace|1={{{1}}}|2=^:?[Cc]ategory:|3=|plain=false}}}}<!--
-->]] ({{PAGESINCATEGORY:{{#invoke:string|replace|1={{{1}}}|2=^:?[Cc]ategory:|3=|plain=false}}|{{{2|all}}}}})<noinclude>
{{Documentation}}
</noinclude>
f93f1540b8c157703bd6d24ae35c35bef745981d
Template:Suppress categories
10
76
157
156
2023-09-14T01:11:59Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
<includeonly>{{{{{|safesubst:}}}#invoke:Suppress categories|main}}</includeonly><noinclude>
{{documentation}}
<!-- Categories go on the /doc subpage and interwikis go on Wikidata. -->
</noinclude>
1f9c6065201d31d4c70f982129b5babbb809ae8c
Module:Suppress categories
828
77
159
158
2023-09-14T01:12:00Z
Ilovethehitgameomori
2
1 revision imported
Scribunto
text/plain
-- This is a simple module to strip categories from wikitext. It does
-- not support nested links or magic words like __TOC__, etc. Even so,
-- it should still handle most categories.
local p = {}
-- Detects if a category link is valid or not. If it is valid,
-- the function returns the blank string. If not, the input
-- is returned with no changes.
local function processCategory( all, submatch )
local beforePipe = mw.ustring.match( submatch, '^(.-)[%s_]*|[%s_]*.-$' )
beforePipe = beforePipe or submatch
if mw.ustring.match( beforePipe, '[%[%]<>{}%c\n]' ) then
return all
else
return ''
end
end
-- Preprocess the content if we aren't being called from #invoke,
-- and pass it to gsub to remove valid category links.
local function suppress( content, isPreprocessed )
if not isPreprocessed then
content = mw.getCurrentFrame():preprocess( content )
end
content = mw.ustring.gsub(
content,
'(%[%[[%s_]*[cC][aA][tT][eE][gG][oO][rR][yY][%s_]*:[%s_]*(.-)[%s_]*%]%])',
processCategory
)
return content
end
-- Get the content to suppress categories from, and find
-- whether the content has already been preprocessed. (If the
-- module is called from #invoke, it has been preprocessed already.)
function p.main( frame )
local content, isPreprocessed
if frame == mw.getCurrentFrame() then
content = frame:getParent().args[1]
if frame.args[1] then
content = frame.args[1]
end
isPreprocessed = true
else
content = frame
isPreprocessed = false
end
return suppress( content, isPreprocessed )
end
return p
0ec3903841c489357a879434c5dc23c11d182c78
Module:Transclusion count/data/I
828
78
161
160
2023-09-14T01:12:01Z
Ilovethehitgameomori
2
1 revision imported
Scribunto
text/plain
return {
["IAAF_name"] = 2200,
["IAST"] = 6300,
["IBDB_name"] = 9100,
["ICD10"] = 4700,
["ICD9"] = 4400,
["ICS"] = 2900,
["IDN"] = 3400,
["IMDb_episode"] = 10000,
["IMDb_episodes"] = 2600,
["IMDb_name"] = 153000,
["IMDb_title"] = 189000,
["IMO_Number"] = 4100,
["IMSLP"] = 8200,
["INA"] = 2100,
["IND"] = 7500,
["INR"] = 6500,
["INRConvert"] = 5600,
["INRConvert/CurrentRate"] = 5600,
["INRConvert/USD"] = 5600,
["INRConvert/out"] = 5600,
["IOC_profile"] = 5200,
["IP"] = 2600,
["IPA"] = 142000,
["IPA-all"] = 3600,
["IPA-de"] = 8200,
["IPA-es"] = 8100,
["IPA-fr"] = 44000,
["IPA-it"] = 6000,
["IPA-nl"] = 3800,
["IPA-pl"] = 4100,
["IPA-pt"] = 3700,
["IPA-ru"] = 2700,
["IPA-sh"] = 2700,
["IPA-sl"] = 6900,
["IPA-th"] = 3000,
["IPA_audio_link"] = 20000,
["IPA_link"] = 3500,
["IPAc-cmn"] = 2600,
["IPAc-en"] = 48000,
["IPAc-pl"] = 52000,
["IPC_athlete"] = 2800,
["IPSummary"] = 78000,
["IP_summary"] = 78000,
["IPtalk"] = 18000,
["IPuser"] = 7000,
["IPvandal"] = 2900,
["IRC"] = 7300,
["IRI"] = 2200,
["IRL"] = 5500,
["IRN"] = 3600,
["ISBN"] = 462000,
["ISBN?"] = 2100,
["ISBNT"] = 39000,
["ISBN_missing"] = 2500,
["ISFDB_name"] = 4100,
["ISFDB_title"] = 4600,
["ISL"] = 2100,
["ISO_15924/script-example-character"] = 2800,
["ISO_15924/wp-article"] = 2800,
["ISO_15924/wp-article/format"] = 2800,
["ISO_15924/wp-article/label"] = 2700,
["ISO_3166_code"] = 516000,
["ISO_3166_name"] = 16000,
["ISO_639_name"] = 8000,
["ISP"] = 5300,
["ISR"] = 4800,
["ISSN"] = 12000,
["ISSN_link"] = 30000,
["ISTAT"] = 8100,
["ISU_figure_skater"] = 2500,
["ITA"] = 17000,
["ITF"] = 6200,
["ITF_profile"] = 9000,
["ITIS"] = 4400,
["ITN_talk"] = 10000,
["ITN_talk/date"] = 10000,
["IUCN_banner"] = 15000,
["I_sup"] = 4600,
["Iaaf_name"] = 7400,
["Ice_hockey"] = 19000,
["Ice_hockey_stats"] = 16000,
["Icehockeystats"] = 12000,
["Icon"] = 580000,
["If"] = 270000,
["If_all"] = 6400,
["If_between"] = 3700,
["If_both"] = 197000,
["If_empty"] = 3640000,
["If_first_display_both"] = 73000,
["If_in_page"] = 9800,
["If_last_display_both"] = 30000,
["If_preview"] = 58000,
["If_then_show"] = 286000,
["Ifempty"] = 4000,
["Ifeq"] = 16000,
["Iferror_then_show"] = 3200,
["Ifexist_not_redirect"] = 1290000,
["Ifnotempty"] = 14000,
["Ifnumber"] = 35000,
["Ifsubst"] = 442000,
["Ih"] = 7500,
["Ill"] = 115000,
["Illm"] = 6700,
["Image_frame"] = 4900,
["Image_label"] = 4500,
["Image_label_begin"] = 3900,
["Image_label_end"] = 3800,
["Image_label_small"] = 2600,
["Image_needed"] = 4500,
["Image_other"] = 273000,
["Image_requested"] = 167000,
["Image_requested/Category_helper"] = 158000,
["Imbox"] = 915000,
["Imdb_name"] = 5400,
["Imdb_title"] = 4200,
["Import_style"] = 11000,
["Import_style/inputbox.css"] = 11000,
["Importance"] = 5620000,
["Importance/colour"] = 5640000,
["Importance_mask"] = 10400000,
["Improve_categories"] = 7300,
["Improve_documentation"] = 2300,
["In_class"] = 5900,
["In_lang"] = 354000,
["In_progress"] = 3200,
["In_string"] = 74000,
["In_title"] = 19000,
["Inactive_WikiProject_banner"] = 204000,
["Inactive_userpage_blanked"] = 4900,
["Include-USGov"] = 29000,
["Incomplete_list"] = 23000,
["Inconclusive"] = 2100,
["Increase"] = 43000,
["Incumbent_pope"] = 4300,
["Indent"] = 4300,
["IndexFungorum"] = 2200,
["Indian_English"] = 4300,
["Indian_Rupee"] = 10000,
["Indian_railway_code"] = 3200,
["Inflation"] = 19000,
["Inflation-fn"] = 5400,
["Inflation-year"] = 4500,
["Inflation/IN/startyear"] = 5600,
["Inflation/UK"] = 4300,
["Inflation/UK/dataset"] = 4300,
["Inflation/UK/startyear"] = 4300,
["Inflation/US"] = 12000,
["Inflation/US/dataset"] = 12000,
["Inflation/US/startyear"] = 12000,
["Inflation/fn"] = 6200,
["Inflation/year"] = 24000,
["Info"] = 7300,
["Infobox"] = 3220000,
["Infobox/Columns"] = 2400,
["Infobox/mobileviewfix.css"] = 146000,
["Infobox3cols"] = 17000,
["Infobox_AFL_biography"] = 14000,
["Infobox_Aircraft_Begin"] = 5300,
["Infobox_Aircraft_Type"] = 4700,
["Infobox_Athletics_Championships"] = 2700,
["Infobox_Australian_place"] = 15000,
["Infobox_CFL_biography"] = 2200,
["Infobox_COA_wide"] = 3200,
["Infobox_Canada_electoral_district"] = 2500,
["Infobox_Canadian_Football_League_biography"] = 5700,
["Infobox_Canadian_Football_League_biography/position"] = 5600,
["Infobox_Chinese"] = 20000,
["Infobox_Chinese/Chinese"] = 2700,
["Infobox_Chinese/Footer"] = 8700,
["Infobox_Chinese/Header"] = 8700,
["Infobox_Chinese/Korean"] = 17000,
["Infobox_Christian_leader"] = 18000,
["Infobox_Election"] = 2100,
["Infobox_French_commune"] = 38000,
["Infobox_GAA_player"] = 2700,
["Infobox_Gaelic_games_player"] = 5000,
["Infobox_German_location"] = 13000,
["Infobox_German_place"] = 14000,
["Infobox_Grand_Prix_race_report"] = 2000,
["Infobox_Greece_place"] = 2800,
["Infobox_Greek_Dimos"] = 2800,
["Infobox_Hindu_temple"] = 2400,
["Infobox_Indian_constituency"] = 4600,
["Infobox_Indian_constituency/defaultdata"] = 4600,
["Infobox_Italian_comune"] = 8100,
["Infobox_Korean_name"] = 15000,
["Infobox_Korean_name/categories"] = 15000,
["Infobox_MLB_yearly"] = 3100,
["Infobox_NASCAR_race_report"] = 2200,
["Infobox_NCAA_team_season"] = 18000,
["Infobox_NFL_biography"] = 28000,
["Infobox_NFL_player"] = 7700,
["Infobox_NFL_team_season"] = 3900,
["Infobox_NRHP"] = 72000,
["Infobox_NRHP/conv"] = 18000,
["Infobox_NRHP/locmapin2region"] = 66000,
["Infobox_Officeholder"] = 4800,
["Infobox_Olympic_event"] = 7300,
["Infobox_Olympic_event/games_text"] = 7300,
["Infobox_Paralympic_event"] = 2600,
["Infobox_Paralympic_event/games_text"] = 2600,
["Infobox_Politician"] = 2200,
["Infobox_Romanian_subdivision"] = 3200,
["Infobox_Russian_district"] = 2000,
["Infobox_Russian_inhabited_locality"] = 4400,
["Infobox_SCOTUS_case"] = 3700,
["Infobox_Site_of_Special_Scientific_Interest"] = 2000,
["Infobox_Swiss_town"] = 2800,
["Infobox_Switzerland_municipality"] = 2900,
["Infobox_Turkey_place"] = 18000,
["Infobox_U.S._county"] = 3000,
["Infobox_U.S._county/district"] = 3000,
["Infobox_UK_constituency"] = 2100,
["Infobox_UK_constituency/year"] = 2100,
["Infobox_UK_legislation"] = 3200,
["Infobox_UK_place"] = 26000,
["Infobox_UK_place/NoDialCode"] = 8000,
["Infobox_UK_place/NoPostCode"] = 3100,
["Infobox_UK_place/area"] = 2400,
["Infobox_UK_place/dist"] = 2500,
["Infobox_UK_place/local"] = 26000,
["Infobox_UK_place/styles.css"] = 26000,
["Infobox_UN_resolution"] = 2300,
["Infobox_US_Supreme_Court_case"] = 3800,
["Infobox_US_Supreme_Court_case/courts"] = 3800,
["Infobox_Wikipedia_user"] = 9700,
["Infobox_YouTube_personality"] = 2600,
["Infobox_YouTube_personality/styles.css"] = 2600,
["Infobox_academic"] = 14000,
["Infobox_aircraft_begin"] = 14000,
["Infobox_aircraft_occurrence"] = 2300,
["Infobox_aircraft_type"] = 12000,
["Infobox_airline"] = 4600,
["Infobox_airport"] = 15000,
["Infobox_airport/datatable"] = 15000,
["Infobox_album"] = 162000,
["Infobox_album/color"] = 191000,
["Infobox_album/link"] = 162000,
["Infobox_anatomy"] = 4500,
["Infobox_ancient_site"] = 5400,
["Infobox_animanga/Footer"] = 6800,
["Infobox_animanga/Header"] = 6800,
["Infobox_animanga/Print"] = 5400,
["Infobox_animanga/Video"] = 4700,
["Infobox_architect"] = 3700,
["Infobox_artist"] = 28000,
["Infobox_artist_discography"] = 5900,
["Infobox_artwork"] = 11000,
["Infobox_athlete"] = 2900,
["Infobox_automobile"] = 8400,
["Infobox_award"] = 13000,
["Infobox_badminton_player"] = 3200,
["Infobox_baseball_biography"] = 28000,
["Infobox_baseball_biography/style"] = 28000,
["Infobox_baseball_biography/styles.css"] = 28000,
["Infobox_basketball_biography"] = 21000,
["Infobox_basketball_biography/style"] = 21000,
["Infobox_basketball_club"] = 3000,
["Infobox_beauty_pageant"] = 2400,
["Infobox_bilateral_relations"] = 4400,
["Infobox_body_of_water"] = 18000,
["Infobox_book"] = 52000,
["Infobox_boxer"] = 5700,
["Infobox_bridge"] = 6000,
["Infobox_building"] = 27000,
["Infobox_character"] = 7600,
["Infobox_chess_biography"] = 3800,
["Infobox_chess_player"] = 3100,
["Infobox_church"] = 15000,
["Infobox_church/denomination"] = 15000,
["Infobox_church/font_color"] = 15000,
["Infobox_civil_conflict"] = 2400,
["Infobox_civilian_attack"] = 5500,
["Infobox_college_coach"] = 12000,
["Infobox_college_football_game"] = 2100,
["Infobox_college_sports_team_season"] = 39000,
["Infobox_college_sports_team_season/link"] = 39000,
["Infobox_college_sports_team_season/name"] = 39000,
["Infobox_college_sports_team_season/succession"] = 39000,
["Infobox_college_sports_team_season/team"] = 39000,
["Infobox_comic_book_title"] = 2900,
["Infobox_comics_character"] = 3500,
["Infobox_comics_creator"] = 3500,
["Infobox_comics_creator/styles.css"] = 3500,
["Infobox_company"] = 83000,
["Infobox_computing_device"] = 2300,
["Infobox_concert"] = 3300,
["Infobox_constituency"] = 5300,
["Infobox_country"] = 6400,
["Infobox_country/formernext"] = 6000,
["Infobox_country/imagetable"] = 5200,
["Infobox_country/multirow"] = 8200,
["Infobox_country/status_text"] = 2800,
["Infobox_country/styles.css"] = 6400,
["Infobox_country_at_games"] = 15000,
["Infobox_country_at_games/core"] = 15000,
["Infobox_country_at_games/see_also"] = 12000,
["Infobox_court_case"] = 4600,
["Infobox_court_case/images"] = 2400,
["Infobox_cricket_tournament"] = 2300,
["Infobox_cricketer"] = 32000,
["Infobox_cricketer/career"] = 32000,
["Infobox_cricketer/national_side"] = 7500,
["Infobox_criminal"] = 6300,
["Infobox_curler"] = 2600,
["Infobox_cycling_race_report"] = 4500,
["Infobox_cyclist"] = 16000,
["Infobox_dam"] = 5700,
["Infobox_designation_list"] = 19000,
["Infobox_designation_list/entry"] = 17000,
["Infobox_dim"] = 6900,
["Infobox_dim/core"] = 6900,
["Infobox_diocese"] = 3800,
["Infobox_drug"] = 9700,
["Infobox_drug/chemical_formula"] = 9700,
["Infobox_drug/data_page_link"] = 9700,
["Infobox_drug/formatATC"] = 9600,
["Infobox_drug/formatCASnumber"] = 9700,
["Infobox_drug/formatChEBI"] = 9700,
["Infobox_drug/formatChEMBL"] = 9700,
["Infobox_drug/formatChemDBNIAID"] = 9700,
["Infobox_drug/formatChemSpider"] = 9700,
["Infobox_drug/formatCompTox"] = 9700,
["Infobox_drug/formatDrugBank"] = 9700,
["Infobox_drug/formatIUPHARBPS"] = 9700,
["Infobox_drug/formatJmol"] = 9700,
["Infobox_drug/formatKEGG"] = 9700,
["Infobox_drug/formatPDBligand"] = 9000,
["Infobox_drug/formatPubChemCID"] = 9700,
["Infobox_drug/formatPubChemSID"] = 9700,
["Infobox_drug/formatUNII"] = 9700,
["Infobox_drug/legal_status"] = 9800,
["Infobox_drug/licence"] = 9700,
["Infobox_drug/maintenance_categories"] = 9700,
["Infobox_drug/non-ref-space"] = 4200,
["Infobox_drug/pregnancy_category"] = 9700,
["Infobox_drug/title"] = 9700,
["Infobox_election"] = 30000,
["Infobox_election/row"] = 30000,
["Infobox_election/shortname"] = 28000,
["Infobox_enzyme"] = 5100,
["Infobox_ethnic_group"] = 7300,
["Infobox_event"] = 5400,
["Infobox_family"] = 2100,
["Infobox_figure_skater"] = 4200,
["Infobox_film"] = 156000,
["Infobox_film/short_description"] = 152000,
["Infobox_film_awards"] = 2600,
["Infobox_film_awards/link"] = 2600,
["Infobox_film_awards/style"] = 2600,
["Infobox_food"] = 6800,
["Infobox_football_biography"] = 206000,
["Infobox_football_club"] = 27000,
["Infobox_football_club_season"] = 20000,
["Infobox_football_league"] = 2600,
["Infobox_football_league_season"] = 19000,
["Infobox_football_match"] = 5900,
["Infobox_football_tournament_season"] = 8000,
["Infobox_former_subdivision"] = 3300,
["Infobox_former_subdivision/styles.css"] = 3300,
["Infobox_galaxy"] = 2100,
["Infobox_game"] = 2500,
["Infobox_game_score"] = 3400,
["Infobox_gene"] = 13000,
["Infobox_given_name"] = 4000,
["Infobox_golfer"] = 4400,
["Infobox_golfer/highest_ranking"] = 4400,
["Infobox_government_agency"] = 10000,
["Infobox_government_cabinet"] = 2500,
["Infobox_gridiron_football_person"] = 2400,
["Infobox_gridiron_football_person/position"] = 5600,
["Infobox_gymnast"] = 3400,
["Infobox_handball_biography"] = 4900,
["Infobox_historic_site"] = 11000,
["Infobox_horseraces"] = 2600,
["Infobox_hospital"] = 6300,
["Infobox_hospital/care_system"] = 6300,
["Infobox_hospital/lists"] = 6300,
["Infobox_ice_hockey_biography"] = 20000,
["Infobox_ice_hockey_player"] = 19000,
["Infobox_ice_hockey_team"] = 3000,
["Infobox_ice_hockey_team_season"] = 2000,
["Infobox_international_football_competition"] = 5700,
["Infobox_islands"] = 8800,
["Infobox_islands/area"] = 9200,
["Infobox_islands/density"] = 9200,
["Infobox_islands/length"] = 8800,
["Infobox_islands/styles.css"] = 8800,
["Infobox_journal"] = 9700,
["Infobox_journal/Abbreviation_search"] = 9600,
["Infobox_journal/Bluebook_check"] = 9400,
["Infobox_journal/Former_check"] = 9400,
["Infobox_journal/ISO_4_check"] = 9400,
["Infobox_journal/ISSN-eISSN"] = 9500,
["Infobox_journal/Indexing_search"] = 9500,
["Infobox_journal/MathSciNet_check"] = 9400,
["Infobox_journal/NLM_check"] = 9400,
["Infobox_journal/frequency"] = 8600,
["Infobox_lake"] = 4400,
["Infobox_language"] = 9500,
["Infobox_language/family-color"] = 11000,
["Infobox_language/genetic"] = 6500,
["Infobox_language/linguistlist"] = 9500,
["Infobox_language/ref"] = 7100,
["Infobox_legislature"] = 3600,
["Infobox_library"] = 2100,
["Infobox_lighthouse"] = 2600,
["Infobox_lighthouse/light"] = 2600,
["Infobox_locomotive"] = 4900,
["Infobox_magazine"] = 7600,
["Infobox_manner_of_address"] = 3300,
["Infobox_mapframe"] = 80000,
["Infobox_martial_artist"] = 5700,
["Infobox_martial_artist/record"] = 5700,
["Infobox_medal_templates"] = 422000,
["Infobox_medical_condition"] = 10000,
["Infobox_medical_condition_(new)"] = 8200,
["Infobox_medical_details"] = 2000,
["Infobox_military_conflict"] = 22000,
["Infobox_military_installation"] = 9700,
["Infobox_military_person"] = 45000,
["Infobox_military_unit"] = 26000,
["Infobox_mine"] = 2100,
["Infobox_model"] = 2300,
["Infobox_monument"] = 2000,
["Infobox_mountain"] = 28000,
["Infobox_multi-sport_competition_event"] = 2400,
["Infobox_museum"] = 10000,
["Infobox_musical_artist"] = 121000,
["Infobox_musical_artist/color"] = 121000,
["Infobox_musical_artist/hCard_class"] = 312000,
["Infobox_musical_composition"] = 2900,
["Infobox_name"] = 7400,
["Infobox_name_module"] = 6900,
["Infobox_newspaper"] = 9700,
["Infobox_nobility"] = 2500,
["Infobox_noble"] = 7300,
["Infobox_officeholder"] = 217000,
["Infobox_officeholder/office"] = 222000,
["Infobox_official_post"] = 8000,
["Infobox_organization"] = 36000,
["Infobox_pageant_titleholder"] = 2900,
["Infobox_park"] = 7400,
["Infobox_person"] = 472000,
["Infobox_person/Wikidata"] = 4800,
["Infobox_person/height"] = 102000,
["Infobox_person/length"] = 7100,
["Infobox_person/weight"] = 66000,
["Infobox_philosopher"] = 3400,
["Infobox_planet"] = 4700,
["Infobox_play"] = 3900,
["Infobox_political_party"] = 14000,
["Infobox_power_station"] = 3000,
["Infobox_prepared_food"] = 3100,
["Infobox_professional_wrestler"] = 4300,
["Infobox_professional_wrestling_event"] = 2700,
["Infobox_protected_area"] = 14000,
["Infobox_protein_family"] = 2100,
["Infobox_publisher"] = 2400,
["Infobox_racehorse"] = 5500,
["Infobox_racing_driver"] = 3800,
["Infobox_racing_driver_series_section"] = 2000,
["Infobox_radio_station"] = 22000,
["Infobox_rail"] = 2900,
["Infobox_rail_line"] = 7300,
["Infobox_rail_service"] = 2900,
["Infobox_rail_service/doc"] = 2900,
["Infobox_reality_competition_season"] = 3500,
["Infobox_record_label"] = 4000,
["Infobox_recurring_event"] = 6400,
["Infobox_religious_biography"] = 5200,
["Infobox_religious_building"] = 12000,
["Infobox_religious_building/color"] = 17000,
["Infobox_restaurant"] = 2800,
["Infobox_river"] = 30000,
["Infobox_river/calcunit"] = 30000,
["Infobox_river/discharge"] = 30000,
["Infobox_river/row-style"] = 30000,
["Infobox_river/source"] = 30000,
["Infobox_road"] = 24000,
["Infobox_road/meta/mask/category"] = 24000,
["Infobox_road/meta/mask/country"] = 24000,
["Infobox_road/styles.css"] = 25000,
["Infobox_road_small"] = 2300,
["Infobox_rockunit"] = 6400,
["Infobox_royalty"] = 22000,
["Infobox_royalty/short_description"] = 13000,
["Infobox_rugby_biography"] = 16000,
["Infobox_rugby_biography/correct_date"] = 16000,
["Infobox_rugby_biography/depcheck"] = 15000,
["Infobox_rugby_league_biography"] = 9900,
["Infobox_rugby_league_biography/PLAYER"] = 9800,
["Infobox_rugby_team"] = 2600,
["Infobox_sailboat_specifications"] = 2300,
["Infobox_saint"] = 5000,
["Infobox_school"] = 38000,
["Infobox_school/short_description"] = 38000,
["Infobox_school_district"] = 5600,
["Infobox_school_district/styles.css"] = 5600,
["Infobox_scientist"] = 48000,
["Infobox_service_record"] = 2600,
["Infobox_settlement"] = 560000,
["Infobox_settlement/areadisp"] = 234000,
["Infobox_settlement/columns"] = 94000,
["Infobox_settlement/columns/styles.css"] = 94000,
["Infobox_settlement/densdisp"] = 435000,
["Infobox_settlement/impus"] = 81000,
["Infobox_settlement/lengthdisp"] = 168000,
["Infobox_settlement/link"] = 94000,
["Infobox_settlement/metric"] = 208000,
["Infobox_settlement/pref"] = 289000,
["Infobox_settlement/styles.css"] = 560000,
["Infobox_ship_begin"] = 41000,
["Infobox_ship_career"] = 37000,
["Infobox_ship_characteristics"] = 41000,
["Infobox_ship_class_overview"] = 4100,
["Infobox_ship_image"] = 40000,
["Infobox_shopping_mall"] = 3400,
["Infobox_short_story"] = 2400,
["Infobox_skier"] = 2500,
["Infobox_soap_character"] = 2900,
["Infobox_software"] = 14000,
["Infobox_software/simple"] = 14000,
["Infobox_song"] = 75000,
["Infobox_song/color"] = 75000,
["Infobox_song/link"] = 75000,
["Infobox_spaceflight"] = 3500,
["Infobox_spaceflight/styles.css"] = 3500,
["Infobox_sport_event"] = 2100,
["Infobox_sports_competition_event"] = 17000,
["Infobox_sports_competition_event/medalrow"] = 11000,
["Infobox_sports_league"] = 5000,
["Infobox_sports_season"] = 5400,
["Infobox_sports_team"] = 2200,
["Infobox_sportsperson"] = 106000,
["Infobox_stadium"] = 3500,
["Infobox_station"] = 55000,
["Infobox_station/doc"] = 55000,
["Infobox_station/services"] = 55000,
["Infobox_station/styles.css"] = 55000,
["Infobox_street"] = 3400,
["Infobox_swimmer"] = 9400,
["Infobox_television"] = 57000,
["Infobox_television/Short_description"] = 54000,
["Infobox_television_channel"] = 6200,
["Infobox_television_episode"] = 12000,
["Infobox_television_episode/styles.css"] = 12000,
["Infobox_television_season"] = 9400,
["Infobox_television_station"] = 3700,
["Infobox_tennis_biography"] = 10000,
["Infobox_tennis_event"] = 2500,
["Infobox_tennis_tournament_event"] = 19000,
["Infobox_tennis_tournament_year"] = 9100,
["Infobox_tennis_tournament_year/color"] = 28000,
["Infobox_tennis_tournament_year/footer"] = 28000,
["Infobox_train"] = 2300,
["Infobox_union"] = 2100,
["Infobox_university"] = 26000,
["Infobox_user"] = 2600,
["Infobox_venue"] = 18000,
["Infobox_video_game"] = 28000,
["Infobox_video_game/styles.css"] = 28000,
["Infobox_volleyball_biography"] = 5300,
["Infobox_weapon"] = 7300,
["Infobox_website"] = 7700,
["Infobox_writer"] = 38000,
["Information"] = 101000,
["Information/styles.css"] = 101000,
["Inprogress"] = 2400,
["Input_link"] = 32000,
["Instagram"] = 11000,
["Interlanguage_link"] = 153000,
["Interlanguage_link_multi"] = 19000,
["Internet_Archive_author"] = 19000,
["Internet_Archive_film"] = 2500,
["Intitle"] = 12000,
["Invalid_SVG"] = 3600,
["Invalid_SVG/styles.css"] = 3600,
["Iptalk"] = 17000,
["IranCensus2006"] = 47000,
["IranNCSGN"] = 3200,
["Iran_Census_2006"] = 47000,
["Irc"] = 2100,
["Irish_place_name"] = 2600,
["IsIPAddress"] = 39000,
["IsValidPageName"] = 141000,
["Is_country_in_Central_America"] = 13000,
["Is_country_in_the_Caribbean"] = 14000,
["Is_interwiki_link"] = 6100,
["Is_italic_taxon"] = 475000,
["Is_redirect"] = 27000,
["Isbn"] = 7500,
["Isfdb_name"] = 3700,
["Isfdb_title"] = 4500,
["Isnumeric"] = 206000,
["Iso2continent"] = 35000,
["Iso2country"] = 23000,
["Iso2country/article"] = 22000,
["Iso2country/data"] = 23000,
["Iso2nationality"] = 225000,
["Issubst"] = 72000,
["Isu_name"] = 2200,
["Italic_dab2"] = 5200,
["Italic_title"] = 284000,
["Italic_title_prefixed"] = 8700,
["Italics_colon"] = 3700,
["Italictitle"] = 4300,
["Ivm"] = 5700,
["Ivm/styles.css"] = 5700,
["Ivmbox"] = 123000,
["Ivory_messagebox"] = 141000,
["Module:I18n/complex_date"] = 66000,
["Module:IP"] = 131000,
["Module:IPA_symbol"] = 4800,
["Module:IPA_symbol/data"] = 4800,
["Module:IPAc-en"] = 48000,
["Module:IPAc-en/data"] = 48000,
["Module:IPAc-en/phonemes"] = 48000,
["Module:IPAc-en/pronunciation"] = 48000,
["Module:IPAddress"] = 188000,
["Module:ISO_3166"] = 1030000,
["Module:ISO_3166/data/AT"] = 2500,
["Module:ISO_3166/data/BA"] = 3400,
["Module:ISO_3166/data/CA"] = 2500,
["Module:ISO_3166/data/CN"] = 2100,
["Module:ISO_3166/data/DE"] = 14000,
["Module:ISO_3166/data/ES"] = 3600,
["Module:ISO_3166/data/FR"] = 38000,
["Module:ISO_3166/data/GB"] = 6400,
["Module:ISO_3166/data/GR"] = 3100,
["Module:ISO_3166/data/IN"] = 29000,
["Module:ISO_3166/data/IR"] = 7300,
["Module:ISO_3166/data/National"] = 1030000,
["Module:ISO_3166/data/PL"] = 6600,
["Module:ISO_3166/data/RS"] = 3200,
["Module:ISO_3166/data/RU"] = 25000,
["Module:ISO_3166/data/US"] = 85000,
["Module:ISO_639_name"] = 20000,
["Module:ISOdate"] = 66000,
["Module:Icon"] = 580000,
["Module:Icon/data"] = 580000,
["Module:If_empty"] = 3640000,
["Module:If_in_page"] = 9800,
["Module:If_preview"] = 288000,
["Module:If_preview/configuration"] = 288000,
["Module:If_preview/styles.css"] = 288000,
["Module:Import_style"] = 11000,
["Module:In_lang"] = 354000,
["Module:Indent"] = 4300,
["Module:Infobox"] = 4090000,
["Module:Infobox/dates"] = 69000,
["Module:Infobox/styles.css"] = 4350000,
["Module:Infobox3cols"] = 296000,
["Module:InfoboxImage"] = 4400000,
["Module:Infobox_body_of_water_tracking"] = 18000,
["Module:Infobox_cyclist_tracking"] = 16000,
["Module:Infobox_gene"] = 13000,
["Module:Infobox_mapframe"] = 402000,
["Module:Infobox_military_conflict"] = 22000,
["Module:Infobox_military_conflict/styles.css"] = 22000,
["Module:Infobox_multi-lingual_name"] = 20000,
["Module:Infobox_multi-lingual_name/data"] = 20000,
["Module:Infobox_power_station"] = 3000,
["Module:Infobox_road"] = 25000,
["Module:Infobox_road/browselinks"] = 25000,
["Module:Infobox_road/errors"] = 24000,
["Module:Infobox_road/length"] = 25000,
["Module:Infobox_road/locations"] = 24000,
["Module:Infobox_road/map"] = 24000,
["Module:Infobox_road/route"] = 25000,
["Module:Infobox_road/sections"] = 24000,
["Module:Infobox_television"] = 57000,
["Module:Infobox_television_disambiguation_check"] = 63000,
["Module:Infobox_television_episode"] = 12000,
["Module:Infobox_television_season_disambiguation_check"] = 8900,
["Module:Infobox_television_season_name"] = 9400,
["Module:Internet_Archive"] = 19000,
["Module:IrelandByCountyCatNav"] = 3300,
["Module:Is_infobox_in_lead"] = 377000,
["Module:Is_instance"] = 335000,
["Module:Italic_title"] = 1110000,
["Module:Italic_title2"] = 5200,
}
2ac452f2245e0d8f8d0cc1194596e0d536431539
Template:Infobox/doc
10
79
163
162
2023-09-14T01:12:03Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{Documentation subpage}}
<!-- Please place categories where indicated at the bottom of this page and interwikis at Wikidata (see [[Wikipedia:Wikidata]]) -->
{{distinguish|Template:Userbox}}
{{#ifeq:{{SUBPAGENAME}}|sandbox||{{High-use}}}}
{{Lua|Module:Infobox}}
{{Parameter names example
|name={{PAGENAME}} <!--|child |subbox |decat--> |title |above |subheader |subheader1 |subheader2={{{subheader2}}}<br/>......
|image|caption |image1|caption1 |image2|caption2={{{caption2}}}<br/>......
|header1=<div style="border-top:1px dashed #ccc;">{{{header1}}}<br/>{{nobold|( ''or'' )}}</div>
|label2={{{label1}}} |data2={{{data1}}}
|data3=( ''or'' ) |data4=<div style="padding-bottom:0.25em;border-bottom:1px dashed #ccc;">{{{data1}}}</div>
|header5={{{header2}}}<br/><div style="padding:0.75em 0 0.5em;">{{nobold|( ''or'' )}}</div>
|label6={{{label2}}} |data6={{{data2}}}
|data7=( ''or'' ) |data8=<div style="padding-bottom:0.25em;border-bottom:1px dashed #ccc;">{{{data2}}}</div>
|data9=<div style="padding:0.75em 0 0.5em;">( ''etc'' )</div>
|below
}}
This template is intended as a meta template: a template used for constructing other templates. '''Note''': In general, it is not meant for use directly in an article, but can be used on a one-off basis if required. [[Help:Infobox]] contains an introduction about the recommended content and design of infoboxes; [[Wikipedia:Manual of Style/Infoboxes]] contains additional style guidelines. See [[WP:List of infoboxes]] and [[:Category:Infobox templates]] for lists of prepared topic-specific infoboxes.
== Usage ==
{{tlf|Infobox}} is a meta-template: used to organise an actual <nowiki>{{Infobox sometopic}}</nowiki> template (like {{tl|Infobox building}}).
For <code><nowiki>[[Template:Infobox sometopic]]</nowiki></code>, template code then looks like this, simplified:
<syntaxhighlight lang="wikitext">
{{Infobox
| name = {{{name|{{PAGENAME}}}}}
| image = {{{image|}}}
| caption1 = {{{caption|}}}
| label1 = Former names
| data1 = {{{former_names|}}}
| header2 = General information
| label3 = Status
| data3 = {{{status|}}}
... <!-- etc. -->
}}
</syntaxhighlight>
== Optional control parameters ==
; name : If this parameter is present, "view/talk/edit" links will be added to the bottom of the infobox pointing to the named page, prefixed by <code>Template:</code> if no namespace is specified. You may use the value <nowiki>{{subst:PAGENAME}}</nowiki>; however, this is rarely what you want because it will send users clicking these links in an infobox to the template code rather than the data in the infobox they probably want to change.
; child : See the [[#Embedding|Embedding]] section for details. If this is set to "yes", this child infobox should be titled but have no name parameter. This parameter is empty by default, set it to "yes" to activate it.
; subbox : See the [[#Subboxes|Subboxes]] section for details. If this is set to "yes", this subbox should be titled but have no name parameter. This parameter is empty by default, set to "yes" to activate it. It has no effect if the '''child''' parameter is also set to "yes".
; decat : If this is set to "yes", the current page will not be autocategorized in a maintenance category when the generated infobox has some problems or no visible data section. Leave empty by default or set to "yes" to activate it.
; autoheaders: If this is set to any non-blank value, headers which are not followed by data fields are suppressed. See the "[[#Hiding headers when all its data fields are empty|hiding headers when all its data fields are empty]]" section for more details.
== Content parameters ==
=== Title ===
There are two different ways to put a title on an infobox. One contains the title inside the infobox's border in the uppermost cell of the table, the other puts it as a caption on top of the table. You can use them both together, or just one or the other, or neither (though this is not recommended):
; title : Text to put in the caption over the top of the table (or as section header before the whole content of this table, if this is a child infobox). For [[Wikipedia:Manual of Style/Accessibility#Tables|accessibility reasons]], this is the most recommended alternative.
; above : Text to put within the uppermost cell of the table.
; subheader(n) : additional title fields which fit below {{{title}}} and {{{above}}}, but before images.
Examples:
{{Infobox
| name = Infobox/doc
| title = Text in caption over infobox
| subheader = Subheader of the infobox
| header = (the rest of the infobox goes here)
}}
<syntaxhighlight lang="wikitext" style="overflow:auto">
{{Infobox
| name = {{subst:PAGENAME}}
| title = Text in caption over infobox
| subheader = Subheader of the infobox
| header = (the rest of the infobox goes here)
}}
</syntaxhighlight>{{clear}}
{{Infobox
| name = Infobox/doc
| above = Text in uppermost cell of infobox
| subheader = Subheader of the infobox
| subheader2 = Second subheader of the infobox
| header = (the rest of the infobox goes here)
}}
<syntaxhighlight lang="wikitext" style="overflow:auto">
{{Infobox
| name = {{subst:PAGENAME}}
| above = Text in uppermost cell of infobox
| subheader = Subheader of the infobox
| subheader2 = Second subheader of the infobox
| header = (the rest of the infobox goes here)
}}
</syntaxhighlight>{{clear}}
=== Illustration images ===
; image(n) : images to display at the top of the template. Use full image syntax, for example <nowiki>[[File:example.png|200px|alt=Example alt text]]</nowiki>. Image is centered by default. See [[WP:ALT]] for more on alt text.
; caption(n) : Text to put underneath the images.
=== Main data ===
; header(n) : Text to use as a header in row n.
; label(n) : Text to use as a label in row n.
; data(n) : Text to display as data in row n.
Note: for any given value for (n), not all combinations of parameters are permitted. The presence of a {{para|header''(n)''}} will cause the corresponding {{para|data''(n)''}} (and {{para|rowclass''(n)''}} {{para|label''(n)''}}, see below) to be ignored; the absence of a {{para|data''(n)''}} will cause the corresponding {{para|label''(n)''}} to be ignored. Valid combinations for any single row are:
* {{para|class''(n)''}} {{para|header''(n)''}}
* {{para|rowclass''(n)''}} {{para|class''(n)''}} {{para|data''(n)''}}
* {{para|rowclass''(n)''}} {{para|label''(n)''}} {{para|class''(n)''}} {{para|data''(n)''}}
See the rendering of header4, label4, and data4 in the [[#Examples|Examples]] section below.
==== Number ranges ====
To allow flexibility when the layout of an infobox is changed, it may be helpful when developing an infobox to use non-contiguous numbers for header and label/data rows. Parameters for new rows can then be inserted in future without having to renumber existing parameters. For example:
<syntaxhighlight lang="wikitext" style="overflow:auto">
| header3 = Section 1
| label5 = Label A
| data5 = Data A
| label7 = Label C
| data7 = Data C
| header10 = Section 2
| label12 = Label D
| data12 = Data D
</syntaxhighlight>{{clear}}
It is also possible to automatically renumber parameter names by using [[User:Frietjes/infoboxgap.js]] or [[Module:IncrementParams]].
There is no upper limit on numbers but there must be at most 50 between each used number.
==== Making data fields optional ====
A row with a label but no data is not displayed. This allows for the easy creation of optional infobox content rows. To make a row optional use a parameter that defaults to an empty string, like so:
<syntaxhighlight lang="wikitext" style="overflow:auto">
| label5 = Population
| data5 = {{{population|}}}
</syntaxhighlight>{{clear}}
This way if an article doesn't define the population parameter in its infobox the row won't be displayed.
For more complex fields with pre-formatted contents that would still be present even if the parameter wasn't set, you can wrap it all in an "#if" statement to make the whole thing vanish when the parameter is not used. For instance, the "#if" statement in the following example reads "#if:the parameter ''mass'' has been supplied |then display it, followed by 'kg'":
<syntaxhighlight lang="wikitext" style="overflow:auto">
| label6 = Mass
| data6 = {{ #if: {{{mass|}}} | {{{mass}}} kg }}
</syntaxhighlight>{{clear}}
For more on #if, see [[meta:ParserFunctions##if:|here]].
==== Hiding headers when all its data fields are empty ====
You can also make headers automatically hide when their section is empty (has no data-row showing).
Consider this situation:
{{Infobox
| title = Example: header with & without data
| headerstyle = background:lightgrey
| header1 = Header1 with empty section
| label2 = label2 text | data2 =
| label3 = label3 text | data3 =
| label4 = label4 text | data4 =
| header5 = Header5 with data below
| label6 = label6 text | data6 = Some value
}}
<syntaxhighlight lang="wikitext" style="overflow:auto">
{{Infobox
| title = Example: header with & without data
| headerstyle = background:lightgrey
| header1 = Header1 with empty section
| label2 = label2 text | data2 =
| label3 = label3 text | data3 =
| label4 = label4 text | data4 =
| header5 = Header5 with data below
| label6 = label6 text | data6 = Some value
}}
</syntaxhighlight>{{clear}}
If you want hide the header when no {{para|data''N''}} values are present, use '''{{para|autoheaders|y}}''':
{{Infobox
| title = Example: header with & without data
| autoheaders = y
| headerstyle = background:lightgrey
| header1 = Header1 with empty section
| label2 = label2 text | data2 =
| label3 = label3 text | data3 =
| label4 = label4 text | data4 =
| header5 = Header5 with data below
| label6 = label6 text | data6 = Some value
}}
<syntaxhighlight lang="wikitext" style="overflow:auto">
{{Infobox
| title = Example: header with & without data
| autoheaders = y
| headerstyle = background:lightgrey
| header1 = Header1 with empty section
| label2 = label2 text | data2 =
| label3 = label3 text | data3 =
| label4 = label4 text | data4 =
| header5 = Header5 with data below
| label6 = label6 text | data6 = Some value
}}
</syntaxhighlight>{{clear}}
So, header1 will be shown if any of item1, item2, or item3 is defined. If none of the three parameters are defined the header won't be shown and no empty row appears before the next visible content.
Note: if the data has empty css elements, like {{para|data|2=<span style="background:yellow;"></span>}}, this will be treated as non-empty (having data).
If {{para|autoheaders|y}} but there are items that you ''do not'' want to trigger a header, place {{para|headerX|_BLANK_}}. This will serve as an empty header and separate it from the subsequent items.
{{Infobox
| title = Example: blank header with & without data
| autoheaders = y
| headerstyle = background:lightgrey
| header1 = Header1 with empty section
| label2 = label2 text | data2 =
| label3 = label3 text | data3 =
| label4 = label4 text | data4 =
| header5 = _BLANK_
| label6 = label6 text | data6 = Some value, but does not trigger header1 or show header5
}}
<syntaxhighlight lang="wikitext" style="overflow:auto">
{{Infobox
| title = Example: header with & without data
| autoheaders = y
| headerstyle = background:lightgrey
| header1 = Header1 with empty section
| label2 = label2 text | data2 =
| label3 = label3 text | data3 =
| label4 = label4 text | data4 =
| header5 = _BLANK_
| label6 = label6 text | data6 = Some value, but does not trigger header1 or show header5
}}
</syntaxhighlight>{{clear}}
=== Footer ===
; below : Text to put in the bottom cell. The bottom cell is intended for footnotes, see-also, and other such information.
== Presentation parameters ==
=== Italic titles ===
Titles of articles with infoboxes may be made italic, in line with [[WP:ITALICTITLE]], by passing the <code>italic title</code> parameter.
* Turn on italic titles by passing {{para|italic title|<nowiki>{{{italic title|}}}</nowiki>}} from the infobox.
* Turn off by default (notably because only Latin script may be safely rendered in this style and italic may be needed to distinguish foreign language from local English language only in that script, but would be difficult to read for other scripts) but allow some instances to be made italic by passing {{para|italic title|<nowiki>{{{italic title|no}}}</nowiki>}}
* Do not make any titles italic by not passing the parameter at all.
=== CSS styling ===
{{div col}}
; bodystyle : Applies to the infobox table as a whole
; titlestyle : Applies only to the title caption. Adding a background color is usually inadvisable since the text is rendered "outside" the infobox.
; abovestyle : Applies only to the "above" cell at the top. The default style has font-size:125%; since this cell is usually used for a title, if you want to use the above cell for regular-sized text include "font-size:100%;" in the abovestyle.
; imagestyle : Applies to the cell the image is in. This includes the text of the image caption, but you should set text properties with captionstyle instead of imagestyle in case the caption is moved out of this cell in the future.
; captionstyle : Applies to the text of the image caption.
; rowstyle(n) : This parameter is inserted into the <code>style</code> attribute for the specified row.
; headerstyle : Applies to all header cells
; subheaderstyle : Applies to all subheader cells
; labelstyle : Applies to all label cells
; datastyle : Applies to all data cells
; belowstyle : Applies only to the below cell
{{div col end}}
=== HTML classes and microformats ===
{{div col}}
; bodyclass : This parameter is inserted into the <code>class</code> attribute for the infobox as a whole.
; titleclass : This parameter is inserted into the <code>class</code> attribute for the infobox's '''title''' caption.
<!-- currently not implemented in Lua module
; aboverowclass : This parameter is inserted into the <code>class</code> attribute for the complete table row the '''above''' cell is on.
-->
; aboveclass : This parameter is inserted into the <code>class</code> attribute for the infobox's '''above''' cell.
; subheaderrowclass(n) : This parameter is inserted into the <code>class</code> attribute for the complete table row the '''subheader''' is on.
; subheaderclass(n) : This parameter is inserted into the <code>class</code> attribute for the infobox's '''subheader'''.
; imagerowclass(n) : These parameters are inserted into the <code>class</code> attribute for the complete table row their respective '''image''' is on.
; imageclass : This parameter is inserted into the <code>class</code> attribute for the '''image'''.
; rowclass(n) : This parameter is inserted into the <code>class</code> attribute for the specified row including the '''label''' and '''data''' cells.
; class(n) : This parameter is inserted into the <code>class</code> attribute for the '''data''' cell of the specified row. If there's no '''data''' cell it has no effect.
<!-- currently not implemented in Lua module
; belowrowclass : This parameter is inserted into the <code>class</code> attribute for the complete table row the '''below''' cell is on.
-->
; belowclass : This parameter is inserted into the <code>class</code> attribute for the infobox's '''below''' cell.
{{div col end}}
This template supports the addition of microformat information. This is done by adding "class" attributes to various data cells, indicating what kind of information is contained within. Multiple class names may be specified, separated by spaces, some of them being used as selectors for custom styling according to a project policy or to the skin selected in user preferences, others being used for microformats.
To flag an infobox as containing [[hCard]] information, for example, add the following parameter:
<syntaxhighlight lang="wikitext" style="overflow:auto">
| bodyclass = vcard
</syntaxhighlight>{{clear}}
And for each row containing a data cell that's part of the vcard, add a corresponding class parameter:
<syntaxhighlight lang="wikitext" style="overflow:auto">
| class1 = fn
| class2 = org
| class3 = tel
</syntaxhighlight>{{clear}}
...and so forth. "above" and "title" can also be given classes, since these are usually used to display the name of the subject of the infobox.
See [[Wikipedia:WikiProject Microformats]] for more information on adding microformat information to Wikipedia, and [[microformat]] for more information on microformats in general.
== Examples ==
Notice how the row doesn't appear in the displayed infobox when a '''label''' is defined without an accompanying '''data''' cell, and how all of them are displayed when a '''header''' is defined on the same row as a '''data''' cell. Also notice that '''subheaders''' are not bold by default like the '''headers''' used to split the main data section, because this role is meant to be for the '''above''' cell :
{{Suppress categories|
{{Infobox
|name = Infobox/doc
|bodystyle =
|titlestyle =
|abovestyle = background:#cfc;
|subheaderstyle =
|title = Test Infobox
|above = Above text
|subheader = Subheader above image
|subheader2 = Second subheader
|imagestyle =
|captionstyle =
|image = [[File:Example-serious.jpg|200px|alt=Example alt text]]
|caption = Caption displayed below File:Example-serious.jpg
|headerstyle = background:#ccf;
|labelstyle = background:#ddf;
|datastyle =
|header1 = Header defined alone
| label1 =
| data1 =
|header2 =
| label2 = Label defined alone does not display (needs data, or is suppressed)
| data2 =
|header3 =
| label3 =
| data3 = Data defined alone
|header4 = All three defined (header, label, data, all with same number)
| label4 = does not display (same number as a header)
| data4 = does not display (same number as a header)
|header5 =
| label5 = Label and data defined (label)
| data5 = Label and data defined (data)
|belowstyle = background:#ddf;
|below = Below text
}}
}}
<syntaxhighlight lang="wikitext">
{{Infobox
|name = Infobox/doc
|bodystyle =
|titlestyle =
|abovestyle = background:#cfc;
|subheaderstyle =
|title = Test Infobox
|above = Above text
|subheader = Subheader above image
|subheader2 = Second subheader
|imagestyle =
|captionstyle =
|image = [[File:Example-serious.jpg|200px|alt=Example alt text]]
|caption = Caption displayed below File:Example-serious.jpg
|headerstyle = background:#ccf;
|labelstyle = background:#ddf;
|datastyle =
|header1 = Header defined alone
| label1 =
| data1 =
|header2 =
| label2 = Label defined alone does not display (needs data, or is suppressed)
| data2 =
|header3 =
| label3 =
| data3 = Data defined alone
|header4 = All three defined (header, label, data, all with same number)
| label4 = does not display (same number as a header)
| data4 = does not display (same number as a header)
|header5 =
| label5 = Label and data defined (label)
| data5 = Label and data defined (data)
|belowstyle = background:#ddf;
|below = Below text
}}
</syntaxhighlight>
For this example, the {{para|bodystyle}} and {{para|labelstyle}} parameters are used to adjust the infobox width and define a default width for the column of labels:
{{Infobox
|name = Infobox/doc
|bodystyle = width:20em
|titlestyle =
|title = Test Infobox
|headerstyle =
|labelstyle = width:33%
|datastyle =
|header1 =
| label1 = Label 1
| data1 = Data 1
|header2 =
| label2 = Label 2
| data2 = Data 2
|header3 =
| label3 = Label 3
| data3 = Data 3
|header4 = Header 4
| label4 =
| data4 =
|header5 =
| label5 = Label 5
| data5 = Data 5: Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
|belowstyle =
|below = Below text
}}
<syntaxhighlight lang="wikitext">
{{Infobox
|name = Infobox/doc
|bodystyle = width:20em
|titlestyle =
|title = Test Infobox
|headerstyle =
|labelstyle = width:33%
|datastyle =
|header1 =
| label1 = Label 1
| data1 = Data 1
|header2 =
| label2 = Label 2
| data2 = Data 2
|header3 =
| label3 = Label 3
| data3 = Data 3
|header4 = Header 4
| label4 =
| data4 =
|header5 =
| label5 = Label 5
| data5 = Data 5: Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
|belowstyle =
|below = Below text
}}
</syntaxhighlight>
== Embedding ==
<!--Linked from [[Template:Subinfobox bodystyle/doc]]-->
One infobox template can be embedded into another using the {{para|child}} parameter. This feature can be used to create a modular infobox, or to create better-defined logical sections. Long ago, it was necessary to use embedding in order to create infoboxes with more than 99 rows; but nowadays there's no limit to the number of rows that can be defined in a single instance of <code><nowiki>{{infobox}}</nowiki></code>.
{{Infobox
| title = Top level title
| data1 = {{Infobox | decat = yes | child = yes
| title = First subsection
| label1= Label 1.1
| data1 = Data 1.1
}}
| data2 = {{Infobox | decat = yes | child = yes
|title = Second subsection
| label1= Label 2.1
| data1 = Data 2.1
}}
| belowstyle =
| below = Below text
}}
<syntaxhighlight lang="wikitext" style="overflow:auto">
{{Infobox
| title = Top level title
| data1 = {{Infobox | decat = yes | child = yes
| title = First subsection
| label1= Label 1.1
| data1 = Data 1.1
}}
| data2 = {{Infobox | decat = yes | child = yes
|title = Second subsection
| label1= Label 2.1
| data1 = Data 2.1
}}
| belowstyle =
| below = Below text
}}
</syntaxhighlight>{{clear}}
Note, in the examples above, the child infobox is placed in a <code>data</code> field, not a <code>header</code> field. Notice that the section subheadings are not in bold font if bolding is not explicitly specified. To obtain bold section headings, place the child infobox in a '''header''' field (but not in a '''label''' field because it would not be displayed!), either using
{{Infobox
| title = Top level title
| header1 = {{Infobox | decat = yes | child = yes
| title = First subsection
| label1= Label 1.1
| data1 = Data 1.1
}}
| header2 = {{Infobox | decat = yes | child = yes
| title = Second subsection
| label1= Label 2.1
| data1 = Data 2.1
}}
| belowstyle =
| below = Below text
}}
<syntaxhighlight lang="wikitext" style="overflow:auto">
{{Infobox
| title = Top level title
| header1 = {{Infobox | decat = yes | child = yes
| title = First subsection
| label1= Label 1.1
| data1 = Data 1.1
}}
| header2 = {{Infobox | decat = yes | child = yes
| title = Second subsection
| label1= Label 2.1
| data1 = Data 2.1
}}
| belowstyle =
| below = Below text
}}
</syntaxhighlight>{{clear}}
or,
{{Infobox
| title = Top level title
| header1 = First subsection
{{Infobox | decat = yes | child = yes
| label1 = Label 1.1
| data1 = Data 1.1
}}
| header2 = Second subsection
{{Infobox | decat = yes | child = yes
| label1 = Label 2.1
| data1 = Data 2.1
}}
| belowstyle =
| below = Below text
}}
<syntaxhighlight lang="wikitext" style="overflow:auto">
{{Infobox
| title = Top level title
| header1 = First subsection
{{Infobox | decat = yes | child = yes
| label1 = Label 1.1
| data1 = Data 1.1
}}
| header2 = Second subsection
{{Infobox | decat = yes | child = yes
| label1 = Label 2.1
| data1 = Data 2.1
}}
| belowstyle =
| below = Below text
}}
</syntaxhighlight>{{clear}}
Note that omitting the {{para|title}} parameter, and not including any text preceding the embedded infobox, may result in spurious blank table rows, creating gaps in the visual presentation. The garbage output can be suppressed using {{para|rowstyleN|display: none}}, replacing N with the data/header number.
[[Wikipedia:WikiProject Infoboxes/embed]] includes some links to Wikipedia articles which include infoboxes embedded within other infoboxes.
== Subboxes ==
An alternative method for embedding is to use {{para|subbox|yes}}, which removes the outer border from the infobox, but preserves the interior structure. One feature of this approach is that the parent and child boxes need not have the same structure, and the label and data fields are not aligned between the parent and child boxes because they are not in the same parent table.
{{Infobox
| headerstyle = background-color:#eee;
| labelstyle = background-color:#eee;
| header1 = Main 1
| header2 = Main 2
| data3 = {{Infobox | subbox = yes
| headerstyle = background-color:#ccc;
| labelstyle = background-color:#ddd;
| header1 = Sub 3-1
| header2 = Sub 3-2
| label3 = Label 3-3 | data3 = Data 3-3
}}
| data4 = {{Infobox | subbox = yes
| labelstyle = background-color:#ccc;
| label1 = Label 4-1 | data1 = Data 4-1
}}
| label5 = Label 5 | data5 = Data 5
| header6 = Main 6
}}
<syntaxhighlight lang="wikitext" style="overflow:auto">
{{Infobox
| headerstyle = background-color:#eee;
| labelstyle = background-color:#eee;
| header1 = Main 1
| header2 = Main 2
| data3 = {{Infobox | subbox = yes
| headerstyle = background-color:#ccc;
| labelstyle = background-color:#ddd;
| header1 = Sub 3-1
| header2 = Sub 3-2
| label3 = Label 3-3 | data3 = Data 3-3
}}
| data4 = {{Infobox | subbox = yes
| labelstyle = background-color:#ccc;
| label1 = Label 4-1 | data1 = Data 4-1
}}
| label5 = Label 5 | data5 = Data 5
| header6 = Main 6
}}
</syntaxhighlight>{{clear}}
Similar embedding techniques may be used within content parameters of some other templates generating tables (such as [[:Template:Sidebar|Sidebar]]) :
{{Sidebar
| navbar = off
| headingstyle = background-color:#eee;
| heading1 = Heading 1
| heading2 = Heading 2
| content3 = {{Infobox | subbox = yes
| headerstyle = background-color:#ccc;
| labelstyle = background-color:#ddd;
| header1 = Sub 3-1
| header2 = Sub 3-2
| label3 = Label 3-3 | data3 = Data 3-3
}}
| content4 = {{Infobox | subbox = yes
| labelstyle = background-color:#ccc;
| label1 = Label 4-1 | data1 = Data 4-1
}}
| heading5 = Heading 5
}}
<syntaxhighlight lang="wikitext" style="overflow:auto">
{{Sidebar
| navbar = off
| headingstyle = background-color:#eee;
| heading1 = Heading 1
| heading2 = Heading 2
| content3 = {{Infobox | subbox = yes
| headerstyle = background-color:#ccc;
| labelstyle = background-color:#ddd;
| header1 = Sub 3-1
| header2 = Sub 3-2
| label3 = Label 3-3 | data3 = Data 3-3
}}
| content4 = {{Infobox | subbox = yes
| labelstyle = background-color:#ccc;
| label1 = Label 4-1 | data1 = Data 4-1
}}
| heading5 = Heading 5
}}
</syntaxhighlight>{{clear}}
Note that the default padding of the parent data cell containing each subbox is still visible, so the subboxes are slightly narrower than the parent box and there's a higher vertical spacing between standard cells of the parent box than between cells of distinct subboxes.
== Controlling line-breaking in embedded bulletless lists ==
Template {{tlx|nbsp}} may be used with {{tlx|wbr}} and {{tlx|nowrap}} to control line-breaking in bulletless lists embedded in infoboxes (e.g. cast list in {{tlx|Infobox film}}), to prevent wrapped long entries from being confused with multiple entries. See [[Template:Wbr/doc#Controlling line-breaking in infoboxes]] for details.
== Full blank syntax ==
(Note: there is no limit to the number of possible rows; only 20 are given below since infoboxes larger than that will be relatively rare. Just extend the numbering as needed. The microformat "class" parameters are also omitted as they are not commonly used.)
<syntaxhighlight lang="wikitext" style="overflow:auto">
{{Infobox
| name = {{subst:PAGENAME}}
| child = {{{child|}}}
| subbox = {{{subbox|}}}
| italic title = {{{italic title|no}}}
| templatestyles =
| child templatestyles =
| grandchild templatestyles =
| bodystyle =
| titlestyle =
| abovestyle =
| subheaderstyle =
| title =
| above =
| subheader =
| imagestyle =
| captionstyle =
| image =
| caption =
| image2 =
| caption2 =
| headerstyle =
| labelstyle =
| datastyle =
| header1 =
| label1 =
| data1 =
| header2 =
| label2 =
| data2 =
| header3 =
| label3 =
| data3 =
| header4 =
| label4 =
| data4 =
| header5 =
| label5 =
| data5 =
| header6 =
| label6 =
| data6 =
| header7 =
| label7 =
| data7 =
| header8 =
| label8 =
| data8 =
| header9 =
| label9 =
| data9 =
| header10 =
| label10 =
| data10 =
| header11 =
| label11 =
| data11 =
| header12 =
| label12 =
| data12 =
| header13 =
| label13 =
| data13 =
| header14 =
| label14 =
| data14 =
| header15 =
| label15 =
| data15 =
| header16 =
| label16 =
| data16 =
| header17 =
| label17 =
| data17 =
| header18 =
| label18 =
| data18 =
| header19 =
| label19 =
| data19 =
| header20 =
| label20 =
| data20 =
| belowstyle =
| below =
}}
</syntaxhighlight>{{clear}}
{{Help:Infobox/user style}}
== Porting to other MediaWikis ==
The infobox template requires the [[:mw:Extension:Scribunto|Scribunto]] and [[:mw:Extension:TemplateStyles|TemplateStyles]] extensions. [[Wikipedia:WikiProject Transwiki|WikiProject Transwiki]] has a version of this template that has been modified to work on other MediaWikis.
== TemplateData ==
{{TemplateData header}}
<templatedata>
{
"description": "This template is intended as a meta template, a template used for constructing other templates. In general, it is not meant for use directly in an article but can be used on a one-off basis if required.",
"format": "{{_\n| ________________ = _\n}}\n",
"params": {
"title": {
"label": "Title",
"description": "Title displayed above the infobox",
"type": "string",
"suggested": true
},
"image": {
"label": "Image",
"description": "Image illustrating the topic. Use full image syntax.",
"type": "content",
"suggested": true,
"example": "[[File:example.png|200px|alt=Example alt text]]"
},
"caption": {
"label": "Caption",
"description": "caption for the image",
"type": "content",
"suggested": true
}
},
"paramOrder": [
"title",
"image",
"caption"
]
}
</templatedata>
==Tracking categories==
* {{Category link with count|Articles with missing Wikidata information}}
* {{Category link with count|Articles using infobox templates with no data rows}}
* {{Category link with count|Pages using embedded infobox templates with the title parameter}}
==See also==
* [[Module:Infobox]], the [[WP:LUA|Lua]] module on which this template is based
* [[Module:Check for unknown parameters]]
* {{tl|Infobox3cols}}
* {{tl|Navbox}} and {{tl|Sidebar}}
* [[Wikipedia:List of infoboxes|List of infoboxes]]
* [[:Module:InfoboxImage]]
<includeonly>{{Sandbox other||
<!-- Categories below this line, please; interwikis at Wikidata -->
[[Category:Infobox templates| ]]
[[Category:Wikipedia metatemplates|Infobox]]
[[Category:Templates generating microformats]]
[[Category:Templates that add a tracking category]]
[[Category:Templates based on the Infobox Lua module]]
}}</includeonly>
b7ba187ea76ee960bbe295ad01c44c646eaedadb
Help:Infobox/user style
12
80
165
164
2023-09-14T01:12:05Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{{heading|
==Infoboxes and user style ==
}}}
Users can have [[WP:User style|user CSS]] that hides<!--, moves, or makes collapsible--> any infoboxes in their own browsers.
To hide all infoboxes, add the following to [[Special:MyPage/common.css]] (for all [[WP:Skin|skins]], or [[Special:MyPage/skin.css]] for just the current skin), on a line by itself:
<syntaxhighlight lang="css">div.mw-parser-output .infobox { display: none; }</syntaxhighlight>
Alternatively, you can add the following code to [[Special:MyPage/common.js|your common.js]] or into a browser user script that is executed by an extension like [[Greasemonkey]]:
<syntaxhighlight lang="js">$('.infobox').hide();</syntaxhighlight>
Be aware that although{{#if:{{{guideline|}}}||, per [[WP:Manual of Style/Infoboxes]],}} all information in an infobox ideally should also be found in the main body of an article, there isn't perfect compliance with this guideline. For example, the full taxonomic hierarchy in {{tlx|Taxobox}}, and the OMIM and other medical database codes of {{tlx|Infobox disease}} are often not found in the main article content. The infobox is also often the location of the most significant, even only, image in an article. There is a userscript which removes infoboxes but moves the images contained to separate thumbnails: [[User:Maddy from Celeste/disinfobox.js]].<!--
Needs Special:Mypage/common.js options for:
* Making infoboxes collapsible
** Making them auto-collapsed
* Moving infoboxes to bottom of page
--><noinclude>
{{Documentation|content=
This documentation snippet is transcluded at [[Help:Infobox]], [[Template:Infobox/doc]], [[WP:Customisation#Hiding specific messages]], [[Help:User style]], [[WP:Manual of Style/Infoboxes]], and other places where this information is relevant.
As a template, this snippet takes a {{para|heading}} parameter to replace the level-2 <code>==Infoboxes and user style==</code> section heading code, as needed. E.g., for a <code>=== ... ===</code> level-3 heading: <code><nowiki>heading={{=}}{{=}}{{=}}Infoboxes and user style{{=}}{{=}}{{=}}</nowiki></code>
}}
</noinclude>
ba4dac68eb2bdc49a32f2a11b9afd52381bf06b5
Template:Ombox
10
84
171
170
2023-09-14T01:12:06Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{#invoke:Message box|ombox}}<noinclude>
{{documentation}}
<!-- Categories go on the /doc subpage, and interwikis go on Wikidata. -->
</noinclude>
0e54065432d540737b9e56c4e3a8e7f74d4534ea
Module:TNT
828
85
173
172
2023-09-14T01:12:07Z
Ilovethehitgameomori
2
1 revision imported
Scribunto
text/plain
--
-- INTRO: (!!! DO NOT RENAME THIS PAGE !!!)
-- This module allows any template or module to be copy/pasted between
-- wikis without any translation changes. All translation text is stored
-- in the global Data:*.tab pages on Commons, and used everywhere.
--
-- SEE: https://www.mediawiki.org/wiki/Multilingual_Templates_and_Modules
--
-- ATTENTION:
-- Please do NOT rename this module - it has to be identical on all wikis.
-- This code is maintained at https://www.mediawiki.org/wiki/Module:TNT
-- Please do not modify it anywhere else, as it may get copied and override your changes.
-- Suggestions can be made at https://www.mediawiki.org/wiki/Module_talk:TNT
--
-- DESCRIPTION:
-- The "msg" function uses a Commons dataset to translate a message
-- with a given key (e.g. source-table), plus optional arguments
-- to the wiki markup in the current content language.
-- Use lang=xx to set language. Example:
--
-- {{#invoke:TNT | msg
-- | I18n/Template:Graphs.tab <!-- https://commons.wikimedia.org/wiki/Data:I18n/Template:Graphs.tab -->
-- | source-table <!-- uses a translation message with id = "source-table" -->
-- | param1 }} <!-- optional parameter -->
--
--
-- The "doc" function will generate the <templatedata> parameter documentation for templates.
-- This way all template parameters can be stored and localized in a single Commons dataset.
-- NOTE: "doc" assumes that all documentation is located in Data:Templatedata/* on Commons.
--
-- {{#invoke:TNT | doc | Graph:Lines }}
-- uses https://commons.wikimedia.org/wiki/Data:Templatedata/Graph:Lines.tab
-- if the current page is Template:Graph:Lines/doc
--
local p = {}
local i18nDataset = 'I18n/Module:TNT.tab'
-- Forward declaration of the local functions
local sanitizeDataset, loadData, link, formatMessage
function p.msg(frame)
local dataset, id
local params = {}
local lang = nil
for k, v in pairs(frame.args) do
if k == 1 then
dataset = mw.text.trim(v)
elseif k == 2 then
id = mw.text.trim(v)
elseif type(k) == 'number' then
table.insert(params, mw.text.trim(v))
elseif k == 'lang' and v ~= '_' then
lang = mw.text.trim(v)
end
end
return formatMessage(dataset, id, params, lang)
end
-- Identical to p.msg() above, but used from other lua modules
-- Parameters: name of dataset, message key, optional arguments
-- Example with 2 params: format('I18n/Module:TNT', 'error_bad_msgkey', 'my-key', 'my-dataset')
function p.format(dataset, key, ...)
local checkType = require('libraryUtil').checkType
checkType('format', 1, dataset, 'string')
checkType('format', 2, key, 'string')
return formatMessage(dataset, key, {...})
end
-- Identical to p.msg() above, but used from other lua modules with the language param
-- Parameters: language code, name of dataset, message key, optional arguments
-- Example with 2 params: formatInLanguage('es', I18n/Module:TNT', 'error_bad_msgkey', 'my-key', 'my-dataset')
function p.formatInLanguage(lang, dataset, key, ...)
local checkType = require('libraryUtil').checkType
checkType('formatInLanguage', 1, lang, 'string')
checkType('formatInLanguage', 2, dataset, 'string')
checkType('formatInLanguage', 3, key, 'string')
return formatMessage(dataset, key, {...}, lang)
end
-- Obsolete function that adds a 'c:' prefix to the first param.
-- "Sandbox/Sample.tab" -> 'c:Data:Sandbox/Sample.tab'
function p.link(frame)
return link(frame.args[1])
end
function p.doc(frame)
local dataset = 'Templatedata/' .. sanitizeDataset(frame.args[1])
return frame:extensionTag('templatedata', p.getTemplateData(dataset)) ..
formatMessage(i18nDataset, 'edit_doc', {link(dataset)})
end
function p.getTemplateData(dataset)
-- TODO: add '_' parameter once lua starts reindexing properly for "all" languages
local data = loadData(dataset)
local names = {}
for _, field in pairs(data.schema.fields) do
table.insert(names, field.name)
end
local params = {}
local paramOrder = {}
for _, row in pairs(data.data) do
local newVal = {}
local name = nil
for pos, val in pairs(row) do
local columnName = names[pos]
if columnName == 'name' then
name = val
else
newVal[columnName] = val
end
end
if name then
params[name] = newVal
table.insert(paramOrder, name)
end
end
-- Work around json encoding treating {"1":{...}} as an [{...}]
params['zzz123']=''
local json = mw.text.jsonEncode({
params=params,
paramOrder=paramOrder,
description=data.description
})
json = string.gsub(json,'"zzz123":"",?', "")
return json
end
-- Local functions
sanitizeDataset = function(dataset)
if not dataset then
return nil
end
dataset = mw.text.trim(dataset)
if dataset == '' then
return nil
elseif string.sub(dataset,-4) ~= '.tab' then
return dataset .. '.tab'
else
return dataset
end
end
loadData = function(dataset, lang)
dataset = sanitizeDataset(dataset)
if not dataset then
error(formatMessage(i18nDataset, 'error_no_dataset', {}))
end
-- Give helpful error to thirdparties who try and copy this module.
if not mw.ext or not mw.ext.data or not mw.ext.data.get then
error('Missing JsonConfig extension; Cannot load https://commons.wikimedia.org/wiki/Data:' .. dataset)
end
local data = mw.ext.data.get(dataset, lang)
if data == false then
if dataset == i18nDataset then
-- Prevent cyclical calls
error('Missing Commons dataset ' .. i18nDataset)
else
error(formatMessage(i18nDataset, 'error_bad_dataset', {link(dataset)}))
end
end
return data
end
-- Given a dataset name, convert it to a title with the 'commons:data:' prefix
link = function(dataset)
return 'c:Data:' .. mw.text.trim(dataset or '')
end
formatMessage = function(dataset, key, params, lang)
for _, row in pairs(loadData(dataset, lang).data) do
local id, msg = unpack(row)
if id == key then
local result = mw.message.newRawMessage(msg, unpack(params or {}))
return result:plain()
end
end
if dataset == i18nDataset then
-- Prevent cyclical calls
error('Invalid message key "' .. key .. '"')
else
error(formatMessage(i18nDataset, 'error_bad_msgkey', {key, link(dataset)}))
end
end
return p
9d0d10e54abd232c806dcabccaf03e52858634a1
Template:Clc
10
86
175
174
2023-09-14T01:12:07Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
#REDIRECT [[Template:Category link with count]]
02280e2ab57b544236e11f913e3759c5781ca9d5
Template:Module other
10
87
177
176
2023-09-14T01:12:07Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{#switch:
<!--If no or empty "demospace" parameter then detect namespace-->
{{#if:{{{demospace|}}}
| {{lc: {{{demospace}}} }} <!--Use lower case "demospace"-->
| {{#ifeq:{{NAMESPACE}}|{{ns:Module}}
| module
| other
}}
}}
| module = {{{1|}}}
| other
| #default = {{{2|}}}
}}<!--End switch--><noinclude>
{{documentation}}
<!-- Add categories to the /doc subpage, not here! -->
</noinclude>
503694836c1b07142e63fd35d8be69ec8bb9ffe7
Template:Module rating
10
88
179
178
2023-09-14T01:12:08Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
<includeonly>{{#ifeq:{{SUBPAGENAME}}|doc|<!--do not show protection level of the module on the doc page, use the second and optionally third parameter if the doc page is also protected -->{{#if:{{{2|}}}|{{Pp|{{{2}}}|action={{{3|}}}}}}}|{{Module other|{{ombox
| type = notice
| image = {{#switch: {{{1|}}}
| pre-alpha | prealpha | pa = [[File:Ambox warning blue construction.svg|40x40px|link=|alt=Pre-alpha]]
| alpha | a = [[File:Alpha lowercase.svg|26x26px|link=|alt=Alpha]]
| beta | b = [[File:Greek lc beta.svg|40x40px|link=|alt=Beta]]
| release | r | general | g = [[File:Green check.svg|40x40px|link=|alt=Ready for use]]
| protected | protect | p = [[File:{{#switch:{{#invoke:Effective protection level|edit|{{#switch:{{SUBPAGENAME}}|doc|sandbox={{FULLBASEPAGENAME}}|{{FULLPAGENAME}}}}}}|autoconfirmed=Semi|extendedconfirmed=Extended|accountcreator|templateeditor=Template|#default=Full}}-protection-shackle.svg|40x40px|link=|alt=Protected]]
| semiprotected | semiprotect | semi =[[File:Semi-protection-shackle.svg|40x40px|link=|alt=Semi-protected]]
}}
| style =
| textstyle =
| text = {{#switch: {{{1|}}}
| pre-alpha | prealpha | pa = This module is rated as [[:Category:Modules in pre-alpha development|pre-alpha]]. It is unfinished, and may or may not be in active development. It should not be used from article namespace pages. Modules remain pre-alpha until the original editor (or someone who takes one over if it is abandoned for some time) is satisfied with the basic structure.<!--
-->{{#switch: {{SUBPAGENAME}}|doc|sandbox=<!-- No category for /doc or /sandbox subpages -->
| {{#ifeq: {{{nocat|}}} | true | <!-- No category if user sets nocat=true --> | [[Category:Modules in pre-alpha development|{{PAGENAME}}]] }}
}}
| alpha | a = This module is rated as [[:Category:Modules in alpha|alpha]]. It is ready for third-party input, and may be used on a few pages to see if problems arise, but should be watched. Suggestions for new features or changes in their input and output mechanisms are welcome.<!--
-->{{#switch: {{SUBPAGENAME}}|doc|sandbox=<!-- No category for /doc or /sandbox subpages -->
| {{#ifeq: {{{nocat|}}} | true | <!-- No category if user sets nocat=true --> | [[Category:Modules in alpha|{{PAGENAME}}]] }}
}}
| beta | b = This module is rated as [[:Category:Modules in beta|beta]], and is ready for widespread use. It is still new and should be used with some caution to ensure the results are as expected.<!--
-->{{#switch: {{SUBPAGENAME}}|doc|sandbox=<!-- No category for /doc or /sandbox subpages -->
| {{#ifeq: {{{nocat|}}} | true | <!-- No category if user sets nocat=true --> | [[Category:Modules in beta|{{PAGENAME}}]] }}
}}
| release | r | general | g = This module is rated as [[:Category:Modules for general use|ready for general use]]. It has reached a mature form and is thought to be relatively bug-free and ready for use wherever appropriate. It is ready to mention on help pages and other Wikipedia resources as an option for new users to learn. To reduce server load and bad output, it should be improved by [[Wikipedia:Template sandbox and test cases|sandbox testing]] rather than repeated trial-and-error editing.<!--
-->{{#switch: {{SUBPAGENAME}}|doc|sandbox=<!-- No category for /doc or /sandbox subpages -->
| {{#ifeq: {{{nocat|}}} | true | <!-- No category if user sets nocat=true --> | [[Category:Modules for general use|{{PAGENAME}}]] }}
}}
| protected | protect | p = This module is [[:Category:Modules subject to page protection|subject to page protection]]. It is a [[Wikipedia:High-risk templates|highly visible module]] in use by a very large number of pages, or is [[Wikipedia:Substitution|substituted]] very frequently. Because vandalism or mistakes would affect many pages, and even trivial editing might cause substantial load on the servers, it is [[Wikipedia:Protection policy|protected]] from editing.<!--
-->{{#switch: {{SUBPAGENAME}}|doc|sandbox=<!-- No category for /doc or /sandbox subpages -->
| {{#ifeq: {{{nocat|}}} | true | <!-- No category if user sets nocat=true --> | [[Category:Modules subject to page protection|{{PAGENAME}}]] }}
}}
| semiprotected | semiprotect | semi = This module is [[:Category:Modules subject to page protection|subject to page protection]]. It is a [[Wikipedia:High-risk templates|highly visible module]] in use by a very large number of pages, or is [[Wikipedia:Substitution|substituted]] very frequently. Because vandalism or mistakes would affect many pages, and even trivial editing might cause substantial load on the servers, it is [[WP:SEMI|semi-protected]] from editing.<!--
-->{{#switch: {{SUBPAGENAME}}|doc|sandbox=<!-- No category for /doc or /sandbox subpages -->
| {{#ifeq: {{{nocat|}}} | true | <!-- No category if user sets nocat=true --> | [[Category:Modules subject to page protection|{{PAGENAME}}]] }}
}}
| #default = {{error|Module rating is invalid or not specified.}}
}}
}}|{{error|Error: {{tl|Module rating}} must be placed in the Module namespace.}} [[Category:Pages with templates in the wrong namespace]]|demospace={{{demospace|<noinclude>module</noinclude>}}}}}}}</includeonly><noinclude>
{{module rating|release|nocat=true|demospace=module}}
{{documentation}}
<!-- Categories go on the /doc subpage, and interwikis go in Wikidata. -->
</noinclude>
bbd244b3ea2e13ec4c1c810ae44f2f3789a93efc
Template:Uses TemplateStyles
10
89
181
180
2023-09-14T01:12:09Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
<includeonly>{{#invoke:Uses TemplateStyles|main}}</includeonly><noinclude>{{documentation}}
<!-- Categories go on the /doc subpage and interwikis go on Wikidata. -->
</noinclude>
60f2fc73c4d69b292455879f9fcb3c68f6c63c2a
Module:Uses TemplateStyles
828
90
183
182
2023-09-14T01:12:09Z
Ilovethehitgameomori
2
1 revision imported
Scribunto
text/plain
local yesno = require('Module:Yesno')
local mList = require('Module:List')
local mTableTools = require('Module:TableTools')
local mMessageBox = require('Module:Message box')
local TNT = require('Module:TNT')
local p = {}
local function format(msg, ...)
return TNT.format('I18n/Uses TemplateStyles', msg, ...)
end
local function getConfig()
return mw.loadData('Module:Uses TemplateStyles/config')
end
local function renderBox(tStyles)
local boxArgs = {
type = 'notice',
small = true,
image = string.format('[[File:Farm-Fresh css add.svg|32px|alt=%s]]', format('logo-alt'))
}
if #tStyles < 1 then
boxArgs.text = string.format('<strong class="error">%s</strong>', format('error-emptylist'))
else
local cfg = getConfig()
local tStylesLinks = {}
for i, ts in ipairs(tStyles) do
local link = string.format('[[:%s]]', ts)
local sandboxLink = nil
local tsTitle = mw.title.new(ts)
if tsTitle and cfg['sandbox_title'] then
local tsSandboxTitle = mw.title.new(string.format(
'%s:%s/%s/%s', tsTitle.nsText, tsTitle.baseText, cfg['sandbox_title'], tsTitle.subpageText))
if tsSandboxTitle and tsSandboxTitle.exists then
sandboxLink = format('sandboxlink', link, ':' .. tsSandboxTitle.prefixedText)
end
end
tStylesLinks[i] = sandboxLink or link
end
local tStylesList = mList.makeList('bulleted', tStylesLinks)
boxArgs.text = format(
mw.title.getCurrentTitle():inNamespaces(828,829) and 'header-module' or 'header-template') ..
'\n' .. tStylesList
end
return mMessageBox.main('mbox', boxArgs)
end
local function renderTrackingCategories(args, tStyles, titleObj)
if yesno(args.nocat) then
return ''
end
local cfg = getConfig()
local cats = {}
-- Error category
if #tStyles < 1 and cfg['error_category'] then
cats[#cats + 1] = cfg['error_category']
end
-- TemplateStyles category
titleObj = titleObj or mw.title.getCurrentTitle()
if (titleObj.namespace == 10 or titleObj.namespace == 828)
and not cfg['subpage_blacklist'][titleObj.subpageText]
then
local category = args.category or cfg['default_category']
if category then
cats[#cats + 1] = category
end
if not yesno(args.noprotcat) and (cfg['protection_conflict_category'] or cfg['padlock_pattern']) then
local currentProt = titleObj.protectionLevels["edit"] and titleObj.protectionLevels["edit"][1] or nil
local addedLevelCat = false
local addedPadlockCat = false
for i, ts in ipairs(tStyles) do
local tsTitleObj = mw.title.new(ts)
local tsProt = tsTitleObj.protectionLevels["edit"] and tsTitleObj.protectionLevels["edit"][1] or nil
if cfg['padlock_pattern'] and tsProt and not addedPadlockCat then
local content = tsTitleObj:getContent()
if not content:find(cfg['padlock_pattern']) then
cats[#cats + 1] = cfg['missing_padlock_category']
addedPadlockCat = true
end
end
if cfg['protection_conflict_category'] and currentProt and tsProt ~= currentProt and not addedLevelCat then
currentProt = cfg['protection_hierarchy'][currentProt] or 0
tsProt = cfg['protection_hierarchy'][tsProt] or 0
if tsProt < currentProt then
addedLevelCat = true
cats[#cats + 1] = cfg['protection_conflict_category']
end
end
end
end
end
for i, cat in ipairs(cats) do
cats[i] = string.format('[[Category:%s]]', cat)
end
return table.concat(cats)
end
function p._main(args, cfg)
local tStyles = mTableTools.compressSparseArray(args)
local box = renderBox(tStyles)
local trackingCategories = renderTrackingCategories(args, tStyles)
return box .. trackingCategories
end
function p.main(frame)
local origArgs = frame:getParent().args
local args = {}
for k, v in pairs(origArgs) do
v = v:match('^%s*(.-)%s*$')
if v ~= '' then
args[k] = v
end
end
return p._main(args)
end
return p
71ca57c37849f38e3c5ee30061bdae730963e48e
Module:Uses TemplateStyles/config
828
91
185
184
2023-09-14T01:12:09Z
Ilovethehitgameomori
2
1 revision imported
Scribunto
text/plain
local cfg = {} -- Don’t touch this line.
-- Subpage blacklist: these subpages will not be categorized (except for the
-- error category, which is always added if there is an error).
-- For example “Template:Foo/doc” matches the `doc = true` rule, so it will have
-- no categories. “Template:Foo” and “Template:Foo/documentation” match no rules,
-- so they *will* have categories. All rules should be in the
-- ['<subpage name>'] = true,
-- format.
cfg['subpage_blacklist'] = {
['doc'] = true,
['sandbox'] = true,
['sandbox2'] = true,
['testcases'] = true,
}
-- Sandbox title: if the stylesheet’s title is <template>/<stylesheet>.css, the
-- stylesheet’s sandbox is expected to be at <template>/<sandbox_title>/<stylesheet>.css
-- Set to nil to disable sandbox links.
cfg['sandbox_title'] = 'sandbox'
-- Error category: this category is added if the module call contains errors
-- (e.g. no stylesheet listed). A category name without namespace, or nil
-- to disable categorization (not recommended).
cfg['error_category'] = 'Uses TemplateStyles templates with errors'
-- Default category: this category is added if no custom category is specified
-- in module/template call. A category name without namespace, or nil
-- to disable categorization.
cfg['default_category'] = 'Templates using TemplateStyles'
-- Protection conflict category: this category is added if the protection level
-- of any stylesheet is lower than the protection level of the template. A category name
-- without namespace, or nil to disable categorization (not recommended).
cfg['protection_conflict_category'] = 'Templates using TemplateStyles with a different protection level'
-- Hierarchy of protection levels, used to determine whether one protection level is lower
-- than another and thus should populate protection_conflict_category. No protection is treated as zero
cfg['protection_hierarchy'] = {
autoconfirmed = 1,
extendedconfirmed = 2,
templateeditor = 3,
sysop = 4
}
-- Padlock pattern: Lua pattern to search on protected stylesheets for, or nil
-- to disable padlock check.
cfg['padlock_pattern'] = '{{pp-'
-- Missing padlock category: this category is added if a protected stylesheet
-- doesn’t contain any padlock template (specified by the above Lua pattern).
-- A category name without namespace (no nil allowed) if the pattern is not nil,
-- unused (and thus may be nil) otherwise.
cfg['missing_padlock_category'] = 'Templates using TemplateStyles without padlocks'
return cfg -- Don’t touch this line.
58e7a37c44f6ea3f6b8af54a559d696cc7256493
Module:Infobox/doc
828
92
187
186
2023-09-14T01:12:10Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{High-use|3308957|all-pages = yes}}
{{module rating|protected}}
{{Lua|Module:Navbar|Module:Italic title}}
{{Uses TemplateStyles|Module:Infobox/styles.css|Template:Hlist/styles.css|Template:Plainlist/styles.css}}
'''Module:Infobox''' is a [[WP:Module|module]] that implements the {{tl|Infobox}} template. Please see the template page for usage instructions.
== Tracking categories ==
* {{clc|Pages using infobox templates with ignored data cells}}
* {{clc|Articles using infobox templates with no data rows}}
* {{clc|Pages using embedded infobox templates with the title parameter}}
<includeonly>{{#ifeq:{{SUBPAGENAME}}|sandbox||
[[Category:Modules that add a tracking category]]
[[Category:Wikipedia infoboxes]]
[[Category:Infobox modules]]
[[Category:Modules that check for strip markers]]
}}</includeonly>
936ad219eb263a6f3293d62f667bd7b5db1059c1
Template:Nowrap
10
180
366
365
2023-09-14T01:14:49Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
<span class="nowrap">{{{1}}}</span><noinclude>
{{documentation}}
<!-- Categories go on the /doc page; interwikis go to Wikidata. -->
</noinclude>
5d0dc6b6d89b37f4356242404f46138a4017f015
Module:Lang
828
181
368
367
2023-09-14T01:14:49Z
Ilovethehitgameomori
2
1 revision imported
Scribunto
text/plain
--[=[
Lua support for the {{lang}}, {{lang-xx}}, and {{transliteration}} templates and replacement of various supporting templates.
]=]
require('strict');
local getArgs = require ('Module:Arguments').getArgs;
local unicode = require ("Module:Unicode data"); -- for is_latin() and is_rtl()
local yesno = require ('Module:Yesno');
local lang_data = mw.loadData ('Module:Lang/data'); -- language name override and transliteration tool-tip tables
local lang_name_table = lang_data.lang_name_table; -- language codes, names, regions, scripts, suppressed scripts
local lang_table = lang_data.lang_name_table.lang;
local lang_dep_table = lang_data.lang_name_table.lang_dep;
local script_table = lang_data.lang_name_table.script;
local region_table = lang_data.lang_name_table.region;
local variant_table = lang_data.lang_name_table.variant;
local suppressed_table = lang_data.lang_name_table.suppressed;
local override_table = lang_data.override;
local synonym_table = mw.loadData ('Module:Lang/ISO 639 synonyms'); -- ISO 639-2/639-2T code translation to 639-1 code
local namespace = mw.title.getCurrentTitle().namespace; -- used for categorization
local content_lang = mw.language.getContentLanguage();
local this_wiki_lang_tag = content_lang.code; -- get this wiki's language tag
local this_wiki_lang_dir = content_lang:getDir(); -- get this wiki's language direction
local initial_style_state; -- set by lang_xx_normal() and lang_xx_italic()
local maint_cats = {}; -- maintenance categories go here
local maint_msgs = {}; -- and their messages go here
--[[--------------------------< I S _ S E T >------------------------------------------------------------------
Returns true if argument is set; false otherwise. Argument is 'set' when it exists (not nil) or when it is not an empty string.
]]
local function is_set( var )
return not (var == nil or var == '');
end
--[[--------------------------< I N V E R T _ I T A L I C S >-------------------------------------------------
This function attempts to invert the italic markup a args.text by adding/removing leading/trailing italic markup
in args.text. Like |italic=unset, |italic=invert disables automatic italic markup. Individual leading/trailing
apostrophes are converted to their html numeric entity equivalent so that the new italic markup doesn't become
bold markup inadvertently.
Leading and trailing wiki markup is extracted from args.text into separate table elements. Addition, removal,
replacement of wiki markup is handled by a string.gsub() replacement table operating only on these separate elements.
In the string.gsub() matching pattern, '.*' matches empty string as well as the three expected wiki markup patterns.
This function expects that markup in args.text is complete and correct; if it is not, oddness may result.
]]
local function invert_italics (source)
local invert_pattern_table = { -- leading/trailing markup add/remove/replace patterns
[""]="\'\'", -- empty string becomes italic markup
["\'\'"]="", -- italic markup becomes empty string
["\'\'\'"]="\'\'\'\'\'", -- bold becomes bold italic
["\'\'\'\'\'"]="\'\'\'", -- bold italic become bold
};
local seg = {};
source = source:gsub ("%f[\']\'%f[^\']", '''); -- protect single quote marks from being interpreted as bold markup
seg[1] = source:match ('^(\'\'+%f[^\']).+') or ''; -- get leading markup, if any; ignore single quote
seg[3] = source:match ('.+(%f[\']\'\'+)$') or ''; -- get trailing markup, if any; ignore single quote
if '' ~= seg[1] and '' ~= seg[3] then -- extract the 'text'
seg[2] = source:match ('^\'\'+%f[^\'](.+)%f[\']\'\'+$') -- from between leading and trailing markup
elseif '' ~= seg[1] then
seg[2] = source:match ('^\'\'+%f[^\'](.+)') -- following leading markup
elseif '' ~= seg[3] then
seg[2] = source:match ('(.+)%f[\']\'\'+$') -- preceding trailing markup
else
seg[2] = source -- when there is no markup
end
seg[1] = invert_pattern_table[seg[1]] or seg[1]; -- replace leading markup according to pattern table
seg[3] = invert_pattern_table[seg[3]] or seg[3]; -- replace leading markup according to pattern table
return table.concat (seg); -- put it all back together and done
end
--[[--------------------------< V A L I D A T E _ I T A L I C >------------------------------------------------
validates |italic= or |italics= assigned values.
When |italic= is set and has an acceptible assigned value, return the matching css font-style property value or,
for the special case 'default', return nil.
When |italic= is not set, or has an unacceptible assigned value, return nil and a nil error message.
When both |italic= and |italics= are set, returns nil and a 'conflicting' error message.
The return value nil causes the calling lang, lang_xx, or transl function to set args.italic according to the template's
defined default ('inherit' for {{lang}}, 'inherit' or 'italic' for {{lang-xx}} depending on
the individual template's requirements, 'italic' for {{transliteration}}) or to the value appropriate to |script=, if set ({{lang}}
and {{lang-xx}} only).
Accepted values and the values that this function returns are are:
nil - when |italic= absent or not set; returns nil
default - for completeness, should rarely if ever be used; returns nil
yes - force args.text to be rendered in italic font; returns 'italic'
no - force args.text to be rendered in normal font; returns 'normal'
unset - disables font control so that font-style applied to text is dictated by markup inside or outside the template; returns 'inherit'
invert - disables font control so that font-style applied to text is dictated by markup outside or inverted inside the template; returns 'invert'
]]
local function validate_italic (args)
local properties = {['yes'] = 'italic', ['no'] = 'normal', ['unset'] = 'inherit', ['invert'] = 'invert', ['default'] = nil};
local count = 0
for _, arg in pairs {'italic', 'italics', 'i'} do
if args[arg] then
count = count + 1
end
end
if count > 1 then -- return nil and an error message if more than one is set
return nil, 'only one of |italic=, |italics=, or |i= can be specified';
end
return properties[args.italic or args.italics or args.i], nil; -- return an appropriate value and a nil error message
end
--[=[--------------------------< V A L I D A T E _ C A T _ A R G S >----------------------------------------------------------
Default behavior of the {{lang}} and {{lang-xx}} templates is to add categorization when the templates are used in mainspace.
This default functionality may be suppressed by setting |nocat=yes or |cat=no. This function selects one of these two parameters
to control categorization.
Because having two parameters with 'opposite' names and 'opposite' values is confusing, this function accepts only affirmative
values for |nocat= and only negative values for |cat=; in both cases the 'other' sense (and non-sense) is not accepted and the
parameter is treated as if it were not set in the template.
Sets args.nocat to true if categorization is to be turned off; to nil if the default behavior should apply.
Accepted values for |nocat= are the text strings:
'yes', 'y', 'true', 't', on, '1' -- [[Module:Yesno]] returns logical true for all of these; false or nil else
for |cat=
'no', 'n', 'false', 'f', 'off', '0' -- [[Module:Yesno]] returns logical false for all of these; true or nil else
]=]
local function validate_cat_args (args)
if not (args.nocat or args.cat) then -- both are nil, so categorize
return;
end
if false == yesno (args.cat) or true == yesno (args.nocat) then
args.nocat = true; -- set to true when args.nocat is affirmative; nil else (as if the parameter were not set in the template)
else -- args.nocat is the parameter actually used.
args.nocat = nil;
end
end
--[[--------------------------< I N _ A R R A Y >--------------------------------------------------------------
Whether needle is in haystack
]]
local function in_array ( needle, haystack )
if needle == nil then
return false;
end
for n,v in ipairs( haystack ) do
if v == needle then
return n;
end
end
return false;
end
--[[--------------------------< F O R M A T _ I E T F _ T A G >------------------------------------------------
prettify ietf tags to use recommended subtag formats:
code: lower case
script: sentence case
region: upper case
variant: lower case
private: lower case prefixed with -x-
]]
local function format_ietf_tag (code, script, region, variant, private)
local out = {};
if is_set (private) then
return table.concat ({code:lower(), 'x', private:lower()}, '-'); -- if private, all other tags ignored
end
table.insert (out, code:lower());
if is_set (script) then
script = script:lower():gsub ('^%a', string.upper);
table.insert (out, script);
end
if is_set (region) then
table.insert (out, region:upper());
end
if is_set (variant) then
table.insert (out, variant:lower());
end
return table.concat (out, '-');
end
--[[--------------------------< G E T _ I E T F _ P A R T S >--------------------------------------------------
extracts and returns IETF language tag parts:
primary language subtag (required) - 2 or 3 character IANA language code
script subtag - four character IANA script code
region subtag - two-letter or three digit IANA region code
variant subtag - four digit or 5-8 alnum variant code; only one variant subtag supported
private subtag - x- followed by 1-8 alnum private code; only supported with the primary language tag
in any one of these forms
lang lang-variant
lang-script lang-script-variant
lang-region lang-region-variant
lang-script-region lang-script-region-variant
lang-x-private
each of lang, script, region, variant, and private, when used, must be valid
Languages with both two- and three-character code synonyms are promoted to the two-character synonym because
the IANA registry file omits the synonymous three-character code; we cannot depend on browsers understanding
the synonymous three-character codes in the lang= attribute.
For {{lang-xx}} templates, the parameters |script=, |region=, and |variant= are supported (not supported in {{lang}}
because those parameters are superfluous to the IETF subtags in |code=)
returns six values; all lower case. Valid parts are returned as themselves; omitted parts are returned as empty strings, invalid
parts are returned as nil; the sixth returned item is an error message (if an error detected) or nil.
see http://www.rfc-editor.org/rfc/bcp/bcp47.txt section 2.1
]]
local function get_ietf_parts (source, args_script, args_region, args_variant)
local code, script, region, variant, private; -- ietf tag parts
if not is_set (source) then
return nil, nil, nil, nil, nil, 'missing language tag';
end
local pattern = { -- table of tables holding acceptibe ietf tag patterns and short names of the ietf part captured by the pattern
{'^(%a%a%a?)%-(%a%a%a%a)%-(%a%a)%-(%d%d%d%d)$', 's', 'r', 'v'}, -- 1 - ll-Ssss-RR-variant (where variant is 4 digits)
{'^(%a%a%a?)%-(%a%a%a%a)%-(%d%d%d)%-(%d%d%d%d)$', 's', 'r', 'v'}, -- 2 - ll-Ssss-DDD-variant (where region is 3 digits; variant is 4 digits)
{'^(%a%a%a?)%-(%a%a%a%a)%-(%a%a)%-(%w%w%w%w%w%w?%w?%w?)$', 's', 'r', 'v'}, -- 3 - ll-Ssss-RR-variant (where variant is 5-8 alnum characters)
{'^(%a%a%a?)%-(%a%a%a%a)%-(%d%d%d)%-(%w%w%w%w%w%w?%w?%w?)$', 's', 'r', 'v'}, -- 4 - ll-Ssss-DDD-variant (where region is 3 digits; variant is 5-8 alnum characters)
{'^(%a%a%a?)%-(%a%a%a%a)%-(%d%d%d%d)$', 's', 'v'}, -- 5 - ll-Ssss-variant (where variant is 4 digits)
{'^(%a%a%a?)%-(%a%a%a%a)%-(%w%w%w%w%w%w?%w?%w?)$', 's', 'v'}, -- 6 - ll-Ssss-variant (where variant is 5-8 alnum characters)
{'^(%a%a%a?)%-(%a%a)%-(%d%d%d%d)$', 'r', 'v'}, -- 7 - ll-RR-variant (where variant is 4 digits)
{'^(%a%a%a?)%-(%d%d%d)%-(%d%d%d%d)$', 'r', 'v'}, -- 8 - ll-DDD-variant (where region is 3 digits; variant is 4 digits)
{'^(%a%a%a?)%-(%a%a)%-(%w%w%w%w%w%w?%w?%w?)$', 'r', 'v'}, -- 9 - ll-RR-variant (where variant is 5-8 alnum characters)
{'^(%a%a%a?)%-(%d%d%d)%-(%w%w%w%w%w%w?%w?%w?)$', 'r', 'v'}, -- 10 - ll-DDD-variant (where region is 3 digits; variant is 5-8 alnum characters)
{'^(%a%a%a?)%-(%d%d%d%d)$', 'v'}, -- 11 - ll-variant (where variant is 4 digits)
{'^(%a%a%a?)%-(%w%w%w%w%w%w?%w?%w?)$', 'v'}, -- 12 - ll-variant (where variant is 5-8 alnum characters)
{'^(%a%a%a?)%-(%a%a%a%a)%-(%a%a)$', 's', 'r'}, -- 13 - ll-Ssss-RR
{'^(%a%a%a?)%-(%a%a%a%a)%-(%d%d%d)$', 's', 'r'}, -- 14 - ll-Ssss-DDD (region is 3 digits)
{'^(%a%a%a?)%-(%a%a%a%a)$', 's'}, -- 15 - ll-Ssss
{'^(%a%a%a?)%-(%a%a)$', 'r'}, -- 16 - ll-RR
{'^(%a%a%a?)%-(%d%d%d)$', 'r'}, -- 17 - ll-DDD (region is 3 digits)
{'^(%a%a%a?)$'}, -- 18 - ll
{'^(%a%a%a?)%-x%-(%w%w?%w?%w?%w?%w?%w?%w?)$', 'p'}, -- 19 - ll-x-pppppppp (private is 1-8 alnum characters)
}
local t = {}; -- table of captures; serves as a translator between captured ietf tag parts and named variables
for i, v in ipairs (pattern) do -- spin through the pattern table looking for a match
local c1, c2, c3, c4; -- captures in the 'pattern' from the pattern table go here
c1, c2, c3, c4 = source:match (pattern[i][1]); -- one or more captures set if source matches pattern[i])
if c1 then -- c1 always set on match
code = c1; -- first capture is always code
t = {
[pattern[i][2] or 'x'] = c2, -- fill the table of captures with the rest of the captures
[pattern[i][3] or 'x'] = c3, -- take index names from pattern table and assign sequential captures
[pattern[i][4] or 'x'] = c4, -- index name may be nil in pattern[i] table so "or 'x'" spoofs a name for this index in this table
};
script = t.s or ''; -- translate table contents to named variables;
region = t.r or ''; -- absent table entries are nil so set named ietf parts to empty string for concatenation
variant= t.v or '';
private = t.p or '';
break; -- and done
end
end
if not code then
return nil, nil, nil, nil, nil, table.concat ({'unrecognized language tag: ', source}); -- don't know what we got but it is malformed
end
code = code:lower(); -- ensure that we use and return lower case version of this
if not (override_table[code] or lang_table[code] or synonym_table[code] or lang_dep_table[code]) then
return nil, nil, nil, nil, nil, table.concat ({'unrecognized language code: ', code}); -- invalid language code, don't know about the others (don't care?)
end
if synonym_table[code] then -- if 639-2/639-2T code has a 639-1 synonym
table.insert (maint_cats, table.concat ({'Lang and lang-xx code promoted to ISO 639-1|', code}));
table.insert (maint_msgs, table.concat ({'code: ', code, ' promoted to code: ', synonym_table[code]}));
code = synonym_table[code]; -- use the synonym
end
if is_set (script) then
if is_set (args_script) then
return code, nil, nil, nil, nil, 'redundant script tag'; -- both code with script and |script= not allowed
end
else
script = args_script or ''; -- use args.script if provided
end
if is_set (script) then
script = script:lower(); -- ensure that we use and return lower case version of this
if not script_table[script] then
return code, nil, nil, nil, nil, table.concat ({'unrecognized script: ', script, ' for code: ', code}); -- language code ok, invalid script, don't know about the others (don't care?)
end
end
if suppressed_table[script] then -- ensure that code-script does not use a suppressed script
if in_array (code, suppressed_table[script]) then
return code, nil, nil, nil, nil, table.concat ({'script: ', script, ' not supported for code: ', code}); -- language code ok, script is suppressed for this code
end
end
if is_set (region) then
if is_set (args_region) then
return code, nil, nil, nil, nil, 'redundant region tag'; -- both code with region and |region= not allowed
end
else
region = args_region or ''; -- use args.region if provided
end
if is_set (region) then
region = region:lower(); -- ensure that we use and return lower case version of this
if not region_table[region] then
return code, script, nil, nil, nil, table.concat ({'unrecognized region: ', region, ' for code: ', code});
end
end
if is_set (variant) then
if is_set (args_variant) then
return code, nil, nil, nil, nil, 'redundant variant tag'; -- both code with variant and |variant= not allowed
end
else
variant = args_variant or ''; -- use args.variant if provided
end
if is_set (variant) then
variant = variant:lower(); -- ensure that we use and return lower case version of this
if not variant_table[variant] then -- make sure variant is valid
return code, script, region, nil, nil, table.concat ({'unrecognized variant: ', variant});
end -- does this duplicate/replace tests in lang() and lang_xx()?
if is_set (script) then -- if script set it must be part of the 'prefix'
if not in_array (table.concat ({code, '-', script}), variant_table[variant]['prefixes']) then
return code, script, region, nil, nil, table.concat ({'unrecognized variant: ', variant, ' for code-script pair: ', code, '-', script});
end
elseif is_set (region) then -- if region set, there are some prefixes that require lang code and region (en-CA-newfound)
if not in_array (code, variant_table[variant]['prefixes']) then -- first see if lang code is all that's required (en-oxendict though en-GB-oxendict is preferred)
if not in_array (table.concat ({code, '-', region}), variant_table[variant]['prefixes']) then -- now try for lang code and region (en-CA-newfound)
return code, script, region, nil, nil, table.concat ({'unrecognized variant: ', variant, ' for code-region pair: ', code, '-', region});
end
end
else -- cheap way to determine if there are prefixes; fonipa and others don't have prefixes; # operator always returns 0
if variant_table[variant]['prefixes'][1] and not in_array (code, variant_table[variant]['prefixes']) then
return code, script, region, nil, nil, table.concat ({'unrecognized variant: ', variant, ' for code: ', code});
end
end
end
if is_set (private) then
private = private:lower(); -- ensure that we use and return lower case version of this
if not override_table[table.concat ({code, '-x-', private})] then -- make sure private tag is valid; note that index
return code, script, region, nil, nil, table.concat ({'unrecognized private tag: ', private});
end
end
return code, script, region, variant, private, nil; -- return the good bits; make sure that msg is nil
end
--[[--------------------------< M A K E _ E R R O R _ M S G >--------------------------------------------------
assembles an error message from template name, message text, help link, and error category.
]]
local function make_error_msg (msg, args, template)
local out = {};
local category;
if 'Transliteration' == template then
category = 'Transliteration';
else
category = 'Lang and lang-xx'
end
table.insert (out, table.concat ({'[', args.text or 'undefined', '] '})); -- for error messages output args.text if available
table.insert (out, table.concat ({'<span style=\"color:#d33\">Error: {{', template, '}}: '}));
table.insert (out, msg);
table.insert (out, table.concat ({' ([[:Category:', category, ' template errors|help]])'}));
table.insert (out, '</span>');
if (0 == namespace or 10 == namespace) and not args.nocat then -- categorize in article space (and template space to take care of broken usages)
table.insert (out, table.concat ({'[[Category:', category, ' template errors]]'}));
end
return table.concat (out);
end
--[=[-------------------------< M A K E _ W I K I L I N K >----------------------------------------------------
Makes a wikilink; when both link and display text is provided, returns a wikilink in the form [[L|D]]; if only
link is provided, returns a wikilink in the form [[L]]; if neither are provided or link is omitted, returns an
empty string.
]=]
local function make_wikilink (link, display)
if is_set (link) then
if is_set (display) then
return table.concat ({'[[', link, '|', display, ']]'});
else
return table.concat ({'[[', link, ']]'});
end
else
return '';
end
end
--[[--------------------------< D I V _ M A R K U P _ A D D >--------------------------------------------------
adds <i> and </i> tags to list-item text or to implied <p>..</p> text. mixed not supported
]]
local function div_markup_add (text, style)
local implied_p = {};
if text:find ('^\n[%*:;#]') then -- look for list markup; list markup must begin at start of text
if 'italic' == style then
return text:gsub ('(\n[%*:;#]+)([^\n]+)', '%1<i>%2</i>'); -- insert italic markup at each list item
else
return text;
end
end
if text:find ('\n+') then -- look for any number of \n characters in text
text = text:gsub ('([^\n])\n([^\n])', '%1 %2'); -- replace single newline characters with a space character which mimics mediawiki
if 'italic' == style then
text = text:gsub('[^\n]+', '<p><i>%1</i></p>'); -- insert p and italic markup tags at each impled p (two or more consecutive '\n\n' sequences)
else
text = text:gsub ('[^\n]+', '<p>%1</p>'); -- insert p markup at each impled p
text = text:gsub ('\n', ''); -- strip newline characters
end
end
return text;
end
--[[--------------------------< T I T L E _ W R A P P E R _ M A K E >------------------------------------------
makes a <span title="<title text>"><content_text></span> or <div title="<title text>"><content_text></div> where
<title text> is in the tool-tip in the wiki's local language and <content_text> is non-local-language text in
html markup. This because the lang= attibute applies to the content of its enclosing tag.
<tag> holds a string 'div' or 'span' used to choose the correct wrapping tag
]]
local function title_wrapper_make (title_text, content_text, tag)
local wrapper_t = {};
table.insert (wrapper_t, table.concat ({'<', tag})); -- open opening wrapper tag
table.insert (wrapper_t, ' title=\"'); -- begin title attribute
table.insert (wrapper_t, title_text); -- add <title_text>
table.insert (wrapper_t, '\">'); -- end title attribute and close opening wrapper tag
table.insert (wrapper_t, content_text); -- add <content_text>
table.insert (wrapper_t, table.concat ({'</', tag, '>'})); -- add closing wrapper tag
return table.concat (wrapper_t); -- make a big string and done
end
--[[--------------------------< M A K E _ T E X T _ H T M L >--------------------------------------------------
Add the html markup to text according to the type of content that it is: <span> or <i> tags for inline content or
<div> tags for block content
The lang= attribute also applies to the content of the tag where it is placed so this is wrong because 'Spanish
language text' is English:
<i lang="es" title="Spanish language text">casa</i>
should be:
<span title="Spanish language text"><i lang="es">casa</i></span>
or for <div>...</div>:
<div title="Spanish language text"><div lang="es"><spanish-language-text></div></div>
]]
local function make_text_html (code, text, tag, rtl, style, size, language)
local html_t = {};
local style_added = '';
local wrapper_tag = tag; -- <tag> gets modified so save a copy for use when/if we create a wrapper span or div
if text:match ('^%*') then
table.insert (html_t, '*'); -- move proto language text prefix outside of italic markup if any; use numeric entity because plain splat confuses MediaWiki
text = text:gsub ('^%*', ''); -- remove the splat from the text
end
if 'span' == tag then -- default html tag for inline content
if 'italic' == style then -- but if italic
tag = 'i'; -- change to <i> tags
end
else -- must be div so go
text = div_markup_add (text, style); -- handle implied <p>, implied <p> with <i>, and list markup (*;:#) with <i>
end
table.insert (html_t, table.concat ({'<', tag})); -- open the <i>, <span>, or <div> html tag
code = code:gsub ('%-x%-.*', ''); -- strip private use subtag from code tag because meaningless outside of wikipedia
table.insert (html_t, table.concat ({' lang="', code, '\"'})); -- add language attribute
if (rtl or unicode.is_rtl(text)) and ('ltr' == this_wiki_lang_dir) then -- text is right-to-left on a left-to-right wiki
table.insert (html_t, ' dir="rtl"'); -- add direction attribute for right-to-left languages
elseif not (rtl or unicode.is_rtl(text)) and ('rtl' == this_wiki_lang_dir) then -- text is left-to-right on a right-to-left wiki
table.insert (html_t, ' dir="ltr"'); -- add direction attribute for left-to-right languages
end
if 'normal' == style then -- when |italic=no
table.insert (html_t, ' style=\"font-style: normal;'); -- override external markup, if any
style_added = '\"'; -- remember that style attribute added and is not yet closed
end
if is_set (size) then -- when |size=<something>
if is_set (style_added) then
table.insert (html_t, table.concat ({' font-size: ', size, ';'})); -- add when style attribute already inserted
else
table.insert (html_t, table.concat ({' style=\"font-size: ', size, ';'})); -- create style attribute
style_added = '\"'; -- remember that style attribute added and is not yet closed
end
end
table.insert (html_t, table.concat ({style_added, '>'})); -- close the opening html tag
table.insert (html_t, text); -- insert the text
table.insert (html_t, table.concat ({'</', tag, '>'})); -- close the 'text' <i>, <span>, or <div> html tag
if is_set (language) then -- create a <title_text> string for the title= attribute in a wrapper span or div
local title_text;
if 'zxx' == code then -- special case for this tag 'no linguistic content'
title_text = table.concat ({language, ' text'}); -- not a language so don't use 'language' in title text
elseif mw.ustring.find (language, 'languages', 1, true) then
title_text = table.concat ({language, ' collective text'}); -- for collective languages
else
title_text = table.concat ({language, '-language text'}); -- for individual languages
end
return title_wrapper_make (title_text, table.concat (html_t), wrapper_tag);
else
return table.concat (html_t);
end
end
--[=[-------------------------< M A K E _ C A T E G O R Y >----------------------------------------------------
For individual language, <language>, returns:
[[Category:Articles containing <language>-language text]]
for English:
[[Category:Articles containing explicitly cited English-language text]]
for ISO 639-2 collective languages (and for 639-1 bh):
[[Category:Articles with text in <language> languages]]
]=]
local function make_category (code, language_name, nocat, name_get)
local cat = {};
local retval;
if ((0 ~= namespace) or nocat) and not name_get then -- only categorize in article space
return ''; -- return empty string for concatenation
end
if mw.ustring.find (language_name, 'languages', 1, true) then
return table.concat ({'[[Category:Articles with text in ', language_name, ']]'});
end
table.insert (cat, '[[Category:Articles containing ');
if this_wiki_lang_tag == code then
table.insert (cat, 'explicitly cited ' .. language_name); -- unique category name for the local language
else
table.insert (cat, language_name);
end
table.insert (cat, '-language text]]');
return table.concat (cat);
end
--[[--------------------------< M A K E _ T R A N S L I T >----------------------------------------------------
return translit <i lang=xx-Latn>...</i> where xx is the language code; else return empty string
The value |script= is not used in {{transliteration}} for this purpose; instead it uses |code. Because language scripts
are listed in the {{transliteration}} switches they are included in the data tables. The script parameter is introduced
at {{Language with name and transliteration}}. If |script= is set, this function uses it in preference to code.
To avoid confusion, in this module and the templates that use it, the transliteration script parameter is renamed
to be |translit-script= (in this function, tscript)
This function is used by both lang_xx() and transl()
lang_xx() always provides code, language_name, and translit; may provide tscript; never provides style
transl() always provides language_name, translit, and one of code or tscript, never both; always provides style
For {{transliteration}}, style only applies when a language code is provided
]]
local function make_translit (code, language_name, translit, std, tscript, style)
local title;
local out_t = {};
local title_t = lang_data.translit_title_table; -- table of transliteration standards and the language codes and scripts that apply to those standards
local title_text = ''; -- tool tip text for title= attribute
std = std and std:lower(); -- lower case for table indexing
if not is_set (std) and not is_set (tscript) then -- when neither standard nor script specified
title_text = language_name; -- write a generic tool tip
if not mw.ustring.find (language_name, 'languages', 1, true) then -- collective language names (plural 'languages' is part of the name)
title_text = title_text .. '-language'; -- skip this text (individual and macro languages only)
end
title_text = title_text .. ' romanization'; -- finish the tool tip; use romanization when neither script nor standard supplied
elseif is_set (std) and is_set (tscript) then -- when both are specified
if title_t[std] then -- and if standard is legitimate
if title_t[std][tscript] then -- and if script for that standard is legitimate
if script_table[tscript] then
title_text = title_text .. table.concat ({title_t[std][tscript:lower()], ' (', script_table[tscript], ' script) transliteration'}); -- add the appropriate text to the tool tip
else
title_text = title_text .. title_t[std]['default']; -- use the default if script not in std table; TODO: maint cat? error message because script not found for this standard?
end
else
title_text = title_text .. title_t[std]['default']; -- use the default if script not in std table; TODO: maint cat? error message because script not found for this standard?
end
else
return ''; -- invalid standard, setup for error message
end
elseif is_set (std) then -- translit-script not set, use language code
if not title_t[std] then return ''; end -- invalid standard, setup for error message
if title_t[std][code] then -- if language code is in the table (transl may not provide a language code)
title_text = title_text .. table.concat ({title_t[std][code:lower()], ' (', language_name, ' language) transliteration'}); -- add the appropriate text to the tool tip
else -- code doesn't match
title_text = title_text .. title_t[std]['default']; -- so use the standard's default
end
else -- here if translit-script set but translit-std not set
if title_t['no_std'][tscript] then
title_text = title_text .. title_t['no_std'][tscript]; -- use translit-script if set
elseif title_t['no_std'][code] then
title_text = title_text .. title_t['no_std'][code]; -- use language code
else
if is_set (tscript) then
title_text = title_text .. table.concat ({language_name, '-script transliteration'}); -- write a script tool tip
elseif is_set (code) then
if not mw.ustring.find (language_name, 'languages', 1, true) then -- collective language names (plural 'languages' is part of the name)
title_text = title_text .. '-language'; -- skip this text (individual and macro languages only)
end
title_text = title_text .. ' transliteration'; -- finish the tool tip
else
title_text = title_text .. ' transliteration'; -- generic tool tip (can we ever get here?)
end
end
end
local close_tag;
if is_set (code) then -- when a language code is provided (always with {{lang-xx}} templates, not always with {{transliteration}})
code = code:match ('^(%a%a%a?)'); -- strip all subtags leaving only the language subtag
if not style then -- nil for the default italic style
table.insert (out_t, "<i lang=\""); -- so use <i> tag
close_tag = '</i>'; -- tag to be used when closing
else
table.insert (out_t, table.concat ({'<span style=\"font-style: ', style, '\" lang=\"'})); -- non-standard style, construct a span tag for it
close_tag = '</span>'; -- tag to be used when closing
end
table.insert (out_t, code);
table.insert (out_t, "-Latn\">"); -- transliterations are always Latin script
else
table.insert (out_t, "<span>"); -- when no language code: no lang= attribute, not italic ({{transliteration}} only)
close_tag = '</span>';
end
table.insert (out_t, translit); -- add the translit text
table.insert (out_t, close_tag); -- and add the appropriate </i> or </span>
if '' == title_text then -- when there is no need for a tool-tip
return table.concat (out_t); -- make a string and done
else
return title_wrapper_make (title_text, table.concat (out_t), 'span'); -- wrap with a tool-tip span and don
end
end
--[[--------------------------< V A L I D A T E _ T E X T >----------------------------------------------------
This function checks the content of args.text and returns empty string if nothing is amiss else it returns an
error message. The tests are for empty or missing text and for improper or disallowed use of apostrophe markup.
Italic rendering is controlled by the |italic= template parameter so italic markup should never appear in args.text
either as ''itself'' or as '''''bold italic''''' unless |italic=unset or |italic=invert.
]]
local function validate_text (template, args)
if not is_set (args.text) then
return make_error_msg ('no text', args, template);
end
if args.text:find ("%f[\']\'\'\'\'%f[^\']") or args.text:find ("\'\'\'\'\'[\']+") then -- because we're looking, look for 4 appostrophes or 6+ appostrophes
return make_error_msg ('text has malformed markup', args, template);
end
local style = args.italic;
if ('unset' ~= style) and ('invert' ~=style) then
if args.text:find ("%f[\']\'\'%f[^\']") or args.text:find ("%f[\']\'\'\'\'\'%f[^\']") then -- italic but not bold, or bold italic
return make_error_msg ('text has italic markup', args, template);
end
end
end
--[[--------------------------< R E N D E R _ M A I N T >------------------------------------------------------
render mainenance messages and categories
]]
local function render_maint(nocat)
local maint = {};
if 0 < #maint_msgs then -- when there are maintenance messages
table.insert (maint, table.concat ({'<span class="lang-comment" style="font-style: normal; display: none; color: #33aa33; margin-left: 0.3em;">'})); -- opening <span> tag
for _, msg in ipairs (maint_msgs) do
table.insert (maint, table.concat ({msg, ' '})); -- add message strings
end
table.insert (maint, '</span>'); -- close the span
end
if (0 < #maint_cats) and (0 == namespace) and not nocat then -- when there are maintenance categories; article namespace only
for _, cat in ipairs (maint_cats) do
table.insert (maint, table.concat ({'[[Category:', cat, ']]'})); -- format and add the categories
end
end
return table.concat (maint);
end
--[[--------------------------< P R O T O _ P R E F I X >------------------------------------------------------
for proto languages, text is prefixed with a splat. We do that here as a flag for make_text_html() so that a splat
will be rendered outside of italic markup (if used). If the first character in text here is already a splat, we
do nothing
proto_param is boolean or nil; true adds splat prefix regardless of language name; false removes and / or inhibits
regardless of language name; nil does nothing; presumes that the value in text is correct but removes extra splac
]]
local function proto_prefix (text, language_name, proto_param)
if false == proto_param then -- when forced by |proto=no
return text:gsub ('^%**', ''); -- return text without splat prefix regardless of language name or existing splat prefix in text
elseif (language_name:find ('^Proto%-') or (true == proto_param)) then -- language is a proto or forced by |proto=yes
return text:gsub ('^%**', '*'); -- prefix proto-language text with a splat; also removes duplicate prefixing splats
end
return text:gsub ('^%*+', '*'); -- return text unmolested except multiple splats reduced to one splat
end
--[[--------------------------< H A S _ P O E M _ T A G >------------------------------------------------------
looks for a poem strip marker in text; returns true when found; false else
auto-italic detection disabled when text has poem stripmarker because it is not possible for this code to know
the content that will replace the stripmarker.
]]
local function has_poem_tag (text)
return text:find ('\127[^\127]*UNIQ%-%-poem%-[%a%d]+%-QINU[^\127]*\127') and true or false;
end
--[[--------------------------< H T M L _ T A G _ S E L E C T >------------------------------------------------
Inspects content of and selectively trims text. Returns text and the name of an appropriate html tag for text.
If text contains:
\n\n text has implied <p>..</p> tags - trim leading and trailing whitespace and return
If text begins with list markup:
\n* unordered
\n; definition
\n: definition
\n# ordered
trim all leading whitespace except \n and trim all trailing whitespace
If text contains <poem>...</poem> stripmarker, return text unmodified and choose <div>..</div> tags because
the stripmarker is replaced with text wrapped in <div>..</div> tags.
If the text contains any actual <div>...</div> tags, then it's again returned unmodified and <div>...</div>
tags are used to wrap it, to prevent div/span inversion.
]]
local function html_tag_select (text)
local tag;
if has_poem_tag (text) then -- contains poem stripmarker (we can't know the content of that)
tag = 'div'; -- poem replacement is in div tags so lang must use div tags
elseif text:find ('<div') then -- reductive; if the text contains a div tag, we must use div tags
tag = 'div';
elseif mw.text.trim (text):find ('\n\n+') then -- contains implied p tags
text = mw.text.trim (text); -- trim leading and trailing whitespace characters
tag = 'div'; -- must be div because span may not contain p tags (added later by MediaWiki); poem replacement is in div tags
elseif text:find ('\n[%*:;%#]') then -- if text has list markup
text = text:gsub ('^[\t\r\f ]*', ''):gsub ('%s*$', ''); -- trim all whitespace except leading newline character '\n'
tag = 'div'; -- must be div because span may not contain ul, dd, dl, ol tags (added later by MediaWiki)
else
text = mw.text.trim (text); -- plain text
tag = 'span'; -- so span is fine
end
return text, tag;
end
--[[--------------------------< V A L I D A T E _ P R O T O >--------------------------------------------------
validates value assigned to |proto=; permitted values are yes and no; yes returns as true, no returns as false,
empty string (or parameter omitted) returns as nil; any other value returns as nil with a second return value of
true indicating that some other value has been assigned to |proto=
]]
local function validate_proto (proto_param)
if 'yes' == proto_param then
return true;
elseif 'no' == proto_param then
return false;
elseif is_set (proto_param) then
return nil, true; -- |proto= something other than 'yes' or 'no'
else
return nil; -- missing or empty
end
end
--[[--------------------------< L A N G U A G E _ N A M E _ G E T >--------------------------------------------
common function to return language name from the data set according to IETF tag
returns language name if found in data tables; nil else
]]
local function language_name_get (ietf, code, cat)
ietf = ietf:lower(); -- ietf:lower() because format_ietf_tag() returns mixed case
local name; -- remains nil if not found
if override_table[ietf] then -- look for whole IETF tag in override table
name = override_table[ietf];
elseif override_table[code] then -- not there so try basic language tag
name = override_table[code];
elseif lang_table[code] then -- shift to iana active tag/name table
name = lang_table[code];
elseif lang_dep_table[code] then -- try the iana deprecated tag/name table
name = lang_dep_table[code];
end
if lang_dep_table[code] and cat then -- because deprecated code may have been overridden to en.wiki preferred name
table.insert (maint_cats, table.concat ({'Lang and lang-xx using deprecated ISO 639 codes|', code}));
table.insert (maint_msgs, table.concat ({'code: ', code, ' is deprecated'}));
end
return name; -- name from data tables or nil
end
--[[--------------------------< _ L A N G >--------------------------------------------------------------------
entry point for {{lang}}
there should be no reason to set parameters in the {{lang}} {{#invoke:}}
<includeonly>{{#invoke:lang|lang}}</includeonly>
parameters are received from the template's frame (parent frame)
]]
local function _lang (args)
local out = {};
local language_name; -- used to make category names
local category_name; -- same as language_name except that it retains any parenthetical disambiguators (if any) from the data set
local subtags = {}; -- IETF subtags script, region, variant, and private
local code; -- the language code
local msg; -- for error messages
local tag = 'span'; -- initial value for make_text_html()
local template = args.template or 'Lang';
maint_cats = {}; -- initialize because when this module required into another module, these only declared once so only initialzed once
maint_msgs = {};
validate_cat_args (args); -- determine if categorization should be suppressed
if args[1] and args.code then
return make_error_msg ('conflicting: {{{1}}} and |code=', args, template);
else
args.code = args[1] or args.code; -- prefer args.code
end
if args[2] and args.text then
return make_error_msg ('conflicting: {{{2}}} and |text=', args, template);
else
args.text = args[2] or args.text; -- prefer args.text
end
msg = validate_text (template, args); -- ensure that |text= is set
if is_set (msg) then -- msg is an already-formatted error message
return msg;
end
args.text, tag = html_tag_select (args.text); -- inspects text; returns appropriate html tag with text trimmed accordingly
args.rtl = args.rtl == 'yes'; -- convert to boolean: 'yes' -> true, other values -> false
args.proto, msg = validate_proto (args.proto); -- return boolean, or nil, or nil and error message flag
if msg then
return make_error_msg (table.concat ({'invalid |proto=: ', args.proto}), args, template);
end
code, subtags.script, subtags.region, subtags.variant, subtags.private, msg = get_ietf_parts (args.code); -- |script=, |region=, |variant= not supported because they should be part of args.code ({{{1}}} in {{lang}})
if msg then
return make_error_msg ( msg, args, template);
end
args.italic, msg = validate_italic (args);
if msg then
return make_error_msg (msg, args, template);
end
if nil == args.italic then -- nil when |italic= absent or not set or |italic=default; args.italic controls
if ('latn' == subtags.script) or -- script is latn
(this_wiki_lang_tag ~= code and not is_set (subtags.script) and not has_poem_tag (args.text) and unicode.is_Latin (args.text)) then -- text not this wiki's language, no script specified and not in poem markup but is wholly latn script (auto-italics)
args.italic = 'italic'; -- DEFAULT for {{lang}} templates is upright; but if latn script set for font-style:italic
else
args.italic = 'inherit'; -- italic not set; script not latn; inherit current style
end
end
if is_set (subtags.script) then -- if script set, override rtl setting
if in_array (subtags.script, lang_data.rtl_scripts) then
args.rtl = true; -- script is an rtl script
else
args.rtl = false; -- script is not an rtl script
end
end
args.code = format_ietf_tag (code, subtags.script, subtags.region, subtags.variant, subtags.private); -- format to recommended subtag styles
language_name = language_name_get (args.code, code, true); -- get language name; try ietf tag first, then code w/o variant then code w/ variant
if 'invert' == args.italic and 'span' == tag then -- invert only supported for in-line content
args.text = invert_italics (args.text)
end
args.text = proto_prefix (args.text, language_name, args.proto); -- prefix proto-language text with a splat
table.insert (out, make_text_html (args.code, args.text, tag, args.rtl, args.italic, args.size, language_name));
table.insert (out, make_category (code, language_name, args.nocat));
table.insert (out, render_maint(args.nocat)); -- maintenance messages and categories
return table.concat (out); -- put it all together and done
end
--[[--------------------------< L A N G >----------------------------------------------------------------------
entry point for {{lang}}
there should be no reason to set parameters in the {{lang}} {{#invoke:}}
<includeonly>{{#invoke:lang|lang}}</includeonly>
parameters are received from the template's frame (parent frame)
]]
local function lang (frame)
local args = getArgs (frame, { -- this code so that we can detect and handle wiki list markup in text
valueFunc = function (key, value)
if 2 == key or 'text' == key then -- the 'text' parameter; do not trim wite space
return value; -- return untrimmed 'text'
elseif value then -- all other values: if the value is not nil
value = mw.text.trim (value); -- trim whitespace
if '' ~= value then -- empty string when value was only whitespace
return value;
end
end
return nil; -- value was empty or contained only whitespace
end -- end of valueFunc
});
return _lang (args);
end
--[[--------------------------< T R A N S L A T I O N _ M A K E >----------------------------------------------
stand-alone function to create literal translation of main text
Also used by {{lang-x2}}
]]
local function translation_make (args_t)
local translation_t = {', '}; -- initialize output
if 'none' ~= args_t.label then -- if we want a label
table.insert (translation_t, '<small>'); -- open the <small> html tag
if 'no' == args_t.link then
table.insert (translation_t, '<abbr title="literal translation">lit.</abbr>'); -- unlinked form
else
table.insert (translation_t, make_wikilink ('Literal translation', 'lit.')); -- linked form
end
table.insert (translation_t, " </small>"); -- close the <small> html tag
end
table.insert (translation_t, table.concat ({''', args_t.translation, '''})); -- use html entities to avoid wiki markup confusion
return table.concat (translation_t); -- make a big string and done
end
--[[--------------------------< L A N G _ X X >----------------------------------------------------------------
For the {{lang-xx}} templates, the only parameter required to be set in the template is the language code. All
other parameters can, usually should, be written in the template call. For {{lang-xx}} templates for languages
that can have multiple writing systems, it may be appropriate to set |script= as well.
For each {{lang-xx}} template choose the appropriate entry-point function so that this function knows the default
styling that should be applied to text.
For normal, upright style:
<includeonly>{{#invoke:lang|lang_xx_inherit|code=xx}}</includeonly>
For italic style:
<includeonly>{{#invoke:lang|lang_xx_italic|code=xx}}</includeonly>
All other parameters should be received from the template's frame (parent frame)
Supported parameters are:
|code = (required) the IANA language code
|script = IANA script code; especially for use with languages that use multiple writing systems
|region = IANA region code
|variant = IANA variant code
|text = (required) the displayed text in language specified by code
|link = boolean false ('no') does not link code-spcified language name to associated language article
|rtl = boolean true ('yes') identifies the language specified by code as a right-to-left language
|nocat = boolean true ('yes') inhibits normal categorization; error categories are not affected
|cat = boolian false ('no') opposite form of |nocat=
|italic = boolean true ('yes') renders displayed text in italic font; boolean false ('no') renders displayed text in normal font; not set renders according to initial_style_state
|lit = text that is a literal translation of text
|label = 'none' to suppress all labeling (language name, 'translit.', 'lit.')
any other text replaces language-name label - automatic wikilinking disabled
for those {{lang-xx}} templates that support transliteration (those templates where |text= is not entirely latn script):
|translit = text that is a transliteration of text
|translit-std = the standard that applies to the transliteration
|translit-script = ISO 15924 script name; falls back to code
For {{lang-xx}}, the positional parameters are:
{{{1}}} text
{{{2}}} transliterated text
{{{3}}} literal translation text
no other positional parameters are allowed
]]
local function _lang_xx (args)
local out = {};
local language_name; -- used to make display text, article links
local category_name; -- same as language_name except that it retains any parenthetical disambiguators (if any) from the data set
local subtags = {}; -- IETF subtags script, region, and variant
local code; -- the language code
local translit_script_name; -- name associated with IANA (ISO 15924) script code
local translit;
local translit_title;
local msg; -- for error messages
local tag = 'span'; -- initial value for make_text_html()
local template = args.template or 'Lang-xx';
maint_cats = {}; -- initialize because when this module required into another module, these only declared once so only initialzed once
maint_msgs = {};
if args[1] and args.text then
return make_error_msg ('conflicting: {{{1}}} and |text=', args, template);
else
args.text = args[1] or args.text; -- prefer args.text
end
msg = validate_text (template, args); -- ensure that |text= is set, does not contain italic markup and is protected from improper bolding
if is_set (msg) then
return msg;
end
args.text, tag = html_tag_select (args.text); -- inspects text; returns appropriate html tag with text trimmed accordingly
if args[2] and args.translit then
return make_error_msg ('conflicting: {{{2}}} and |translit=', args, template);
else
args.translit = args[2] or args.translit -- prefer args.translit
end
if args[3] and (args.translation or args.lit) then
return make_error_msg ('conflicting: {{{3}}} and |lit= or |translation=', args, template);
elseif args.translation and args.lit then
return make_error_msg ('conflicting: |lit= and |translation=', args, template);
else
args.translation = args[3] or args.translation or args.lit; -- prefer args.translation
end
if args.links and args.link then
return make_error_msg ('conflicting: |links= and |link=', args, template);
else
args.link = args.link or args.links; -- prefer args.link
end
validate_cat_args (args); -- determine if categorization should be suppressed
args.rtl = args.rtl == 'yes'; -- convert to boolean: 'yes' -> true, other values -> false
code, subtags.script, subtags.region, subtags.variant, subtags.private, msg = get_ietf_parts (args.code, args.script, args.region, args.variant); -- private omitted because private
if msg then -- if an error detected then there is an error message
return make_error_msg (msg, args, template);
end
args.italic, msg = validate_italic (args);
if msg then
return make_error_msg (msg, args, template);
end
if nil == args.italic then -- args.italic controls
if is_set (subtags.script) then
if 'latn' == subtags.script then
args.italic = 'italic'; -- |script=Latn; set for font-style:italic
else
args.italic = initial_style_state; -- italic not set; script is not latn; set for font-style:<initial_style_state>
end
else
args.italic = initial_style_state; -- here when |italic= and |script= not set; set for font-style:<initial_style_state>
end
end
if is_set (subtags.script) then -- if script set override rtl setting
if in_array (subtags.script, lang_data.rtl_scripts) then
args.rtl = true; -- script is an rtl script
else
args.rtl = false; -- script is not an rtl script
end
end
args.proto, msg = validate_proto (args.proto); -- return boolean, or nil, or nil and error message flag
if msg then
return make_error_msg (table.concat ({'invalid |proto=: ', args.proto}), args, template);
end
args.code = format_ietf_tag (code, subtags.script, subtags.region, subtags.variant, subtags.private); -- format to recommended subtag styles
language_name = language_name_get (args.code, code, true); -- get language name; try ietf tag first, then code w/o variant then code w/ variant
category_name = language_name; -- category names retain IANA parenthetical diambiguators (if any)
language_name = language_name:gsub ('%s+%b()', ''); -- remove IANA parenthetical disambiguators or qualifiers from names that have them
if args.label then
if 'none' ~= args.label then
table.insert (out, table.concat ({args.label, ': '})); -- custom label
end
else
if 'no' == args.link then
table.insert (out, language_name); -- language name without wikilink
else
if mw.ustring.find (language_name, 'languages', 1, true) then
table.insert (out, make_wikilink (language_name)); -- collective language name uses simple wikilink
elseif lang_data.article_name[code] then
table.insert (out, make_wikilink (lang_data.article_name[code], language_name)); -- language name with wikilink from override data
else
table.insert (out, make_wikilink (language_name .. ' language', language_name)); -- language name with wikilink
end
end
table.insert (out, ': '); -- separator
end
if 'invert' == args.italic then
args.text = invert_italics (args.text)
end
args.text = proto_prefix (args.text, language_name, args.proto); -- prefix proto-language text with a splat
table.insert (out, make_text_html (args.code, args.text, tag, args.rtl, args.italic, args.size, ('none' == args.label) and language_name or nil))
if is_set (args.translit) and not unicode.is_Latin (args.text) then -- transliteration (not supported in {{lang}}); not supported when args.text is wholly latn text (this is an imperfect test)
table.insert (out, ', '); -- comma to separate text from translit
if 'none' ~= args.label then
table.insert (out, '<small>');
if script_table[args['translit-script']] then -- when |translit-script= is set, try to use the script's name
translit_script_name = script_table[args['translit-script']];
else
translit_script_name = language_name; -- fall back on language name
end
translit_title = mw.title.makeTitle (0, table.concat ({'Romanization of ', translit_script_name})); -- make a title object
if translit_title.exists and ('no' ~= args.link) then
table.insert (out, make_wikilink ('Romanization of ' .. translit_script_name or language_name, 'romanized') .. ':'); -- make a wikilink if there is an article to link to
else
table.insert (out, 'romanized:'); -- else plain text
end
table.insert (out, ' </small>'); -- close the small tag
end
translit = make_translit (args.code, language_name, args.translit, args['translit-std'], args['translit-script'])
if is_set (translit) then
table.insert (out, translit);
else
return make_error_msg (table.concat ({'invalid translit-std: \'', args['translit-std'] or '[missing]'}), args, template);
end
end
if is_set (args.translation) then -- translation (not supported in {{lang}})
table.insert (out, translation_make (args));
end
table.insert (out, make_category (code, category_name, args.nocat));
table.insert (out, render_maint(args.nocat)); -- maintenance messages and categories
return table.concat (out); -- put it all together and done
end
--[[--------------------------< L A N G _ X X _ A R G S _ G E T >----------------------------------------------
common function to get args table from {{lang-??}} templates
returns table of args
]]
local function lang_xx_args_get (frame)
local args = getArgs(frame,
{
parentFirst= true, -- parameters in the template override parameters set in the {{#invoke:}}
valueFunc = function (key, value)
if 1 == key then -- the 'text' parameter; do not trim wite space
return value; -- return untrimmed 'text'
elseif value then -- all other values: if the value is not nil
value = mw.text.trim (value); -- trim whitespace
if '' ~= value then -- empty string when value was only whitespace
return value;
end
end
return nil; -- value was empty or contained only whitespace
end -- end of valueFunc
});
return args;
end
--[[--------------------------< L A N G _ X X _ I T A L I C >--------------------------------------------------
Entry point for those {{lang-xx}} templates that call lang_xx_italic(). Sets the initial style state to italic.
]]
local function lang_xx_italic (frame)
local args = lang_xx_args_get (frame);
initial_style_state = 'italic';
return _lang_xx (args);
end
--[[--------------------------< _ L A N G _ X X _ I T A L I C >------------------------------------------------
Entry point ffrom another module. Sets the initial style state to italic.
]]
local function _lang_xx_italic (args)
initial_style_state = 'italic';
return _lang_xx (args);
end
--[[--------------------------< L A N G _ X X _ I N H E R I T >------------------------------------------------
Entry point for those {{lang-xx}} templates that call lang_xx_inherit(). Sets the initial style state to inherit.
]]
local function lang_xx_inherit (frame)
local args = lang_xx_args_get (frame);
initial_style_state = 'inherit';
return _lang_xx (args);
end
--[[--------------------------< _ L A N G _ X X _ I N H E R I T >----------------------------------------------
Entry point from another module. Sets the initial style state to inherit.
]]
local function _lang_xx_inherit (args)
initial_style_state = 'inherit';
return _lang_xx (args);
end
--[[--------------------------< _ I S _ I E T F _ T A G >------------------------------------------------------
Returns true when a language name associated with IETF language tag exists; nil else. IETF language tag must be valid.
All code combinations supported by {{lang}} and the {{lang-xx}} templates are supported by this function.
Module entry point from another module
]]
local function _is_ietf_tag (tag) -- entry point when this module is require()d into another
local c, s, r, v, p, err; -- code, script, region, variant, private, error message
c, s, r, v, p, err = get_ietf_parts (tag); -- disassemble tag into constituent part and validate
return ((c and not err) and true) or nil; -- return true when code portion has a value without error message; nil else
end
--[[--------------------------< I S _ I E T F _ T A G >--------------------------------------------------------
Module entry point from an {{#invoke:}}
]]
local function is_ietf_tag (frame)
return _is_ietf_tag (getArgs (frame)[1]); -- args[1] is the ietf language tag to be tested; also get parent frame
end
--[[--------------------------< I S _ I E T F _ T A G _ F R A M E >--------------------------------------------
Module entry point from an {{#invoke:}}; same as is_ietf_tag() except does not get parameters from the parent
(template) frame. This function not useful when called by {{lang|fn=is_ietf_tag_frame|<tag>}} because <tag>
is in the parent frame.
]]
local function is_ietf_tag_frame (frame)
return _is_ietf_tag (getArgs (frame, {frameOnly = true,})[1]); -- args[1] is the ietf language tag to be tested; do not get parent frame
end
--[[--------------------------< _ N A M E _ F R O M _ T A G >--------------------------------------------------
Returns language name associated with IETF language tag if valid; error message else.
All code combinations supported by {{lang}} and the {{lang-xx}} templates are supported by this function.
Set invoke's |link= parameter to yes to get wikilinked version of the language name.
Module entry point from another module
]]
local function _name_from_tag (args)
local subtags = {}; -- IETF subtags script, region, variant, and private
local raw_code = args[1]; -- save a copy of the input IETF subtag
local link = 'yes' == args['link']; -- make a boolean
local label = args.label;
local code; -- the language code
local msg; -- gets an error message if IETF language tag is malformed or invalid
local language_name = '';
code, subtags.script, subtags.region, subtags.variant, subtags.private, msg = get_ietf_parts (raw_code);
if msg then
local template = (args['template'] and table.concat ({'{{', args['template'], '}}: '})) or ''; -- make template name (if provided by the template)
return table.concat ({'<span style=\"color:#d33\">Error: ', template, msg, '</span>'});
end
raw_code = format_ietf_tag (code, subtags.script, subtags.region, subtags.variant, subtags.private); -- format to recommended subtag styles; private omitted because private
language_name = language_name_get (raw_code, code); -- get language name; try ietf tag first, then code w/o variant then code w/ variant
language_name = language_name:gsub ('%s+%b()', ''); -- remove IANA parenthetical disambiguators or qualifiers from names that have them
if link then -- when |link=yes, wikilink the language name
if mw.ustring.find (language_name, 'languages', 1, true) then
language_name = make_wikilink (language_name, label); -- collective language name uses simple wikilink
elseif lang_data.article_name[code] then
language_name = make_wikilink (lang_data.article_name[code], label or language_name); -- language name with wikilink from override data
else
language_name = make_wikilink (language_name .. ' language', label or language_name); -- language name with wikilink
end
end
return language_name;
end
--[[--------------------------< N A M E _ F R O M _ T A G >----------------------------------------------------
Module entry point from an {{#invoke:}}
]]
local function name_from_tag (frame) -- entry point from an {{#invoke:Lang|name_from_tag|<ietf tag>|link=<yes>|template=<template name>}}
return _name_from_tag (getArgs(frame)) -- pass-on the args table, nothing else; getArgs() so we also get parent frame
end
--[[--------------------------< _ T A G _ F R O M _ N A M E >--------------------------------------------------
Returns the ietf language tag associated with the language name. Spelling of language name must be correct
according to the spelling in the source tables. When a standard language name has a parenthetical disambiguator,
that disambiguator must be omitted (they are not present in the data name-to-tag tables).
Module entry point from another module
]]
local function _tag_from_name (args) -- entry point from another module
local msg;
if args[1] and '' ~= args[1] then
local data = mw.loadData ('Module:Lang/tag from name'); -- get the reversed data tables TODO: change when going live
local lang = args[1]:lower(); -- allow any-case for the language name (speeling must till be correct)
local tag = data.rev_override_table[lang] or data.rev_lang_table[lang] or data.rev_lang_dep_table[lang]; -- get the code; look first in the override then in the standard
if tag then
return tag, true; -- language name found so return tag and done; second return used by is_lang_name()
else
msg = 'language: ' .. args[1] .. ' not found' -- language name not found, error message
end
else
msg = 'missing language name' -- language name not provided, error message
end
local template = '';
if args.template and '' ~= args.template then
template = table.concat ({'{{', args['template'], '}}: '}); -- make template name (if provided by the template)
end
return table.concat ({'<span style=\"color:#d33\">Error: ', template, msg, '</span>'});
end
--[[--------------------------< T A G _ F R O M _ N A M E >----------------------------------------------------
Module entry point from an {{#invoke:}}
]]
local function tag_from_name (frame) -- entry point from an {{#invoke:Lang|tag_from_name|<language name>|link=<yes>|template=<template name>}}
local result, _ = _tag_from_name (getArgs(frame)) -- pass-on the args table, nothing else; getArgs() so we also get parent frame; supress second return used by is_lang_name()
return result;
end
--[[--------------------------< I S _ L A N G _ N A M E >------------------------------------------------------
Module entry point from an {{#invoke:}}
]]
local function is_lang_name (frame)
local _, result = _tag_from_name (getArgs(frame)) -- pass-on the args table, nothing else; getArgs() so we also get parent frame; supress second return used by tag_from_name()
return result and true or nil;
end
--[[--------------------------< _ T R A N S L >----------------------------------------------------------------
Module entry point from another module
]]
local function _transl (args)
local title_table = lang_data.translit_title_table; -- table of transliteration standards and the language codes and scripts that apply to those standards
local language_name; -- language name that matches language code; used for tool tip
local translit; -- transliterated text to display
local script; -- IANA script
local msg; -- for when called functions return an error message
maint_cats = {}; -- initialize because when this module required into another module, these only declared once so only initialzed once
maint_msgs = {};
if is_set (args[3]) then -- [3] set when {{transliteration|code|standard|text}}
args.text = args[3]; -- get the transliterated text
args.translit_std = args[2] and args[2]:lower(); -- get the standard; lower case for table indexing
if not title_table[args.translit_std] then
return make_error_msg (table.concat ({'unrecognized transliteration standard: ', args.translit_std}), args, 'Transliteration');
end
else
if is_set (args[2]) then -- [2] set when {{transliteration|code|text}}
args.text = args[2]; -- get the transliterated text
else
if args[1] and (args[1]:match ('^%a%a%a?%a?$') or -- args[2] missing; is args[1] a language or script tag or is it the transliterated text?
args[1]:match ('^%a%a%a?%-x%-')) then -- or is args[1] a private-use tag
return make_error_msg ('no text', args, 'Transliteration'); -- args[1] is a code so we're missing text
else
args.text = args[1]; -- args[1] is not a code so we're missing that; assign args.text for error message
return make_error_msg ('missing language / script code', args, 'Transliteration');
end
end
end
if is_set (args[1]) then -- IANA language code used for html lang= attribute; or ISO 15924 script code
if args[1]:match ('^%a%a%a?%a?$') or args[1]:match ('^%a%a%a?%-x%-') then -- args[1] has correct form?
args.code = args[1]:lower(); -- use the language/script code; only (2, 3, or 4 alpha characters) or private-use; lower case because table indexes are lower case
else
return make_error_msg (table.concat ({'unrecognized language / script code: ', args[1]}), args, 'Transliteration'); -- invalid language / script code
end
else
return make_error_msg ('missing language / script code', args, 'Transliteration'); -- missing language / script code so quit
end
args.italic, msg = validate_italic (args);
if msg then
return make_error_msg (msg, args, 'Transliteration');
end
if 'italic' == args.italic then -- 'italic' when |italic=yes; because that is same as absent or not set and |italic=default
args.italic = nil; -- set to nil;
end
if override_table[args.code] then -- is code a language code defined in the override table?
language_name = override_table[args.code];
args.code = args.code:match ('^%a%a%a?'); -- if private use, strip all but language subtag
elseif lang_table[args.code] then -- is code a language code defined in the standard language code tables?
language_name = lang_table[args.code];
elseif lang_dep_table[args.code] then -- is code a language code defined in the deprecated language code tables?
language_name = lang_dep_table[args.code];
elseif script_table[args.code] then -- if here, code is not a language code; is it a script code?
language_name = script_table[args.code];
script = args.code; -- code was an ISO 15924 script so use that instead
args.code = ''; -- unset because not a language code
else
return make_error_msg (table.concat ({'unrecognized language / script code: ', args.code}), args, 'Transliteration'); -- invalid language / script code
end
-- here only when all parameters passed to make_translit() are valid
return make_translit (args.code, language_name, args.text, args.translit_std, script, args.italic);
end
--[[--------------------------< T R A N S L >------------------------------------------------------------------
Module entry point from an {{#invoke:}}
]]
local function transl (frame)
return _transl (getArgs(frame));
end
--[[--------------------------< C A T E G O R Y _ F R O M _ T A G >--------------------------------------------
Returns category name associated with IETF language tag if valid; error message else
All code combinations supported by {{lang}} and the {{lang-xx}} templates are supported by this function.
Module entry point from another module
]]
local function _category_from_tag (args_t)
local subtags = {}; -- IETF subtags script, region, variant, and private
local raw_code = args_t[1]; -- save a copy of the input IETF subtag
local link = 'yes' == args_t.link; -- make a boolean
local label = args_t.label;
local code; -- the language code
local msg; -- gets an error message if IETF language tag is malformed or invalid
local category_name = '';
code, subtags.script, subtags.region, subtags.variant, subtags.private, msg = get_ietf_parts (raw_code);
if msg then
local template = (args_t.template and table.concat ({'{{', args_t.template, '}}: '})) or ''; -- make template name (if provided by the template)
return table.concat ({'<span style=\"color:#d33\">Error: ', template, msg, '</span>'});
end
raw_code = format_ietf_tag (code, subtags.script, subtags.region, subtags.variant, subtags.private); -- format to recommended subtag styles; private omitted because private
category_name = language_name_get (raw_code, code); -- get language name; try ietf tag first, then code w/o variant then code w/ variant
category_name = make_category (code, category_name, nil, true):gsub ('[%[%]]', '');
if link then
return table.concat ({'[[:', category_name, ']]'});
else
return category_name;
end
end
--[[--------------------------< C A T E G O R Y _ F R O M _ T A G >--------------------------------------------
Module entry point from an {{#invoke:}}
]]
local function category_from_tag (frame) -- entry point from an {{#invoke:Lang|category_from_tag|<ietf tag>|template=<template name>}}
return _category_from_tag (getArgs (frame)); -- pass-on the args table, nothing else; getArgs() so we also get parent frame
end
--[[--------------------------< E X P O R T E D F U N C T I O N S >------------------------------------------
]]
return {
category_from_tag = category_from_tag,
lang = lang, -- entry point for {{lang}}
lang_xx_inherit = lang_xx_inherit, -- entry points for {{lang-??}}
lang_xx_italic = lang_xx_italic,
is_ietf_tag = is_ietf_tag,
is_ietf_tag_frame = is_ietf_tag_frame,
is_lang_name = is_lang_name,
tag_from_name = tag_from_name, -- returns ietf tag associated with language name
name_from_tag = name_from_tag, -- used for template documentation; possible use in ISO 639 name from code templates
transl = transl, -- entry point for {{transliteration}}
_category_from_tag = _category_from_tag, -- entry points when this module is require()d into other modules
_lang = _lang,
_lang_xx_inherit = _lang_xx_inherit,
_lang_xx_italic = _lang_xx_italic,
_is_ietf_tag = _is_ietf_tag,
get_ietf_parts = get_ietf_parts,
_tag_from_name = _tag_from_name,
_name_from_tag = _name_from_tag,
_transl = _transl,
_translation_make = translation_make,
};
b4bf37fa610695625e5f1ff5d33471dfaaf8af34
Module:Unicode data
828
182
370
369
2023-09-14T01:14:49Z
Ilovethehitgameomori
2
1 revision imported
Scribunto
text/plain
local p = {}
local floor = math.floor
local function errorf(level, ...)
if type(level) == "number" then
return error(string.format(...), level + 1)
else -- level is actually the format string.
return error(string.format(level, ...), 2)
end
end
local function binary_range_search(codepoint, ranges)
local low, mid, high
low, high = 1, ranges.length or require "Module:TableTools".length(ranges)
while low <= high do
mid = floor((low + high) / 2)
local range = ranges[mid]
if codepoint < range[1] then
high = mid - 1
elseif codepoint <= range[2] then
return range, mid
else
low = mid + 1
end
end
return nil, mid
end
p.binary_range_search = binary_range_search
--[[
local function linear_range_search(codepoint, ranges)
for i, range in ipairs(ranges) do
if range[1] <= codepoint and codepoint <= range[2] then
return range
end
end
end
--]]
-- Load a module by indexing "loader" with the name of the module minus the
-- "Module:Unicode data/" part. For instance, loader.blocks returns
-- [[Module:Unicode data/blocks]]. If a module cannot be loaded, false will be
-- returned.
local loader = setmetatable({}, {
__index = function (self, key)
local success, data = pcall(mw.loadData, "Module:Unicode data/" .. key)
if not success then
data = false
end
self[key] = data
return data
end
})
-- For the algorithm used to generate Hangul Syllable names,
-- see "Hangul Syllable Name Generation" in section 3.12 of the
-- Unicode Specification:
-- https://www.unicode.org/versions/Unicode11.0.0/ch03.pdf
local name_hooks = {
{ 0x00, 0x1F, "<control-%04X>" }, -- C0 control characters
{ 0x7F, 0x9F, "<control-%04X>" }, -- DEL and C1 control characters
{ 0x3400, 0x4DBF, "CJK UNIFIED IDEOGRAPH-%04X" }, -- CJK Ideograph Extension A
{ 0x4E00, 0x9FFF, "CJK UNIFIED IDEOGRAPH-%04X" }, -- CJK Ideograph
{ 0xAC00, 0xD7A3, function (codepoint) -- Hangul Syllables
local Hangul_data = loader.Hangul
local syllable_index = codepoint - 0xAC00
return ("HANGUL SYLLABLE %s%s%s"):format(
Hangul_data.leads[floor(syllable_index / Hangul_data.final_count)],
Hangul_data.vowels[floor((syllable_index % Hangul_data.final_count)
/ Hangul_data.trail_count)],
Hangul_data.trails[syllable_index % Hangul_data.trail_count]
)
end },
-- High Surrogates, High Private Use Surrogates, Low Surrogates
{ 0xD800, 0xDFFF, "<surrogate-%04X>" },
{ 0xE000, 0xF8FF, "<private-use-%04X>" }, -- Private Use
-- CJK Compatibility Ideographs
{ 0xF900, 0xFA6D, "CJK COMPATIBILITY IDEOGRAPH-%04X" },
{ 0xFA70, 0xFAD9, "CJK COMPATIBILITY IDEOGRAPH-%04X" },
{ 0x17000, 0x187F7, "TANGUT IDEOGRAPH-%04X" }, -- Tangut Ideograph
{ 0x18800, 0x18AFF, function (codepoint)
return ("TANGUT COMPONENT-%03d"):format(codepoint - 0x187FF)
end },
{ 0x18D00, 0x18D08, "TANGUT IDEOGRAPH-%04X" }, -- Tangut Ideograph Supplement
{ 0x1B170, 0x1B2FB, "NUSHU CHARACTER-%04X" }, -- Nushu
{ 0x20000, 0x2A6DF, "CJK UNIFIED IDEOGRAPH-%04X" }, -- CJK Ideograph Extension B
{ 0x2A700, 0x2B739, "CJK UNIFIED IDEOGRAPH-%04X" }, -- CJK Ideograph Extension C
{ 0x2B740, 0x2B81D, "CJK UNIFIED IDEOGRAPH-%04X" }, -- CJK Ideograph Extension D
{ 0x2B820, 0x2CEA1, "CJK UNIFIED IDEOGRAPH-%04X" }, -- CJK Ideograph Extension E
{ 0x2CEB0, 0x2EBE0, "CJK UNIFIED IDEOGRAPH-%04X" }, -- CJK Ideograph Extension F
-- CJK Compatibility Ideographs Supplement (Supplementary Ideographic Plane)
{ 0x2F800, 0x2FA1D, "CJK COMPATIBILITY IDEOGRAPH-%04X" },
{ 0xE0100, 0xE01EF, function (codepoint) -- Variation Selectors Supplement
return ("VARIATION SELECTOR-%d"):format(codepoint - 0xE0100 + 17)
end},
{ 0x30000, 0x3134A, "CJK UNIFIED IDEOGRAPH-%04X" }, -- CJK Ideograph Extension G
{ 0x31350, 0x323AF, "CJK UNIFIED IDEOGRAPH-%04X" }, -- CJK Ideograph Extension H
{ 0x2EBF0, 0x2EE5D, "CJK UNIFIED IDEOGRAPH-%04X" }, -- CJK Ideograph Extension I
{ 0xF0000, 0xFFFFD, "<private-use-%04X>" }, -- Plane 15 Private Use
{ 0x100000, 0x10FFFD, "<private-use-%04X>" } -- Plane 16 Private Use
}
name_hooks.length = #name_hooks
local name_range_cache
local function generate_name(data, codepoint)
if type(data) == "string" then
return data:format(codepoint)
else
return data(codepoint)
end
end
--[[
-- Checks that the code point is a number and in range.
-- Does not check whether code point is an integer.
-- Not used
local function check_codepoint(funcName, argIdx, val)
require 'libraryUtil'.checkType(funcName, argIdx, val, 'number')
if codepoint < 0 or 0x10FFFF < codepoint then
errorf("Codepoint %04X out of range", codepoint)
end
end
--]]
-- https://www.unicode.org/versions/Unicode11.0.0/ch04.pdf, section 4.8
function p.lookup_name(codepoint)
-- U+FDD0-U+FDEF and all code points ending in FFFE or FFFF are Unassigned
-- (Cn) and specifically noncharacters:
-- https://www.unicode.org/faq/private_use.html#nonchar4
if 0xFDD0 <= codepoint and (codepoint <= 0xFDEF
or floor(codepoint % 0x10000) >= 0xFFFE) then
return ("<noncharacter-%04X>"):format(codepoint)
end
if name_range_cache -- Check if previously used "name hook" applies to this code point.
and codepoint >= name_range_cache[1]
and codepoint <= name_range_cache[2] then
return generate_name(name_range_cache[3], codepoint)
end
local range = binary_range_search(codepoint, name_hooks)
if range then
name_range_cache = range
return generate_name(range[3], codepoint)
end
local data = loader[('names/%03X'):format(codepoint / 0x1000)]
if data and data[codepoint] then
return data[codepoint]
-- Unassigned (Cn) consists of noncharacters and reserved characters.
-- The character has been established not to be a noncharacter,
-- and if it were assigned, its name would already been retrieved,
-- so it must be reserved.
else
return ("<reserved-%04X>"):format(codepoint)
end
end
--[[
-- No image data modules on Wikipedia yet.
function p.lookup_image(codepoint)
local data = loader[('images/%03X'):format(codepoint / 0x1000)]
if data then
return data[codepoint]
end
end
--]]
local planes = {
[ 0] = "Basic Multilingual Plane";
[ 1] = "Supplementary Multilingual Plane";
[ 2] = "Supplementary Ideographic Plane";
[ 3] = "Tertiary Ideographic Plane";
[14] = "Supplementary Special-purpose Plane";
[15] = "Supplementary Private Use Area-A";
[16] = "Supplementary Private Use Area-B";
}
-- Load [[Module:Unicode data/blocks]] if needed and assign it to this variable.
local blocks
local function block_iter(blocks, i)
i = i + 1
local data = blocks[i]
if data then
-- Unpack doesn't work on tables loaded with mw.loadData.
return i, data[1], data[2], data[3]
end
end
-- An ipairs-type iterator generator for the list of blocks.
function p.enum_blocks()
local blocks = loader.blocks
return block_iter, blocks, 0
end
function p.lookup_plane(codepoint)
local i = floor(codepoint / 0x10000)
return planes[i] or ("Plane %u"):format(i)
end
function p.lookup_block(codepoint)
local blocks = loader.blocks
local range = binary_range_search(codepoint, blocks)
if range then
return range[3]
else
return "No Block"
end
end
function p.get_block_info(name)
for i, block in ipairs(loader.blocks) do
if block[3] == name then
return block
end
end
end
function p.is_valid_pagename(pagename)
local has_nonws = false
for cp in mw.ustring.gcodepoint(pagename) do
if (cp == 0x0023) -- #
or (cp == 0x005B) -- [
or (cp == 0x005D) -- ]
or (cp == 0x007B) -- {
or (cp == 0x007C) -- |
or (cp == 0x007D) -- }
or (cp == 0x180E) -- MONGOLIAN VOWEL SEPARATOR
or ((cp >= 0x2000) and (cp <= 0x200A)) -- spaces in General Punctuation block
or (cp == 0xFFFD) -- REPLACEMENT CHARACTER
then
return false
end
local printable, result = p.is_printable(cp)
if not printable then
return false
end
if result ~= "space-separator" then
has_nonws = true
end
end
return has_nonws
end
local function manual_unpack(what, from)
if what[from + 1] == nil then
return what[from]
end
local result = {}
from = from or 1
for i, item in ipairs(what) do
if i >= from then
table.insert(result, item)
end
end
return unpack(result)
end
local function compare_ranges(range1, range2)
return range1[1] < range2[1]
end
-- Creates a function to look up data in a module that contains "singles" (a
-- code point-to-data map) and "ranges" (an array containing arrays that contain
-- the low and high code points of a range and the data associated with that
-- range).
-- "loader" loads and returns the "singles" and "ranges" tables.
-- "match_func" is passed the code point and either the data or the "dots", and
-- generates the final result of the function.
-- The varargs ("dots") describes the default data to be returned if there wasn't
-- a match.
-- In case the function is used more than once, "cache" saves ranges that have
-- already been found to match, or a range whose data is the default if there
-- was no match.
local function memo_lookup(data_module_subpage, match_func, ...)
local dots = { ... }
local cache = {}
local singles, ranges
return function (codepoint)
if not singles then
local data_module = loader[data_module_subpage]
singles, ranges = data_module.singles, data_module.ranges
end
if singles[codepoint] then
return match_func(codepoint, singles[codepoint])
end
local range = binary_range_search(codepoint, cache)
if range then
return match_func(codepoint, manual_unpack(range, 3))
end
local range, index = binary_range_search(codepoint, ranges)
if range then
table.insert(cache, range)
table.sort(cache, compare_ranges)
return match_func(codepoint, manual_unpack(range, 3))
end
if ranges[index] then
local dots_range
if codepoint > ranges[index][2] then
dots_range = {
ranges[index][2] + 1,
ranges[index + 1] and ranges[index + 1][1] - 1 or 0x10FFFF,
unpack(dots)
}
else -- codepoint < range[index][1]
dots_range = {
ranges[index - 1] and ranges[index - 1][2] + 1 or 0,
ranges[index][1] - 1,
unpack(dots)
}
end
table.sort(cache, compare_ranges)
end
return match_func(codepoint)
end
end
-- Get a code point's combining class value in [[Module:Unicode data/combining]],
-- and return whether this value is not zero. Zero is assigned as the default
-- if the combining class value is not found in this data module.
-- That is, return true if character is combining, or false if it is not.
-- See https://www.unicode.org/reports/tr44/#Canonical_Combining_Class_Values for
-- more information.
p.is_combining = memo_lookup(
"combining",
function (codepoint, combining_class)
return combining_class and combining_class ~= 0 or false
end,
0)
function p.add_dotted_circle(str)
return (mw.ustring.gsub(str, ".",
function(char)
if p.is_combining(mw.ustring.codepoint(char)) then
return '◌' .. char
end
end))
end
local lookup_control = memo_lookup(
"control",
function (codepoint, ccc)
return ccc or "assigned"
end,
"assigned")
p.lookup_control = lookup_control
function p.is_assigned(codepoint)
return lookup_control(codepoint) ~= "unassigned"
end
function p.is_printable(codepoint)
local result = lookup_control(codepoint)
return (result == "assigned") or (result == "space-separator"), result
end
function p.is_whitespace(codepoint)
local result = lookup_control(codepoint)
return (result == "space-separator"), result
end
p.lookup_category = memo_lookup(
"category",
function (codepoint, category)
return category
end,
"Cn")
local lookup_script = memo_lookup(
"scripts",
function (codepoint, script_code)
return script_code or 'Zzzz'
end,
"Zzzz")
p.lookup_script = lookup_script
function p.get_best_script(str)
-- Check type of argument, because mw.text.decode coerces numbers to strings!
require "libraryUtil".checkType("get_best_script", 1, str, "string")
-- Convert HTML character references (including named character references,
-- or character entities) to characters.
str = mw.text.decode(str, true)
local scripts = {}
for codepoint in mw.ustring.gcodepoint(str) do
local script = lookup_script(codepoint)
-- Ignore "Inherited", "Undetermined", or "Uncoded" scripts.
if not (script == "Zyyy" or script == "Zinh" or script == "Zzzz") then
scripts[script] = true
end
end
-- If scripts does not contain two or more keys,
-- return first and only key (script code) in table.
if not next(scripts, next(scripts)) then
return next(scripts)
end -- else return majority script, or else "Zzzz"?
end
function p.is_Latin(str)
require "libraryUtil".checkType("get_best_script", 1, str, "string")
str = mw.text.decode(str, true)
-- Search for the leading bytes that introduce the UTF-8 encoding of the
-- code points U+0340-U+10FFFF. If they are not found and there is at least
-- one Latin-script character, the string counts as Latin, because the rest
-- of the characters can only be Zyyy, Zinh, and Zzzz.
-- The only scripts found below U+0370 (the first code point of the Greek
-- and Coptic block) are Latn, Zyyy, Zinh, and Zzzz.
-- See the codepage in the [[UTF-8]] article.
if not str:find "[\205-\244]" then
for codepoint in mw.ustring.gcodepoint(str) do
if lookup_script(codepoint) == "Latn" then
return true
end
end
end
local Latn = false
for codepoint in mw.ustring.gcodepoint(str) do
local script = lookup_script(codepoint)
if script == "Latn" then
Latn = true
elseif not (script == "Zyyy" or script == "Zinh"
or script == "Zzzz") then
return false
end
end
return Latn
end
-- Checks that a string contains only characters belonging to right-to-left
-- scripts, or characters of ignorable scripts.
function p.is_rtl(str)
require "libraryUtil".checkType("get_best_script", 1, str, "string")
str = mw.text.decode(str, true)
-- Search for the leading bytes that introduce the UTF-8 encoding of the
-- code points U+0580-U+10FFFF. If they are not found, the string can only
-- have characters from a left-to-right script, because the first code point
-- in a right-to-left script is U+0591, in the Hebrew block.
if not str:find "[\214-\244]" then
return false
end
local result = false
local rtl = loader.scripts.rtl
for codepoint in mw.ustring.gcodepoint(str) do
local script = lookup_script(codepoint)
if rtl[script] then
result = true
elseif not (script == "Zyyy" or script == "Zinh"
or script == "Zzzz") then
return false
end
end
return result
end
--[[--------------------------< I S _ R T L _ F R A M E >------------------------------------------------------
external entry from an {{#invoke:}} to determine if a string of text is rtl. Strips html and html-like tags so
that those tags don't corrupt the is-rtl-is-not-rtl determination; this added for the cases where the rtl text
has <br /> tags.
]]
function p.is_rtl_frame (frame)
local str = frame.args[1]; -- get the string from the {{#invoke:}} frame
str = str:gsub ('%b<>', ''); -- strip any html and html-like tags
return p.is_rtl (str); -- return if whatever remains rtl; false else
end
local function get_codepoint(args, arg)
local codepoint_string = args[arg]
or errorf(2, "Parameter %s is required", tostring(arg))
local codepoint = tonumber(codepoint_string, 16)
or errorf(2, "Parameter %s is not a code point in hexadecimal base",
tostring(arg))
if not (0 <= codepoint and codepoint <= 0x10FFFF) then
errorf(2, "code point in parameter %s out of range", tostring(arg))
end
return codepoint
end
local function get_func(args, arg, prefix)
local suffix = args[arg]
or errorf(2, "Parameter %s is required", tostring(arg))
suffix = mw.text.trim(suffix)
local func_name = prefix .. suffix
local func = p[func_name]
or errorf(2, "There is no function '%s'", func_name)
return func
end
-- This function allows any of the "lookup" functions to be invoked. The first
-- parameter is the word after "lookup_"; the second parameter is the code point
-- in hexadecimal base.
function p.lookup(frame)
local func = get_func(frame.args, 1, "lookup_")
local codepoint = get_codepoint(frame.args, 2)
local result = func(codepoint)
if func == p.lookup_name then
-- Prevent code point labels such as <control-0000> from being
-- interpreted as HTML tags.
result = result:gsub("<", "<")
end
return result
end
function p.is(frame)
local func = get_func(frame.args, 1, "is_")
-- is_Latin and is_valid_pagename take strings.
if func == p.is_Latin or func == p.is_valid_pagename or func == p.is_rtl then
return (func(frame.args[2]))
else -- The rest take code points.
local codepoint = get_codepoint(frame.args, 2)
return (func(codepoint)) -- Adjust to one result.
end
end
return p
898b5f0689e2646f633acbbd08143920c87abef2
Module:Lang/data
828
183
372
371
2023-09-14T01:14:50Z
Ilovethehitgameomori
2
1 revision imported
Scribunto
text/plain
local lang_obj = mw.language.getContentLanguage();
local this_wiki_lang_tag = lang_obj.code; -- get this wiki's language tag
--[[--------------------------< L A N G _ N A M E _ T A B L E >------------------------------------------------
primary table of tables that decode:
lang -> language tags and names
script -> ISO 15924 script tags
region -> ISO 3166 region tags
variant -> iana registered variant tags
suppressed -> map of scripts tags and their associated language tags
all of these data come from separate modules that are derived from the IANA language-subtag-registry file
key_to_lower() avoids the metatable trap and sets all keys in the subtables to lowercase. Many language codes
have multiple associated names; Module:lang is only concerned with the first name so key_to_lower() only fetches
the first name.
]]
local function key_to_lower (module, src_type)
local out = {};
local source = (('var_sup' == src_type) and require (module)) or mw.loadData (module); -- fetch data from this module; require() avoids metatable trap for variant data
if 'var_sup' == src_type then
for k, v in pairs (source) do
out[k:lower()] = v; -- for variant and suppressed everything is needed
end
elseif 'lang' == src_type and source.active then -- for ~/iana_languages (active)
for k, v in pairs (source.active) do
out[k:lower()] = v[1]; -- ignore multiple names; take first name only
end
elseif 'lang_dep' == src_type and source.deprecated then -- for ~/iana_languages (deprecated)
for k, v in pairs (source.deprecated) do
out[k:lower()] = v[1]; -- ignore multiple names; take first name only
end
else -- here for all other sources
for k, v in pairs (source) do
out[k:lower()] = v[1]; -- ignore multiple names; take first name only
end
end
return out;
end
local lang_name_table_t = {
lang = key_to_lower ('Module:Language/data/iana languages', 'lang'),
lang_dep = key_to_lower ('Module:Language/data/iana languages', 'lang_dep'),
script = key_to_lower ('Module:Language/data/iana scripts'), -- script keys are capitalized; set to lower
region = key_to_lower ('Module:Language/data/iana regions'), -- region keys are uppercase; set to lower
variant = key_to_lower ('Module:Language/data/iana variants', 'var_sup'),
suppressed = key_to_lower ('Module:Language/data/iana suppressed scripts', 'var_sup'), -- script keys are capitalized; set to lower
}
--[[--------------------------< I 1 8 N M E D I A W I K I O V E R R I D E >--------------------------------
For internationalization; not used at en.wiki
The language names taken from the IANA language-subtag-registry file are given in English. That may not be ideal.
Translating ~8,000 language names is also not ideal. MediaWiki maintains (much) shorter lists of language names
in most languages for which there is a Wikipedia edition. When desired, Module:Lang can use the MediaWiki
language list for the local language.
Caveat lector: the list of MediaWiki language names for your language may not be complete or may not exist at all.
When incomplete, MediaWiki's list will 'fall back' to another language (typically English). When that happens
add an appropriate entry to the override table below.
Caveat lector: the list of MediaWiki language names for your language may not be correct. At en.wiki, the
MediaWiki language names do not agree with the IANA language names for these ISO 639-1 tags. Often it is simply
spelling differences:
bh: IANA: Bihari languages MW: Bhojpuri – the ISO 639-3 tag for Bhojpuri is bho
bn: IANA: Bengali MW: Bangla – Bengali is the exonym, Bangla is the endonym
dv: IANA: Dhivehi MW: Divehi
el: IANA: Modern Greek MW: Greek
ht: IANA: Haitian MW: Haitian Creole
ky: IANA: Kirghiz MW: Kyrgyz
li: IANA: Limburgan MW: Limburgish
or: IANA: Oriya MW: Odia
os: IANA: Ossetian MW: Ossetic
"pa: IANA: Panjabi MW: Punjabi
"ps: IANA: Pushto MW: Pashto
"to: IANA: Tonga MW: Tongan
"ug: IANA: Uighur MW: Uyghur
use the override table to override language names that are incorrect for your project
To see the list of names that MediaWiki has for your language, enter this in the Debug colsole:
=mw.dumpObject (mw.language.fetchLanguageNames ('<tag>', 'all'))
(replacing <tag> with the language tag for your language)
Use of the MediaWiki language names lists is enabled when media_wiki_override_enable is set to boolean true.
]]
local media_wiki_override_enable = false; -- set to true to override IANA names with MediaWiki names; always false at en.wiki
-- caveat lector: the list of MediaWiki language names for your language may not be complete or may not exist at all
if true == media_wiki_override_enable then
local mw_languages_by_tag_t = mw.language.fetchLanguageNames (this_wiki_lang_tag, 'all'); -- get a table of language tag/name pairs known to MediaWiki
for tag, name in pairs (mw_languages_by_tag_t) do -- loop through each tag/name pair in the MediaWiki list
if lang_name_table_t.lang[tag] then -- if the tag is in the main list
lang_name_table_t.lang[tag] = name; -- overwrite exisiting name with the name from MediaWiki
end
end
end
--[[--------------------------< O V E R R I D E >--------------------------------------------------------------
Language codes and names in this table override the BCP47 names in lang_name_table.
indexes in this table shall always be lower case
]]
local override = {
------------------------------< I S O _ 6 3 9 - 1 >------------------------------------------------------------
["ab"] = "Abkhaz", -- to match en.wiki article name
["ca-valencia"] = "Valencian",
["cu"] = "Church Slavonic", -- 2nd IANA name;
["de-at"] = "Austrian German", -- these code-region and code-variant tags to match en.wiki article names
["de-ch"] = "Swiss Standard German",
["en-au"] = "Australian English",
["en-ca"] = "Canadian English",
["en-emodeng"] = "Early Modern English",
["en-gb"] = "British English",
["en-ie"] = "Irish English",
["en-in"] = "Indian English",
["en-nz"] = "New Zealand English",
["en-us"] = "American English",
["en-za"] = "South African English",
["fy"] = "West Frisian", -- Western Frisian
["mo"] = "Moldovan", -- Moldavian (deprecated code); to match en.wiki article title
["nl-be"] = "Flemish", -- match MediaWiki
["oc-provenc"] = "Provençal",
["ps"] = "Pashto", -- Pushto
["pt-br"] = "Brazilian Portuguese", -- match MediaWiki
["tw-asante"] = "Asante Twi",
["ug"] = "Uyghur", -- 2nd IANA name; to match en.wiki article name
-- these ISO 639-1 language-name overrides imported from Module:Language/data/wp_languages
--<begin do-not-edit except to comment out>--
["av"] = "Avar", -- Avaric
["bo"] = "Standard Tibetan", -- Tibetan
["el"] = "Greek", -- Modern Greek
-- ["en-SA"] = "South African English", -- English; no; SA is not South Africa it Saudi Arabia; ZA is South Africa
["ff"] = "Fula", -- Fulah
["ht"] = "Haitian Creole", -- Haitian
["hz"] = "Otjiherero", -- Herero
["ii"] = "Yi", -- Sichuan Yi
["ki"] = "Gikuyu", -- Kikuyu
["kl"] = "Greenlandic", -- Kalaallisut
["ky"] = "Kyrgyz", -- Kirghiz
["lg"] = "Luganda", -- Ganda
["li"] = "Limburgish", -- Limburgan
["mi"] = "Māori", -- Maori
["na"] = "Nauruan", -- Nauru
["nb"] = "Bokmål", -- Norwegian Bokmål
["nd"] = "Northern Ndebele", -- North Ndebele
["nn"] = "Nynorsk", -- Norwegian Nynorsk
["nr"] = "Southern Ndebele", -- South Ndebele
["ny"] = "Chichewa", -- Nyanja
["oj"] = "Ojibwe", -- Ojibwa
["or"] = "Odia", -- Oriya
["pa"] = "Punjabi", -- Panjabi
["rn"] = "Kirundi", -- Rundi
["sl"] = "Slovene", -- Slovenian
["ss"] = "Swazi", -- Swati
["st"] = "Sotho", -- Southern Sotho
["to"] = "Tongan", -- Tonga
--<end do-not-edit except to comment out>--
------------------------------< I S O _ 6 3 9 - 2, - 3, - 5 >----------------------------------------------
["alv"] = "Atlantic–Congo languages", -- to match en.wiki article title (endash)
["arc"] = "Imperial Aramaic (700-300 BCE)", -- Official Aramaic (700-300 BCE), Imperial Aramaic (700-300 BCE); to match en.wiki article title uses ISO639-2 'preferred' name
["art"] = "constructed", -- to match en.wiki article; lowercase for category name
["bhd"] = "Bhadarwahi", -- Bhadrawahi; to match en.wiki article title
["bla"] = "Blackfoot", -- Siksika; to match en.wiki article title
["bua"] = "Buryat", -- Buriat; this is a macro language; these four use wp preferred transliteration;
["bxm"] = "Mongolian Buryat", -- Mongolia Buriat; these three all redirect to Buryat
["bxr"] = "Russian Buryat", -- Russia Buriat;
["bxu"] = "Chinese Buryat", -- China Buriat;
["byr"] = "Yipma", -- Baruya, Yipma
["egy"] = "Ancient Egyptian", -- Egyptian (Ancient); distinguish from contemporary arz: Egyptian Arabic
["ems"] = "Alutiiq", -- Pacific Gulf Yupik; to match en.wiki article title
["esx"] = "Eskimo–Aleut languages", -- to match en.wiki article title (endash)
["frr"] = "North Frisian", -- Northern Frisian
["frs"] = "East Frisian Low Saxon", -- Eastern Frisian
["gsw-fr"] = "Alsatian", -- match MediaWiki
["haa"] = "Hän", -- Han; to match en.wiki article title
["hmx"] = "Hmong–Mien languages", -- to match en.wiki article title (endash)
["ilo"] = "Ilocano", -- Iloko; to match en.wiki article title
["jam"] = "Jamaican Patois", -- Jamaican Creole English
["lij-mc"] = "Monégasque", -- Ligurian as spoken in Monaco
["luo"] = "Dholuo", -- IANA (primary) /ISO 639-3: Luo (Kenya and Tanzania); IANA (secondary): Dholuo
["mhr"] = "Meadow Mari", -- Eastern Mari
["mid"] = "Modern Mandaic", -- Mandaic
['mis'] = "uncoded", -- Uncoded languages; capitalization; special scope, not collective scope;
["mkh"] = "Mon–Khmer languages", -- to match en.wiki article title (endash)
["mla"] = "Tamambo", -- Malo
['mte'] = "Mono-Alu", -- Mono (Solomon Islands)
['mul'] = "multiple", -- Multiple languages; capitalization; special scope, not collective scope;
["nan-tw"] = "Taiwanese Hokkien", -- make room for IANA / 639-3 nan Min Nan Chinese; match en.wiki article title
["new"] = "Newar", -- Newari, Nepal Bhasa; to match en,wiki article title
["ngf"] = "Trans–New Guinea languages", -- to match en.wiki article title (endash)
["nic"] = "Niger–Congo languages", -- Niger-Kordofanian languages; to match en,wiki article title
["nrf"] = "Norman", -- not quite a collective - IANA name: Jèrriais + Guernésiais; categorizes to Norman-language text
["nrf-gg"] = "Guernésiais", -- match MediaWiki
["nrf-je"] = "Jèrriais", -- match MediaWiki
["nzi"] = "Nzema", -- Nzima; to match en.wiki article title
["oma"] = "Omaha–Ponca", -- to match en.wiki article title (endash)
["orv"] = "Old East Slavic", -- Old Russian
["pfl"] = "Palatine German", -- Pfaelzisch; to match en.wiki article
["pie"] = "Piro Pueblo", -- Piro; to match en.wiki article
["pms"] = "Piedmontese", -- Piemontese; to match en.wiki article title
["pnb"] = "Punjabi (Western)", -- Western Panjabi; dab added to override import from ~/wp languages and distinguish pnb from pa in reverse look up tag_from_name()
["rop"] = "Australian Kriol", -- Kriol; en.wiki article is a dab; point to correct en.wiki article
["sdo"] = "Bukar–Sadong", -- Bukar-Sadung Bidayuh; to match en.wiki article title
["stq"] = "Saterland Frisian", -- Saterfriesisch
["und"] = "undetermined", -- capitalization to match existing category
["wrg"] = "Warrongo", -- Warungu
["xal-ru"] = "Kalmyk", -- to match en.wiki article title
["xgf"] = "Tongva", -- ISO 639-3 is Gabrielino-Fernandeño
["yuf"] = "Havasupai–Hualapai", -- Havasupai-Walapai-Yavapai; to match en.wiki article title
["zxx"] = "no linguistic content", -- capitalization
-- these ISO 639-2, -3 language-name overrides imported from Module:Language/data/wp_languages
--<begin do-not-edit except to comment out>--
["ace"] = "Acehnese", -- Achinese
["aec"] = "Sa'idi Arabic", -- Saidi Arabic
["akl"] = "Aklan", -- Aklanon
["alt"] = "Altay", -- Southern Altai
["apm"] = "Mescalero-Chiricahua", -- Mescalero-Chiricahua Apache
["bal"] = "Balochi", -- Baluchi
-- ["bcl"] = "Central Bicolano", -- Central Bikol
["bin"] = "Edo", -- Bini
["bpy"] = "Bishnupriya Manipuri", -- Bishnupriya
["chg"] = "Chagatay", -- Chagatai
["ckb"] = "Sorani Kurdish", -- Central Kurdish
["cnu"] = "Shenwa", -- Chenoua
["coc"] = "Cocopah", -- Cocopa
["diq"] = "Zazaki", -- Dimli
["fit"] = "Meänkieli", -- Tornedalen Finnish
["fkv"] = "Kven", -- Kven Finnish
["frk"] = "Old Frankish", -- Frankish
["gez"] = "Ge'ez", -- Geez
["gju"] = "Gujari", -- Gujari
["gsw"] = "Alemannic German", -- Swiss German
["gul"] = "Gullah", -- Sea Island Creole English
["hak"] = "Hakka", -- Hakka Chinese
["hbo"] = "Biblical Hebrew", -- Ancient Hebrew
["hnd"] = "Hindko", -- Southern Hindko
-- ["ikt"] = "Inuvialuk", -- Inuinnaqtun
["kaa"] = "Karakalpak", -- Kara-Kalpak
["khb"] = "Tai Lü", -- Lü
["kmr"] = "Kurmanji Kurdish", -- Northern Kurdish
["kpo"] = "Kposo", -- Ikposo
["krj"] = "Kinaray-a", -- Kinaray-A
["ktz"] = "Juǀ'hoan", -- Juǀʼhoan
["lez"] = "Lezgian", -- Lezghian
["liv"] = "Livonian", -- Liv
["lng"] = "Lombardic", -- Langobardic
["mia"] = "Miami-Illinois", -- Miami
["miq"] = "Miskito", -- Mískito
["mix"] = "Mixtec", -- Mixtepec Mixtec
["mni"] = "Meitei", -- Manipuri
["mrj"] = "Hill Mari", -- Western Mari
["mww"] = "White Hmong", -- Hmong Daw
["nds-nl"] = "Dutch Low Saxon", -- Low German
-- ["new"] = "Nepal Bhasa", -- Newari
["nso"] = "Northern Sotho", -- Pedi
-- ["nwc"] = "Classical Nepal Bhasa", -- Classical Newari, Classical Nepal Bhasa, Old Newari
["ood"] = "O'odham", -- Tohono O'odham
["otk"] = "Old Turkic", -- Old Turkish
["pal"] = "Middle Persian", -- Pahlavi
["pam"] = "Kapampangan", -- Pampanga
["phr"] = "Potwari", -- Pahari-Potwari
["pka"] = "Jain Prakrit", -- Ardhamāgadhī Prākrit
-- ["pnb"] = "Punjabi", -- Western Panjabi
["psu"] = "Shauraseni", -- Sauraseni Prākrit
["rap"] = "Rapa Nui", -- Rapanui
["rar"] = "Cook Islands Māori", -- Rarotongan
["rmu"] = "Scandoromani", -- Tavringer Romani
["rom"] = "Romani", -- Romany
["rup"] = "Aromanian", -- Macedo-Romanian
["ryu"] = "Okinawan", -- Central Okinawan
["sdc"] = "Sassarese", -- Sassarese Sardinian
["sdn"] = "Gallurese", -- Gallurese Sardinian
["shp"] = "Shipibo", -- Shipibo-Conibo
["src"] = "Logudorese", -- Logudorese Sardinian
["sro"] = "Campidanese", -- Campidanese Sardinian
["tkl"] = "Tokelauan", -- Tokelau
["tvl"] = "Tuvaluan", -- Tuvalu
["tyv"] = "Tuvan", -- Tuvinian
["vls"] = "West Flemish", -- Vlaams
["wep"] = "Westphalian", -- Westphalien
["xal"] = "Oirat", -- Kalmyk
["xcl"] = "Old Armenian", -- Classical Armenian
["yua"] = "Yucatec Maya", -- Yucateco
--<end do-not-edit except to comment out>--
------------------------------< P R I V A T E _ U S E _ T A G S >----------------------------------------------
["akk-x-latbabyl"] = "Late Babylonian",
["akk-x-midassyr"] = "Middle Assyrian Akkadian",
["akk-x-midbabyl"] = "Middle Babylonian Akkadian",
["akk-x-neoassyr"] = "Neo-Assyrian Akkadian",
["akk-x-neobabyl"] = "Neo-Babylonian Akkadian",
["akk-x-old"] = "Old Akkadian",
["akk-x-oldassyr"] = "Old Assyrian Akkadian",
["akk-x-oldbabyl"] = "Old Babylonian Akkadian",
["alg-x-proto"] = "Proto-Algonquian", -- alg in IANA is Algonquian languages
["ca-x-old"] = "Old Catalan",
["cel-x-proto"] = "Proto-Celtic", -- cel in IANA is Celtic languages
["egy-x-demotic"] = "Demotic Egyptian",
["egy-x-late"] = "Late Egyptian",
["egy-x-middle"] = "Middle Egyptian",
["egy-x-old"] = "Old Egyptian",
["gem-x-proto"] = "Proto-Germanic", -- gem in IANA is Germanic languages
["gmw-x-ecg"] = "East Central German",
["grc-x-aeolic"] = "Aeolic Greek", -- these grc-x-... codes are preferred alternates to the non-standard catchall code grc-gre
["grc-x-attic"] = "Attic Greek",
["grc-x-biblical"] = "Biblical Greek",
["grc-x-byzant"] = "Byzantine Greek",
["grc-x-classic"] = "Classical Greek",
["grc-x-doric"] = "Doric Greek",
["grc-x-hellen"] = "Hellenistic Greek",
["grc-x-ionic"] = "Ionic Greek",
["grc-x-koine"] = "Koinē Greek",
["grc-x-medieval"] = "Medieval Greek",
["grc-x-patris"] = "Patristic Greek",
["grk-x-proto"] = "Proto-Greek", -- grk in IANA is Greek languages
["iir-x-proto"] = "Proto-Indo-Iranian", -- iir in IANA is Indo-Iranian Languages
["ine-x-proto"] = "Proto-Indo-European",
["ira-x-proto"] = "Proto-Iranian", -- ira in IANA is Iranian languages
["itc-x-proto"] = "Proto-Italic", -- itc in IANA is Italic languages
["ksh-x-colog"] = "Colognian", -- en.wiki article is Colognian; ksh (Kölsch) redirects there
["la-x-medieval"] = "Medieval Latin",
["la-x-new"] = "New Latin",
["lmo-x-milanese"] = "Milanese", -- lmo in IANA is Lombard; Milanese is a dialect
["mis-x-ripuar"] = "Ripuarian", -- replaces improper use of ksh in wp_languages
["prg-x-old"] = "Old Prussian",
["sem-x-ammonite"] = "Ammonite",
["sem-x-aramaic"] = "Aramaic",
["sem-x-canaan"] = "Canaanite languages",
["sem-x-dumaitic"] = "Dumaitic",
["sem-x-egurage"] = "Eastern Gurage",
["sem-x-hatran"] = "Hatran Aramaic",
["sem-x-oldsoara"] = "Old South Arabian",
["sem-x-palmyren"] = "Palmyrene Aramaic",
["sem-x-proto"] = "Proto-Semitic",
["sem-x-taymanit"] = "Taymanitic",
["sla-x-proto"] = "Proto-Slavic", -- sla in IANA is Slavic languages
["yuf-x-hav"] = "Havasupai", -- IANA name for these three is Havasupai-Walapai-Yavapai
["yuf-x-wal"] = "Walapai",
["yuf-x-yav"] = "Yavapai",
}
--[[--------------------------< A R T I C L E _ L I N K >------------------------------------------------------
for those rare occasions when article titles don't fit with the normal '<language name>-language', this table
maps language code to article title. Use of this table should be avoided and the use of redirects preferred as
that is the long-standing method of handling article names that don't fit with the normal pattern
]]
local article_name = {
['kue'] = "Kuman language (New Guinea)", -- Kuman (Papua New Guinea); to avoid Kuman dab page
["lij"] = "Ligurian (Romance language)", -- Ligurian; see Template_talk:Lang#Ligurian_dab
['mbo'] = "Mbo language (Cameroon)", -- Mbo (Cameroon)
['mnh'] = "Mono language (Congo)", -- Mono (Democratic Republic of Congo); see Template_talk:Lang#Mono_languages
['mnr'] = "Mono language (California)", -- Mono (USA)
['mru'] = "Mono language (Cameroon)", -- Mono (Cameroon)
['qwm'] = "Kuman (Russia)", -- Kuman (Russia); to avoid Kuman dab page
["snq"] = "Sangu language (Gabon)", -- Sangu (Gabon)
["xlg"] = "Ligurian (ancient language)", -- see Template_talk:Lang#Ligurian_dab
["zmw"] = "Mbo language (Congo)", -- Mbo (Democratic Republic of Congo)
}
--[=[-------------------------< R T L _ S C R I P T S >--------------------------------------------------------
ISO 15924 scripts that are written right-to-left. Data in this table taken from [[ISO 15924#List of codes]]
last update to this list: 2017-12-24
]=]
local rtl_scripts = {
'adlm', 'arab', 'aran', 'armi', 'avst', 'cprt', 'egyd', 'egyh', 'hatr', 'hebr',
'hung', 'inds', 'khar', 'lydi', 'mand', 'mani', 'mend', 'merc', 'mero', 'narb',
'nbat', 'nkoo', 'orkh', 'palm', 'phli', 'phlp', 'phlv', 'phnx', 'prti', 'rohg',
'samr', 'sarb', 'sogd', 'sogo', 'syrc', 'syre', 'syrj', 'syrn', 'thaa', 'wole',
};
--[[--------------------------< T R A N S L I T _ T I T L E S >------------------------------------------------
This is a table of tables of transliteration standards and the language codes or language scripts that apply to
those standards. This table is used to create the tool-tip text associated with the transliterated text displayed
by some of the {{lang-??}} templates.
These tables are more-or-less copied directly from {{transl}}. The standard 'NO_STD' is a construct to allow for
the cases when no |std= parameter value is provided.
]]
local translit_title_table = {
['ahl'] = {
['default'] = 'Academy of the Hebrew Language transliteration',
},
['ala'] = {
['default'] = 'American Library Association – Library of Congress transliteration',
},
['ala-lc'] = {
['default'] = 'American Library Association – Library of Congress transliteration',
},
['batr'] = {
['default'] = 'Bikdash Arabic Transliteration Rules',
},
['bgn/pcgn'] = {
['default'] = 'Board on Geographic Names / Permanent Committee on Geographical Names transliteration',
},
['din'] = {
['ar'] = 'DIN 31635 Arabic',
['fa'] = 'DIN 31635 Arabic',
['ku'] = 'DIN 31635 Arabic',
['ps'] = 'DIN 31635 Arabic',
['tg'] = 'DIN 31635 Arabic',
['ug'] = 'DIN 31635 Arabic',
['ur'] = 'DIN 31635 Arabic',
['arab'] = 'DIN 31635 Arabic',
['default'] = 'DIN transliteration',
},
['eae'] = {
['default'] = 'Encyclopaedia Aethiopica transliteration',
},
['hepburn'] = {
['default'] = 'Hepburn transliteration',
},
['hunterian'] = {
['default'] = 'Hunterian transliteration',
},
['iast'] = {
['default'] = 'International Alphabet of Sanskrit transliteration',
},
['iso'] = { -- when a transliteration standard is supplied
['ab'] = 'ISO 9 Cyrillic',
['ba'] = 'ISO 9 Cyrillic',
['be'] = 'ISO 9 Cyrillic',
['bg'] = 'ISO 9 Cyrillic',
['kk'] = 'ISO 9 Cyrillic',
['ky'] = 'ISO 9 Cyrillic',
['mn'] = 'ISO 9 Cyrillic',
['ru'] = 'ISO 9 Cyrillic',
['tg'] = 'ISO 9 Cyrillic',
['uk'] = 'ISO 9 Cyrillic',
['bua'] = 'ISO 9 Cyrillic',
['sah'] = 'ISO 9 Cyrillic',
['tut'] = 'ISO 9 Cyrillic',
['xal'] = 'ISO 9 Cyrillic',
['cyrl'] = 'ISO 9 Cyrillic',
['ar'] = 'ISO 233 Arabic',
['ku'] = 'ISO 233 Arabic',
['ps'] = 'ISO 233 Arabic',
['ug'] = 'ISO 233 Arabic',
['ur'] = 'ISO 233 Arabic',
['arab'] = 'ISO 233 Arabic',
['he'] = 'ISO 259 Hebrew',
['yi'] = 'ISO 259 Hebrew',
['hebr'] = 'ISO 259 Hebrew',
['el'] = 'ISO 843 Greek',
['grc'] = 'ISO 843 Greek',
['ja'] = 'ISO 3602 Japanese',
['hira'] = 'ISO 3602 Japanese',
['hrkt'] = 'ISO 3602 Japanese',
['jpan'] = 'ISO 3602 Japanese',
['kana'] = 'ISO 3602 Japanese',
['zh'] = 'ISO 7098 Chinese',
['chi'] = 'ISO 7098 Chinese',
['pny'] = 'ISO 7098 Chinese',
['zho'] = 'ISO 7098 Chinese',
-- ['han'] = 'ISO 7098 Chinese', -- unicode alias of Hani? doesn't belong here? should be Hani?
['hans'] = 'ISO 7098 Chinese',
['hant'] = 'ISO 7098 Chinese',
['ka'] = 'ISO 9984 Georgian',
['kat'] = 'ISO 9984 Georgian',
['arm'] = 'ISO 9985 Armenian',
['hy'] = 'ISO 9985 Armenian',
['th'] = 'ISO 11940 Thai',
['tha'] = 'ISO 11940 Thai',
['ko'] = 'ISO 11941 Korean',
['kor'] = 'ISO 11941 Korean',
['awa'] = 'ISO 15919 Indic',
['bho'] = 'ISO 15919 Indic',
['bn'] = 'ISO 15919 Indic',
['bra'] = 'ISO 15919 Indic',
['doi'] = 'ISO 15919 Indic',
['dra'] = 'ISO 15919 Indic',
['gon'] = 'ISO 15919 Indic',
['gu'] = 'ISO 15919 Indic',
['hi'] = 'ISO 15919 Indic',
['hno'] = 'ISO 15919 Indic',
['inc'] = 'ISO 15919 Indic',
['kn'] = 'ISO 15919 Indic',
['kok'] = 'ISO 15919 Indic',
['ks'] = 'ISO 15919 Indic',
['mag'] = 'ISO 15919 Indic',
['mai'] = 'ISO 15919 Indic',
['ml'] = 'ISO 15919 Indic',
['mr'] = 'ISO 15919 Indic',
['ne'] = 'ISO 15919 Indic',
['new'] = 'ISO 15919 Indic',
['or'] = 'ISO 15919 Indic',
['pa'] = 'ISO 15919 Indic',
['pnb'] = 'ISO 15919 Indic',
['raj'] = 'ISO 15919 Indic',
['sa'] = 'ISO 15919 Indic',
['sat'] = 'ISO 15919 Indic',
['sd'] = 'ISO 15919 Indic',
['si'] = 'ISO 15919 Indic',
['skr'] = 'ISO 15919 Indic',
['ta'] = 'ISO 15919 Indic',
['tcy'] = 'ISO 15919 Indic',
['te'] = 'ISO 15919 Indic',
['beng'] = 'ISO 15919 Indic',
['brah'] = 'ISO 15919 Indic',
['deva'] = 'ISO 15919 Indic',
['gujr'] = 'ISO 15919 Indic',
['guru'] = 'ISO 15919 Indic',
['knda'] = 'ISO 15919 Indic',
['mlym'] = 'ISO 15919 Indic',
['orya'] = 'ISO 15919 Indic',
['sinh'] = 'ISO 15919 Indic',
['taml'] = 'ISO 15919 Indic',
['telu'] = 'ISO 15919 Indic',
['default'] = 'ISO transliteration',
},
['jyutping'] = {
['default'] = 'Jyutping transliteration',
},
['mlcts'] = {
['default'] = 'Myanmar Language Commission Transcription System',
},
['mr'] = {
['default'] = 'McCune–Reischauer transliteration',
},
['nihon-shiki'] = {
['default'] = 'Nihon-shiki transliteration',
},
['no_std'] = { -- when no transliteration standard is supplied
['akk'] = 'Semitic transliteration',
['sem'] = 'Semitic transliteration',
['phnx'] = 'Semitic transliteration',
['xsux'] = 'Cuneiform transliteration',
},
['pinyin'] = {
['default'] = 'Pinyin transliteration',
},
['rr'] = {
['default'] = 'Revised Romanization of Korean transliteration',
},
['rtgs'] = {
['default'] = 'Royal Thai General System of Transcription',
},
['satts'] = {
['default'] = 'Standard Arabic Technical Transliteration System transliteration',
},
['scientific'] = {
['default'] = 'scientific transliteration',
},
['ukrainian'] = {
['default'] = 'Ukrainian National system of romanization',
},
['ungegn'] = {
['default'] = 'United Nations Group of Experts on Geographical Names transliteration',
},
['wadegile'] = {
['default'] = 'Wade–Giles transliteration',
},
['wehr'] = {
['default'] = 'Hans Wehr transliteration',
},
};
return
{
this_wiki_lang_tag = this_wiki_lang_tag,
this_wiki_lang_dir = lang_obj:getDir(), -- wiki's language direction
article_name = article_name,
lang_name_table = lang_name_table_t,
override = override,
rtl_scripts = rtl_scripts,
special_tags_table = special_tags_table,
translit_title_table = translit_title_table,
};
44981b3b66900e816590946e3e049c421ebecc80
Module:Language/data/iana languages
828
184
374
373
2023-09-14T01:14:50Z
Ilovethehitgameomori
2
1 revision imported
Scribunto
text/plain
-- File-Date: 2023-08-02
local active = {
["aa"] = {"Afar"},
["ab"] = {"Abkhazian"},
["ae"] = {"Avestan"},
["af"] = {"Afrikaans"},
["ak"] = {"Akan"},
["am"] = {"Amharic"},
["an"] = {"Aragonese"},
["ar"] = {"Arabic"},
["as"] = {"Assamese"},
["av"] = {"Avaric"},
["ay"] = {"Aymara"},
["az"] = {"Azerbaijani"},
["ba"] = {"Bashkir"},
["be"] = {"Belarusian"},
["bg"] = {"Bulgarian"},
["bh"] = {"Bihari languages"},
["bi"] = {"Bislama"},
["bm"] = {"Bambara"},
["bn"] = {"Bengali", "Bangla"},
["bo"] = {"Tibetan"},
["br"] = {"Breton"},
["bs"] = {"Bosnian"},
["ca"] = {"Catalan", "Valencian"},
["ce"] = {"Chechen"},
["ch"] = {"Chamorro"},
["co"] = {"Corsican"},
["cr"] = {"Cree"},
["cs"] = {"Czech"},
["cu"] = {"Church Slavic", "Church Slavonic", "Old Bulgarian", "Old Church Slavonic", "Old Slavonic"},
["cv"] = {"Chuvash"},
["cy"] = {"Welsh"},
["da"] = {"Danish"},
["de"] = {"German"},
["dv"] = {"Dhivehi", "Divehi", "Maldivian"},
["dz"] = {"Dzongkha"},
["ee"] = {"Ewe"},
["el"] = {"Modern Greek (1453-)"},
["en"] = {"English"},
["eo"] = {"Esperanto"},
["es"] = {"Spanish", "Castilian"},
["et"] = {"Estonian"},
["eu"] = {"Basque"},
["fa"] = {"Persian"},
["ff"] = {"Fulah"},
["fi"] = {"Finnish"},
["fj"] = {"Fijian"},
["fo"] = {"Faroese"},
["fr"] = {"French"},
["fy"] = {"Western Frisian"},
["ga"] = {"Irish"},
["gd"] = {"Scottish Gaelic", "Gaelic"},
["gl"] = {"Galician"},
["gn"] = {"Guarani"},
["gu"] = {"Gujarati"},
["gv"] = {"Manx"},
["ha"] = {"Hausa"},
["he"] = {"Hebrew"},
["hi"] = {"Hindi"},
["ho"] = {"Hiri Motu"},
["hr"] = {"Croatian"},
["ht"] = {"Haitian", "Haitian Creole"},
["hu"] = {"Hungarian"},
["hy"] = {"Armenian"},
["hz"] = {"Herero"},
["ia"] = {"Interlingua (International Auxiliary Language Association)"},
["id"] = {"Indonesian"},
["ie"] = {"Interlingue", "Occidental"},
["ig"] = {"Igbo"},
["ii"] = {"Sichuan Yi", "Nuosu"},
["ik"] = {"Inupiaq"},
["io"] = {"Ido"},
["is"] = {"Icelandic"},
["it"] = {"Italian"},
["iu"] = {"Inuktitut"},
["ja"] = {"Japanese"},
["jv"] = {"Javanese"},
["ka"] = {"Georgian"},
["kg"] = {"Kongo"},
["ki"] = {"Kikuyu", "Gikuyu"},
["kj"] = {"Kuanyama", "Kwanyama"},
["kk"] = {"Kazakh"},
["kl"] = {"Kalaallisut", "Greenlandic"},
["km"] = {"Khmer", "Central Khmer"},
["kn"] = {"Kannada"},
["ko"] = {"Korean"},
["kr"] = {"Kanuri"},
["ks"] = {"Kashmiri"},
["ku"] = {"Kurdish"},
["kv"] = {"Komi"},
["kw"] = {"Cornish"},
["ky"] = {"Kirghiz", "Kyrgyz"},
["la"] = {"Latin"},
["lb"] = {"Luxembourgish", "Letzeburgesch"},
["lg"] = {"Ganda", "Luganda"},
["li"] = {"Limburgan", "Limburger", "Limburgish"},
["ln"] = {"Lingala"},
["lo"] = {"Lao"},
["lt"] = {"Lithuanian"},
["lu"] = {"Luba-Katanga"},
["lv"] = {"Latvian"},
["mg"] = {"Malagasy"},
["mh"] = {"Marshallese"},
["mi"] = {"Maori"},
["mk"] = {"Macedonian"},
["ml"] = {"Malayalam"},
["mn"] = {"Mongolian"},
["mr"] = {"Marathi"},
["ms"] = {"Malay (macrolanguage)"},
["mt"] = {"Maltese"},
["my"] = {"Burmese"},
["na"] = {"Nauru"},
["nb"] = {"Norwegian Bokmål"},
["nd"] = {"North Ndebele"},
["ne"] = {"Nepali (macrolanguage)"},
["ng"] = {"Ndonga"},
["nl"] = {"Dutch", "Flemish"},
["nn"] = {"Norwegian Nynorsk"},
["no"] = {"Norwegian"},
["nr"] = {"South Ndebele"},
["nv"] = {"Navajo", "Navaho"},
["ny"] = {"Nyanja", "Chewa", "Chichewa"},
["oc"] = {"Occitan (post 1500)"},
["oj"] = {"Ojibwa"},
["om"] = {"Oromo"},
["or"] = {"Oriya (macrolanguage)", "Odia (macrolanguage)"},
["os"] = {"Ossetian", "Ossetic"},
["pa"] = {"Panjabi", "Punjabi"},
["pi"] = {"Pali"},
["pl"] = {"Polish"},
["ps"] = {"Pushto", "Pashto"},
["pt"] = {"Portuguese"},
["qu"] = {"Quechua"},
["rm"] = {"Romansh"},
["rn"] = {"Rundi"},
["ro"] = {"Romanian", "Moldavian", "Moldovan"},
["ru"] = {"Russian"},
["rw"] = {"Kinyarwanda"},
["sa"] = {"Sanskrit"},
["sc"] = {"Sardinian"},
["sd"] = {"Sindhi"},
["se"] = {"Northern Sami"},
["sg"] = {"Sango"},
["sh"] = {"Serbo-Croatian"},
["si"] = {"Sinhala", "Sinhalese"},
["sk"] = {"Slovak"},
["sl"] = {"Slovenian"},
["sm"] = {"Samoan"},
["sn"] = {"Shona"},
["so"] = {"Somali"},
["sq"] = {"Albanian"},
["sr"] = {"Serbian"},
["ss"] = {"Swati"},
["st"] = {"Southern Sotho"},
["su"] = {"Sundanese"},
["sv"] = {"Swedish"},
["sw"] = {"Swahili (macrolanguage)"},
["ta"] = {"Tamil"},
["te"] = {"Telugu"},
["tg"] = {"Tajik"},
["th"] = {"Thai"},
["ti"] = {"Tigrinya"},
["tk"] = {"Turkmen"},
["tl"] = {"Tagalog"},
["tn"] = {"Tswana"},
["to"] = {"Tonga (Tonga Islands)"},
["tr"] = {"Turkish"},
["ts"] = {"Tsonga"},
["tt"] = {"Tatar"},
["tw"] = {"Twi"},
["ty"] = {"Tahitian"},
["ug"] = {"Uighur", "Uyghur"},
["uk"] = {"Ukrainian"},
["ur"] = {"Urdu"},
["uz"] = {"Uzbek"},
["ve"] = {"Venda"},
["vi"] = {"Vietnamese"},
["vo"] = {"Volapük"},
["wa"] = {"Walloon"},
["wo"] = {"Wolof"},
["xh"] = {"Xhosa"},
["yi"] = {"Yiddish"},
["yo"] = {"Yoruba"},
["za"] = {"Zhuang", "Chuang"},
["zh"] = {"Chinese"},
["zu"] = {"Zulu"},
["aaa"] = {"Ghotuo"},
["aab"] = {"Alumu-Tesu"},
["aac"] = {"Ari"},
["aad"] = {"Amal"},
["aae"] = {"Arbëreshë Albanian"},
["aaf"] = {"Aranadan"},
["aag"] = {"Ambrak"},
["aah"] = {"Abu' Arapesh"},
["aai"] = {"Arifama-Miniafia"},
["aak"] = {"Ankave"},
["aal"] = {"Afade"},
["aan"] = {"Anambé"},
["aao"] = {"Algerian Saharan Arabic"},
["aap"] = {"Pará Arára"},
["aaq"] = {"Eastern Abnaki"},
["aas"] = {"Aasáx"},
["aat"] = {"Arvanitika Albanian"},
["aau"] = {"Abau"},
["aav"] = {"Austro-Asiatic languages"},
["aaw"] = {"Solong"},
["aax"] = {"Mandobo Atas"},
["aaz"] = {"Amarasi"},
["aba"] = {"Abé"},
["abb"] = {"Bankon"},
["abc"] = {"Ambala Ayta"},
["abd"] = {"Manide"},
["abe"] = {"Western Abnaki"},
["abf"] = {"Abai Sungai"},
["abg"] = {"Abaga"},
["abh"] = {"Tajiki Arabic"},
["abi"] = {"Abidji"},
["abj"] = {"Aka-Bea"},
["abl"] = {"Lampung Nyo"},
["abm"] = {"Abanyom"},
["abn"] = {"Abua"},
["abo"] = {"Abon"},
["abp"] = {"Abellen Ayta"},
["abq"] = {"Abaza"},
["abr"] = {"Abron"},
["abs"] = {"Ambonese Malay"},
["abt"] = {"Ambulas"},
["abu"] = {"Abure"},
["abv"] = {"Baharna Arabic"},
["abw"] = {"Pal"},
["abx"] = {"Inabaknon"},
["aby"] = {"Aneme Wake"},
["abz"] = {"Abui"},
["aca"] = {"Achagua"},
["acb"] = {"Áncá"},
["acd"] = {"Gikyode"},
["ace"] = {"Achinese"},
["acf"] = {"Saint Lucian Creole French"},
["ach"] = {"Acoli"},
["aci"] = {"Aka-Cari"},
["ack"] = {"Aka-Kora"},
["acl"] = {"Akar-Bale"},
["acm"] = {"Mesopotamian Arabic"},
["acn"] = {"Achang"},
["acp"] = {"Eastern Acipa"},
["acq"] = {"Ta'izzi-Adeni Arabic"},
["acr"] = {"Achi"},
["acs"] = {"Acroá"},
["act"] = {"Achterhoeks"},
["acu"] = {"Achuar-Shiwiar"},
["acv"] = {"Achumawi"},
["acw"] = {"Hijazi Arabic"},
["acx"] = {"Omani Arabic"},
["acy"] = {"Cypriot Arabic"},
["acz"] = {"Acheron"},
["ada"] = {"Adangme"},
["adb"] = {"Atauran"},
["add"] = {"Lidzonka", "Dzodinka"},
["ade"] = {"Adele"},
["adf"] = {"Dhofari Arabic"},
["adg"] = {"Andegerebinha"},
["adh"] = {"Adhola"},
["adi"] = {"Adi"},
["adj"] = {"Adioukrou"},
["adl"] = {"Galo"},
["adn"] = {"Adang"},
["ado"] = {"Abu"},
["adq"] = {"Adangbe"},
["adr"] = {"Adonara"},
["ads"] = {"Adamorobe Sign Language"},
["adt"] = {"Adnyamathanha"},
["adu"] = {"Aduge"},
["adw"] = {"Amundava"},
["adx"] = {"Amdo Tibetan"},
["ady"] = {"Adyghe", "Adygei"},
["adz"] = {"Adzera"},
["aea"] = {"Areba"},
["aeb"] = {"Tunisian Arabic"},
["aec"] = {"Saidi Arabic"},
["aed"] = {"Argentine Sign Language"},
["aee"] = {"Northeast Pashai", "Northeast Pashayi"},
["aek"] = {"Haeke"},
["ael"] = {"Ambele"},
["aem"] = {"Arem"},
["aen"] = {"Armenian Sign Language"},
["aeq"] = {"Aer"},
["aer"] = {"Eastern Arrernte"},
["aes"] = {"Alsea"},
["aeu"] = {"Akeu"},
["aew"] = {"Ambakich"},
["aey"] = {"Amele"},
["aez"] = {"Aeka"},
["afa"] = {"Afro-Asiatic languages"},
["afb"] = {"Gulf Arabic"},
["afd"] = {"Andai"},
["afe"] = {"Putukwam"},
["afg"] = {"Afghan Sign Language"},
["afh"] = {"Afrihili"},
["afi"] = {"Akrukay", "Chini"},
["afk"] = {"Nanubae"},
["afn"] = {"Defaka"},
["afo"] = {"Eloyi"},
["afp"] = {"Tapei"},
["afs"] = {"Afro-Seminole Creole"},
["aft"] = {"Afitti"},
["afu"] = {"Awutu"},
["afz"] = {"Obokuitai"},
["aga"] = {"Aguano"},
["agb"] = {"Legbo"},
["agc"] = {"Agatu"},
["agd"] = {"Agarabi"},
["age"] = {"Angal"},
["agf"] = {"Arguni"},
["agg"] = {"Angor"},
["agh"] = {"Ngelima"},
["agi"] = {"Agariya"},
["agj"] = {"Argobba"},
["agk"] = {"Isarog Agta"},
["agl"] = {"Fembe"},
["agm"] = {"Angaataha"},
["agn"] = {"Agutaynen"},
["ago"] = {"Tainae"},
["agq"] = {"Aghem"},
["agr"] = {"Aguaruna"},
["ags"] = {"Esimbi"},
["agt"] = {"Central Cagayan Agta"},
["agu"] = {"Aguacateco"},
["agv"] = {"Remontado Dumagat"},
["agw"] = {"Kahua"},
["agx"] = {"Aghul"},
["agy"] = {"Southern Alta"},
["agz"] = {"Mt. Iriga Agta"},
["aha"] = {"Ahanta"},
["ahb"] = {"Axamb"},
["ahg"] = {"Qimant"},
["ahh"] = {"Aghu"},
["ahi"] = {"Tiagbamrin Aizi"},
["ahk"] = {"Akha"},
["ahl"] = {"Igo"},
["ahm"] = {"Mobumrin Aizi"},
["ahn"] = {"Àhàn"},
["aho"] = {"Ahom"},
["ahp"] = {"Aproumu Aizi"},
["ahr"] = {"Ahirani"},
["ahs"] = {"Ashe"},
["aht"] = {"Ahtena"},
["aia"] = {"Arosi"},
["aib"] = {"Ainu (China)"},
["aic"] = {"Ainbai"},
["aid"] = {"Alngith"},
["aie"] = {"Amara"},
["aif"] = {"Agi"},
["aig"] = {"Antigua and Barbuda Creole English"},
["aih"] = {"Ai-Cham"},
["aii"] = {"Assyrian Neo-Aramaic"},
["aij"] = {"Lishanid Noshan"},
["aik"] = {"Ake"},
["ail"] = {"Aimele"},
["aim"] = {"Aimol"},
["ain"] = {"Ainu (Japan)"},
["aio"] = {"Aiton"},
["aip"] = {"Burumakok"},
["aiq"] = {"Aimaq"},
["air"] = {"Airoran"},
["ait"] = {"Arikem"},
["aiw"] = {"Aari"},
["aix"] = {"Aighon"},
["aiy"] = {"Ali"},
["aja"] = {"Aja (South Sudan)"},
["ajg"] = {"Aja (Benin)"},
["aji"] = {"Ajië"},
["ajn"] = {"Andajin"},
["ajs"] = {"Algerian Jewish Sign Language"},
["aju"] = {"Judeo-Moroccan Arabic"},
["ajw"] = {"Ajawa"},
["ajz"] = {"Amri Karbi"},
["akb"] = {"Batak Angkola"},
["akc"] = {"Mpur"},
["akd"] = {"Ukpet-Ehom"},
["ake"] = {"Akawaio"},
["akf"] = {"Akpa"},
["akg"] = {"Anakalangu"},
["akh"] = {"Angal Heneng"},
["aki"] = {"Aiome"},
["akj"] = {"Aka-Jeru"},
["akk"] = {"Akkadian"},
["akl"] = {"Aklanon"},
["akm"] = {"Aka-Bo"},
["ako"] = {"Akurio"},
["akp"] = {"Siwu"},
["akq"] = {"Ak"},
["akr"] = {"Araki"},
["aks"] = {"Akaselem"},
["akt"] = {"Akolet"},
["aku"] = {"Akum"},
["akv"] = {"Akhvakh"},
["akw"] = {"Akwa"},
["akx"] = {"Aka-Kede"},
["aky"] = {"Aka-Kol"},
["akz"] = {"Alabama"},
["ala"] = {"Alago"},
["alc"] = {"Qawasqar"},
["ald"] = {"Alladian"},
["ale"] = {"Aleut"},
["alf"] = {"Alege"},
["alg"] = {"Algonquian languages"},
["alh"] = {"Alawa"},
["ali"] = {"Amaimon"},
["alj"] = {"Alangan"},
["alk"] = {"Alak"},
["all"] = {"Allar"},
["alm"] = {"Amblong"},
["aln"] = {"Gheg Albanian"},
["alo"] = {"Larike-Wakasihu"},
["alp"] = {"Alune"},
["alq"] = {"Algonquin"},
["alr"] = {"Alutor"},
["als"] = {"Tosk Albanian"},
["alt"] = {"Southern Altai"},
["alu"] = {"'Are'are"},
["alv"] = {"Atlantic-Congo languages"},
["alw"] = {"Alaba-K’abeena", "Wanbasana"},
["alx"] = {"Amol"},
["aly"] = {"Alyawarr"},
["alz"] = {"Alur"},
["ama"] = {"Amanayé"},
["amb"] = {"Ambo"},
["amc"] = {"Amahuaca"},
["ame"] = {"Yanesha'"},
["amf"] = {"Hamer-Banna"},
["amg"] = {"Amurdak"},
["ami"] = {"Amis"},
["amj"] = {"Amdang"},
["amk"] = {"Ambai"},
["aml"] = {"War-Jaintia"},
["amm"] = {"Ama (Papua New Guinea)"},
["amn"] = {"Amanab"},
["amo"] = {"Amo"},
["amp"] = {"Alamblak"},
["amq"] = {"Amahai"},
["amr"] = {"Amarakaeri"},
["ams"] = {"Southern Amami-Oshima"},
["amt"] = {"Amto"},
["amu"] = {"Guerrero Amuzgo"},
["amv"] = {"Ambelau"},
["amw"] = {"Western Neo-Aramaic"},
["amx"] = {"Anmatyerre"},
["amy"] = {"Ami"},
["amz"] = {"Atampaya"},
["ana"] = {"Andaqui"},
["anb"] = {"Andoa"},
["anc"] = {"Ngas"},
["and"] = {"Ansus"},
["ane"] = {"Xârâcùù"},
["anf"] = {"Animere"},
["ang"] = {"Old English (ca. 450-1100)"},
["anh"] = {"Nend"},
["ani"] = {"Andi"},
["anj"] = {"Anor"},
["ank"] = {"Goemai"},
["anl"] = {"Anu-Hkongso Chin"},
["anm"] = {"Anal"},
["ann"] = {"Obolo"},
["ano"] = {"Andoque"},
["anp"] = {"Angika"},
["anq"] = {"Jarawa (India)"},
["anr"] = {"Andh"},
["ans"] = {"Anserma"},
["ant"] = {"Antakarinya", "Antikarinya"},
["anu"] = {"Anuak"},
["anv"] = {"Denya"},
["anw"] = {"Anaang"},
["anx"] = {"Andra-Hus"},
["any"] = {"Anyin"},
["anz"] = {"Anem"},
["aoa"] = {"Angolar"},
["aob"] = {"Abom"},
["aoc"] = {"Pemon"},
["aod"] = {"Andarum"},
["aoe"] = {"Angal Enen"},
["aof"] = {"Bragat"},
["aog"] = {"Angoram"},
["aoi"] = {"Anindilyakwa"},
["aoj"] = {"Mufian"},
["aok"] = {"Arhö"},
["aol"] = {"Alor"},
["aom"] = {"Ömie"},
["aon"] = {"Bumbita Arapesh"},
["aor"] = {"Aore"},
["aos"] = {"Taikat"},
["aot"] = {"Atong (India)", "A'tong"},
["aou"] = {"A'ou"},
["aox"] = {"Atorada"},
["aoz"] = {"Uab Meto"},
["apa"] = {"Apache languages"},
["apb"] = {"Sa'a"},
["apc"] = {"Levantine Arabic"},
["apd"] = {"Sudanese Arabic"},
["ape"] = {"Bukiyip"},
["apf"] = {"Pahanan Agta"},
["apg"] = {"Ampanang"},
["aph"] = {"Athpariya"},
["api"] = {"Apiaká"},
["apj"] = {"Jicarilla Apache"},
["apk"] = {"Kiowa Apache"},
["apl"] = {"Lipan Apache"},
["apm"] = {"Mescalero-Chiricahua Apache"},
["apn"] = {"Apinayé"},
["apo"] = {"Ambul"},
["app"] = {"Apma"},
["apq"] = {"A-Pucikwar"},
["apr"] = {"Arop-Lokep"},
["aps"] = {"Arop-Sissano"},
["apt"] = {"Apatani"},
["apu"] = {"Apurinã"},
["apv"] = {"Alapmunte"},
["apw"] = {"Western Apache"},
["apx"] = {"Aputai"},
["apy"] = {"Apalaí"},
["apz"] = {"Safeyoka"},
["aqa"] = {"Alacalufan languages"},
["aqc"] = {"Archi"},
["aqd"] = {"Ampari Dogon"},
["aqg"] = {"Arigidi"},
["aqk"] = {"Aninka"},
["aql"] = {"Algic languages"},
["aqm"] = {"Atohwaim"},
["aqn"] = {"Northern Alta"},
["aqp"] = {"Atakapa"},
["aqr"] = {"Arhâ"},
["aqt"] = {"Angaité"},
["aqz"] = {"Akuntsu"},
["arb"] = {"Standard Arabic"},
["arc"] = {"Official Aramaic (700-300 BCE)", "Imperial Aramaic (700-300 BCE)"},
["ard"] = {"Arabana"},
["are"] = {"Western Arrarnta"},
["arh"] = {"Arhuaco"},
["ari"] = {"Arikara"},
["arj"] = {"Arapaso"},
["ark"] = {"Arikapú"},
["arl"] = {"Arabela"},
["arn"] = {"Mapudungun", "Mapuche"},
["aro"] = {"Araona"},
["arp"] = {"Arapaho"},
["arq"] = {"Algerian Arabic"},
["arr"] = {"Karo (Brazil)"},
["ars"] = {"Najdi Arabic"},
["art"] = {"Artificial languages"},
["aru"] = {"Aruá (Amazonas State)", "Arawá"},
["arv"] = {"Arbore"},
["arw"] = {"Arawak"},
["arx"] = {"Aruá (Rodonia State)"},
["ary"] = {"Moroccan Arabic"},
["arz"] = {"Egyptian Arabic"},
["asa"] = {"Asu (Tanzania)"},
["asb"] = {"Assiniboine"},
["asc"] = {"Casuarina Coast Asmat"},
["ase"] = {"American Sign Language"},
["asf"] = {"Auslan", "Australian Sign Language"},
["asg"] = {"Cishingini"},
["ash"] = {"Abishira"},
["asi"] = {"Buruwai"},
["asj"] = {"Sari"},
["ask"] = {"Ashkun"},
["asl"] = {"Asilulu"},
["asn"] = {"Xingú Asuriní"},
["aso"] = {"Dano"},
["asp"] = {"Algerian Sign Language"},
["asq"] = {"Austrian Sign Language"},
["asr"] = {"Asuri"},
["ass"] = {"Ipulo"},
["ast"] = {"Asturian", "Asturleonese", "Bable", "Leonese"},
["asu"] = {"Tocantins Asurini"},
["asv"] = {"Asoa"},
["asw"] = {"Australian Aborigines Sign Language"},
["asx"] = {"Muratayak"},
["asy"] = {"Yaosakor Asmat"},
["asz"] = {"As"},
["ata"] = {"Pele-Ata"},
["atb"] = {"Zaiwa"},
["atc"] = {"Atsahuaca"},
["atd"] = {"Ata Manobo"},
["ate"] = {"Atemble"},
["atg"] = {"Ivbie North-Okpela-Arhe"},
["ath"] = {"Athapascan languages"},
["ati"] = {"Attié"},
["atj"] = {"Atikamekw"},
["atk"] = {"Ati"},
["atl"] = {"Mt. Iraya Agta"},
["atm"] = {"Ata"},
["atn"] = {"Ashtiani"},
["ato"] = {"Atong (Cameroon)"},
["atp"] = {"Pudtol Atta"},
["atq"] = {"Aralle-Tabulahan"},
["atr"] = {"Waimiri-Atroari"},
["ats"] = {"Gros Ventre"},
["att"] = {"Pamplona Atta"},
["atu"] = {"Reel"},
["atv"] = {"Northern Altai"},
["atw"] = {"Atsugewi"},
["atx"] = {"Arutani"},
["aty"] = {"Aneityum"},
["atz"] = {"Arta"},
["aua"] = {"Asumboa"},
["aub"] = {"Alugu"},
["auc"] = {"Waorani"},
["aud"] = {"Anuta"},
["auf"] = {"Arauan languages"},
["aug"] = {"Aguna"},
["auh"] = {"Aushi"},
["aui"] = {"Anuki"},
["auj"] = {"Awjilah"},
["auk"] = {"Heyo"},
["aul"] = {"Aulua"},
["aum"] = {"Asu (Nigeria)"},
["aun"] = {"Molmo One"},
["auo"] = {"Auyokawa"},
["aup"] = {"Makayam"},
["auq"] = {"Anus", "Korur"},
["aur"] = {"Aruek"},
["aus"] = {"Australian languages"},
["aut"] = {"Austral"},
["auu"] = {"Auye"},
["auw"] = {"Awyi"},
["aux"] = {"Aurá"},
["auy"] = {"Awiyaana"},
["auz"] = {"Uzbeki Arabic"},
["avb"] = {"Avau"},
["avd"] = {"Alviri-Vidari"},
["avi"] = {"Avikam"},
["avk"] = {"Kotava"},
["avl"] = {"Eastern Egyptian Bedawi Arabic"},
["avm"] = {"Angkamuthi"},
["avn"] = {"Avatime"},
["avo"] = {"Agavotaguerra"},
["avs"] = {"Aushiri"},
["avt"] = {"Au"},
["avu"] = {"Avokaya"},
["avv"] = {"Avá-Canoeiro"},
["awa"] = {"Awadhi"},
["awb"] = {"Awa (Papua New Guinea)"},
["awc"] = {"Cicipu"},
["awd"] = {"Arawakan languages"},
["awe"] = {"Awetí"},
["awg"] = {"Anguthimri"},
["awh"] = {"Awbono"},
["awi"] = {"Aekyom"},
["awk"] = {"Awabakal"},
["awm"] = {"Arawum"},
["awn"] = {"Awngi"},
["awo"] = {"Awak"},
["awr"] = {"Awera"},
["aws"] = {"South Awyu"},
["awt"] = {"Araweté"},
["awu"] = {"Central Awyu"},
["awv"] = {"Jair Awyu"},
["aww"] = {"Awun"},
["awx"] = {"Awara"},
["awy"] = {"Edera Awyu"},
["axb"] = {"Abipon"},
["axe"] = {"Ayerrerenge"},
["axg"] = {"Mato Grosso Arára"},
["axk"] = {"Yaka (Central African Republic)"},
["axl"] = {"Lower Southern Aranda"},
["axm"] = {"Middle Armenian"},
["axx"] = {"Xârâgurè"},
["aya"] = {"Awar"},
["ayb"] = {"Ayizo Gbe"},
["ayc"] = {"Southern Aymara"},
["ayd"] = {"Ayabadhu"},
["aye"] = {"Ayere"},
["ayg"] = {"Ginyanga"},
["ayh"] = {"Hadrami Arabic"},
["ayi"] = {"Leyigha"},
["ayk"] = {"Akuku"},
["ayl"] = {"Libyan Arabic"},
["ayn"] = {"Sanaani Arabic"},
["ayo"] = {"Ayoreo"},
["ayp"] = {"North Mesopotamian Arabic"},
["ayq"] = {"Ayi (Papua New Guinea)"},
["ayr"] = {"Central Aymara"},
["ays"] = {"Sorsogon Ayta"},
["ayt"] = {"Magbukun Ayta"},
["ayu"] = {"Ayu"},
["ayz"] = {"Mai Brat"},
["aza"] = {"Azha"},
["azb"] = {"South Azerbaijani"},
["azc"] = {"Uto-Aztecan languages"},
["azd"] = {"Eastern Durango Nahuatl"},
["azg"] = {"San Pedro Amuzgos Amuzgo"},
["azj"] = {"North Azerbaijani"},
["azm"] = {"Ipalapa Amuzgo"},
["azn"] = {"Western Durango Nahuatl"},
["azo"] = {"Awing"},
["azt"] = {"Faire Atta"},
["azz"] = {"Highland Puebla Nahuatl"},
["baa"] = {"Babatana"},
["bab"] = {"Bainouk-Gunyuño"},
["bac"] = {"Badui"},
["bad"] = {"Banda languages"},
["bae"] = {"Baré"},
["baf"] = {"Nubaca"},
["bag"] = {"Tuki"},
["bah"] = {"Bahamas Creole English"},
["bai"] = {"Bamileke languages"},
["baj"] = {"Barakai"},
["bal"] = {"Baluchi"},
["ban"] = {"Balinese"},
["bao"] = {"Waimaha"},
["bap"] = {"Bantawa"},
["bar"] = {"Bavarian"},
["bas"] = {"Basa (Cameroon)"},
["bat"] = {"Baltic languages"},
["bau"] = {"Bada (Nigeria)"},
["bav"] = {"Vengo"},
["baw"] = {"Bambili-Bambui"},
["bax"] = {"Bamun"},
["bay"] = {"Batuley"},
["bba"] = {"Baatonum"},
["bbb"] = {"Barai"},
["bbc"] = {"Batak Toba"},
["bbd"] = {"Bau"},
["bbe"] = {"Bangba"},
["bbf"] = {"Baibai"},
["bbg"] = {"Barama"},
["bbh"] = {"Bugan"},
["bbi"] = {"Barombi"},
["bbj"] = {"Ghomálá'"},
["bbk"] = {"Babanki"},
["bbl"] = {"Bats"},
["bbm"] = {"Babango"},
["bbn"] = {"Uneapa"},
["bbo"] = {"Northern Bobo Madaré", "Konabéré"},
["bbp"] = {"West Central Banda"},
["bbq"] = {"Bamali"},
["bbr"] = {"Girawa"},
["bbs"] = {"Bakpinka"},
["bbt"] = {"Mburku"},
["bbu"] = {"Kulung (Nigeria)"},
["bbv"] = {"Karnai"},
["bbw"] = {"Baba"},
["bbx"] = {"Bubia"},
["bby"] = {"Befang"},
["bca"] = {"Central Bai"},
["bcb"] = {"Bainouk-Samik"},
["bcc"] = {"Southern Balochi"},
["bcd"] = {"North Babar"},
["bce"] = {"Bamenyam"},
["bcf"] = {"Bamu"},
["bcg"] = {"Baga Pokur"},
["bch"] = {"Bariai"},
["bci"] = {"Baoulé"},
["bcj"] = {"Bardi"},
["bck"] = {"Bunuba"},
["bcl"] = {"Central Bikol"},
["bcm"] = {"Bannoni"},
["bcn"] = {"Bali (Nigeria)"},
["bco"] = {"Kaluli"},
["bcp"] = {"Bali (Democratic Republic of Congo)"},
["bcq"] = {"Bench"},
["bcr"] = {"Babine"},
["bcs"] = {"Kohumono"},
["bct"] = {"Bendi"},
["bcu"] = {"Awad Bing"},
["bcv"] = {"Shoo-Minda-Nye"},
["bcw"] = {"Bana"},
["bcy"] = {"Bacama"},
["bcz"] = {"Bainouk-Gunyaamolo"},
["bda"] = {"Bayot"},
["bdb"] = {"Basap"},
["bdc"] = {"Emberá-Baudó"},
["bdd"] = {"Bunama"},
["bde"] = {"Bade"},
["bdf"] = {"Biage"},
["bdg"] = {"Bonggi"},
["bdh"] = {"Baka (South Sudan)"},
["bdi"] = {"Burun"},
["bdj"] = {"Bai (South Sudan)", "Bai"},
["bdk"] = {"Budukh"},
["bdl"] = {"Indonesian Bajau"},
["bdm"] = {"Buduma"},
["bdn"] = {"Baldemu"},
["bdo"] = {"Morom"},
["bdp"] = {"Bende"},
["bdq"] = {"Bahnar"},
["bdr"] = {"West Coast Bajau"},
["bds"] = {"Burunge"},
["bdt"] = {"Bokoto"},
["bdu"] = {"Oroko"},
["bdv"] = {"Bodo Parja"},
["bdw"] = {"Baham"},
["bdx"] = {"Budong-Budong"},
["bdy"] = {"Bandjalang"},
["bdz"] = {"Badeshi"},
["bea"] = {"Beaver"},
["beb"] = {"Bebele"},
["bec"] = {"Iceve-Maci"},
["bed"] = {"Bedoanas"},
["bee"] = {"Byangsi"},
["bef"] = {"Benabena"},
["beg"] = {"Belait"},
["beh"] = {"Biali"},
["bei"] = {"Bekati'"},
["bej"] = {"Beja", "Bedawiyet"},
["bek"] = {"Bebeli"},
["bem"] = {"Bemba (Zambia)"},
["beo"] = {"Beami"},
["bep"] = {"Besoa"},
["beq"] = {"Beembe"},
["ber"] = {"Berber languages"},
["bes"] = {"Besme"},
["bet"] = {"Guiberoua Béte"},
["beu"] = {"Blagar"},
["bev"] = {"Daloa Bété"},
["bew"] = {"Betawi"},
["bex"] = {"Jur Modo"},
["bey"] = {"Beli (Papua New Guinea)"},
["bez"] = {"Bena (Tanzania)"},
["bfa"] = {"Bari"},
["bfb"] = {"Pauri Bareli"},
["bfc"] = {"Panyi Bai", "Northern Bai"},
["bfd"] = {"Bafut"},
["bfe"] = {"Betaf", "Tena"},
["bff"] = {"Bofi"},
["bfg"] = {"Busang Kayan"},
["bfh"] = {"Blafe"},
["bfi"] = {"British Sign Language"},
["bfj"] = {"Bafanji"},
["bfk"] = {"Ban Khor Sign Language"},
["bfl"] = {"Banda-Ndélé"},
["bfm"] = {"Mmen"},
["bfn"] = {"Bunak"},
["bfo"] = {"Malba Birifor"},
["bfp"] = {"Beba"},
["bfq"] = {"Badaga"},
["bfr"] = {"Bazigar"},
["bfs"] = {"Southern Bai"},
["bft"] = {"Balti"},
["bfu"] = {"Gahri"},
["bfw"] = {"Bondo"},
["bfx"] = {"Bantayanon"},
["bfy"] = {"Bagheli"},
["bfz"] = {"Mahasu Pahari"},
["bga"] = {"Gwamhi-Wuri"},
["bgb"] = {"Bobongko"},
["bgc"] = {"Haryanvi"},
["bgd"] = {"Rathwi Bareli"},
["bge"] = {"Bauria"},
["bgf"] = {"Bangandu"},
["bgg"] = {"Bugun"},
["bgi"] = {"Giangan"},
["bgj"] = {"Bangolan"},
["bgk"] = {"Bit", "Buxinhua"},
["bgl"] = {"Bo (Laos)"},
["bgn"] = {"Western Balochi"},
["bgo"] = {"Baga Koga"},
["bgp"] = {"Eastern Balochi"},
["bgq"] = {"Bagri"},
["bgr"] = {"Bawm Chin"},
["bgs"] = {"Tagabawa"},
["bgt"] = {"Bughotu"},
["bgu"] = {"Mbongno"},
["bgv"] = {"Warkay-Bipim"},
["bgw"] = {"Bhatri"},
["bgx"] = {"Balkan Gagauz Turkish"},
["bgy"] = {"Benggoi"},
["bgz"] = {"Banggai"},
["bha"] = {"Bharia"},
["bhb"] = {"Bhili"},
["bhc"] = {"Biga"},
["bhd"] = {"Bhadrawahi"},
["bhe"] = {"Bhaya"},
["bhf"] = {"Odiai"},
["bhg"] = {"Binandere"},
["bhh"] = {"Bukharic"},
["bhi"] = {"Bhilali"},
["bhj"] = {"Bahing"},
["bhl"] = {"Bimin"},
["bhm"] = {"Bathari"},
["bhn"] = {"Bohtan Neo-Aramaic"},
["bho"] = {"Bhojpuri"},
["bhp"] = {"Bima"},
["bhq"] = {"Tukang Besi South"},
["bhr"] = {"Bara Malagasy"},
["bhs"] = {"Buwal"},
["bht"] = {"Bhattiyali"},
["bhu"] = {"Bhunjia"},
["bhv"] = {"Bahau"},
["bhw"] = {"Biak"},
["bhx"] = {"Bhalay"},
["bhy"] = {"Bhele"},
["bhz"] = {"Bada (Indonesia)"},
["bia"] = {"Badimaya"},
["bib"] = {"Bissa", "Bisa"},
["bid"] = {"Bidiyo"},
["bie"] = {"Bepour"},
["bif"] = {"Biafada"},
["big"] = {"Biangai"},
["bik"] = {"Bikol"},
["bil"] = {"Bile"},
["bim"] = {"Bimoba"},
["bin"] = {"Bini", "Edo"},
["bio"] = {"Nai"},
["bip"] = {"Bila"},
["biq"] = {"Bipi"},
["bir"] = {"Bisorio"},
["bit"] = {"Berinomo"},
["biu"] = {"Biete"},
["biv"] = {"Southern Birifor"},
["biw"] = {"Kol (Cameroon)"},
["bix"] = {"Bijori"},
["biy"] = {"Birhor"},
["biz"] = {"Baloi"},
["bja"] = {"Budza"},
["bjb"] = {"Banggarla"},
["bjc"] = {"Bariji"},
["bje"] = {"Biao-Jiao Mien"},
["bjf"] = {"Barzani Jewish Neo-Aramaic"},
["bjg"] = {"Bidyogo"},
["bjh"] = {"Bahinemo"},
["bji"] = {"Burji"},
["bjj"] = {"Kanauji"},
["bjk"] = {"Barok"},
["bjl"] = {"Bulu (Papua New Guinea)"},
["bjm"] = {"Bajelani"},
["bjn"] = {"Banjar"},
["bjo"] = {"Mid-Southern Banda"},
["bjp"] = {"Fanamaket"},
["bjr"] = {"Binumarien"},
["bjs"] = {"Bajan"},
["bjt"] = {"Balanta-Ganja"},
["bju"] = {"Busuu"},
["bjv"] = {"Bedjond"},
["bjw"] = {"Bakwé"},
["bjx"] = {"Banao Itneg"},
["bjy"] = {"Bayali"},
["bjz"] = {"Baruga"},
["bka"] = {"Kyak"},
["bkc"] = {"Baka (Cameroon)"},
["bkd"] = {"Binukid", "Talaandig"},
["bkf"] = {"Beeke"},
["bkg"] = {"Buraka"},
["bkh"] = {"Bakoko"},
["bki"] = {"Baki"},
["bkj"] = {"Pande"},
["bkk"] = {"Brokskat"},
["bkl"] = {"Berik"},
["bkm"] = {"Kom (Cameroon)"},
["bkn"] = {"Bukitan"},
["bko"] = {"Kwa'"},
["bkp"] = {"Boko (Democratic Republic of Congo)"},
["bkq"] = {"Bakairí"},
["bkr"] = {"Bakumpai"},
["bks"] = {"Northern Sorsoganon"},
["bkt"] = {"Boloki"},
["bku"] = {"Buhid"},
["bkv"] = {"Bekwarra"},
["bkw"] = {"Bekwel"},
["bkx"] = {"Baikeno"},
["bky"] = {"Bokyi"},
["bkz"] = {"Bungku"},
["bla"] = {"Siksika"},
["blb"] = {"Bilua"},
["blc"] = {"Bella Coola"},
["bld"] = {"Bolango"},
["ble"] = {"Balanta-Kentohe"},
["blf"] = {"Buol"},
["blh"] = {"Kuwaa"},
["bli"] = {"Bolia"},
["blj"] = {"Bolongan"},
["blk"] = {"Pa'o Karen", "Pa'O"},
["bll"] = {"Biloxi"},
["blm"] = {"Beli (South Sudan)"},
["bln"] = {"Southern Catanduanes Bikol"},
["blo"] = {"Anii"},
["blp"] = {"Blablanga"},
["blq"] = {"Baluan-Pam"},
["blr"] = {"Blang"},
["bls"] = {"Balaesang"},
["blt"] = {"Tai Dam"},
["blv"] = {"Kibala", "Bolo"},
["blw"] = {"Balangao"},
["blx"] = {"Mag-Indi Ayta"},
["bly"] = {"Notre"},
["blz"] = {"Balantak"},
["bma"] = {"Lame"},
["bmb"] = {"Bembe"},
["bmc"] = {"Biem"},
["bmd"] = {"Baga Manduri"},
["bme"] = {"Limassa"},
["bmf"] = {"Bom-Kim"},
["bmg"] = {"Bamwe"},
["bmh"] = {"Kein"},
["bmi"] = {"Bagirmi"},
["bmj"] = {"Bote-Majhi"},
["bmk"] = {"Ghayavi"},
["bml"] = {"Bomboli"},
["bmm"] = {"Northern Betsimisaraka Malagasy"},
["bmn"] = {"Bina (Papua New Guinea)"},
["bmo"] = {"Bambalang"},
["bmp"] = {"Bulgebi"},
["bmq"] = {"Bomu"},
["bmr"] = {"Muinane"},
["bms"] = {"Bilma Kanuri"},
["bmt"] = {"Biao Mon"},
["bmu"] = {"Somba-Siawari"},
["bmv"] = {"Bum"},
["bmw"] = {"Bomwali"},
["bmx"] = {"Baimak"},
["bmz"] = {"Baramu"},
["bna"] = {"Bonerate"},
["bnb"] = {"Bookan"},
["bnc"] = {"Bontok"},
["bnd"] = {"Banda (Indonesia)"},
["bne"] = {"Bintauna"},
["bnf"] = {"Masiwang"},
["bng"] = {"Benga"},
["bni"] = {"Bangi"},
["bnj"] = {"Eastern Tawbuid"},
["bnk"] = {"Bierebo"},
["bnl"] = {"Boon"},
["bnm"] = {"Batanga"},
["bnn"] = {"Bunun"},
["bno"] = {"Bantoanon"},
["bnp"] = {"Bola"},
["bnq"] = {"Bantik"},
["bnr"] = {"Butmas-Tur"},
["bns"] = {"Bundeli"},
["bnt"] = {"Bantu languages"},
["bnu"] = {"Bentong"},
["bnv"] = {"Bonerif", "Beneraf", "Edwas"},
["bnw"] = {"Bisis"},
["bnx"] = {"Bangubangu"},
["bny"] = {"Bintulu"},
["bnz"] = {"Beezen"},
["boa"] = {"Bora"},
["bob"] = {"Aweer"},
["boe"] = {"Mundabli"},
["bof"] = {"Bolon"},
["bog"] = {"Bamako Sign Language"},
["boh"] = {"Boma"},
["boi"] = {"Barbareño"},
["boj"] = {"Anjam"},
["bok"] = {"Bonjo"},
["bol"] = {"Bole"},
["bom"] = {"Berom"},
["bon"] = {"Bine"},
["boo"] = {"Tiemacèwè Bozo"},
["bop"] = {"Bonkiman"},
["boq"] = {"Bogaya"},
["bor"] = {"Borôro"},
["bot"] = {"Bongo"},
["bou"] = {"Bondei"},
["bov"] = {"Tuwuli"},
["bow"] = {"Rema"},
["box"] = {"Buamu"},
["boy"] = {"Bodo (Central African Republic)"},
["boz"] = {"Tiéyaxo Bozo"},
["bpa"] = {"Daakaka"},
["bpc"] = {"Mbuk"},
["bpd"] = {"Banda-Banda"},
["bpe"] = {"Bauni"},
["bpg"] = {"Bonggo"},
["bph"] = {"Botlikh"},
["bpi"] = {"Bagupi"},
["bpj"] = {"Binji"},
["bpk"] = {"Orowe", "'Ôrôê"},
["bpl"] = {"Broome Pearling Lugger Pidgin"},
["bpm"] = {"Biyom"},
["bpn"] = {"Dzao Min"},
["bpo"] = {"Anasi"},
["bpp"] = {"Kaure"},
["bpq"] = {"Banda Malay"},
["bpr"] = {"Koronadal Blaan"},
["bps"] = {"Sarangani Blaan"},
["bpt"] = {"Barrow Point"},
["bpu"] = {"Bongu"},
["bpv"] = {"Bian Marind"},
["bpw"] = {"Bo (Papua New Guinea)"},
["bpx"] = {"Palya Bareli"},
["bpy"] = {"Bishnupriya"},
["bpz"] = {"Bilba"},
["bqa"] = {"Tchumbuli"},
["bqb"] = {"Bagusa"},
["bqc"] = {"Boko (Benin)", "Boo"},
["bqd"] = {"Bung"},
["bqf"] = {"Baga Kaloum"},
["bqg"] = {"Bago-Kusuntu"},
["bqh"] = {"Baima"},
["bqi"] = {"Bakhtiari"},
["bqj"] = {"Bandial"},
["bqk"] = {"Banda-Mbrès"},
["bql"] = {"Bilakura"},
["bqm"] = {"Wumboko"},
["bqn"] = {"Bulgarian Sign Language"},
["bqo"] = {"Balo"},
["bqp"] = {"Busa"},
["bqq"] = {"Biritai"},
["bqr"] = {"Burusu"},
["bqs"] = {"Bosngun"},
["bqt"] = {"Bamukumbit"},
["bqu"] = {"Boguru"},
["bqv"] = {"Koro Wachi", "Begbere-Ejar"},
["bqw"] = {"Buru (Nigeria)"},
["bqx"] = {"Baangi"},
["bqy"] = {"Bengkala Sign Language"},
["bqz"] = {"Bakaka"},
["bra"] = {"Braj"},
["brb"] = {"Brao", "Lave"},
["brc"] = {"Berbice Creole Dutch"},
["brd"] = {"Baraamu"},
["brf"] = {"Bira"},
["brg"] = {"Baure"},
["brh"] = {"Brahui"},
["bri"] = {"Mokpwe"},
["brj"] = {"Bieria"},
["brk"] = {"Birked"},
["brl"] = {"Birwa"},
["brm"] = {"Barambu"},
["brn"] = {"Boruca"},
["bro"] = {"Brokkat"},
["brp"] = {"Barapasi"},
["brq"] = {"Breri"},
["brr"] = {"Birao"},
["brs"] = {"Baras"},
["brt"] = {"Bitare"},
["bru"] = {"Eastern Bru"},
["brv"] = {"Western Bru"},
["brw"] = {"Bellari"},
["brx"] = {"Bodo (India)"},
["bry"] = {"Burui"},
["brz"] = {"Bilbil"},
["bsa"] = {"Abinomn"},
["bsb"] = {"Brunei Bisaya"},
["bsc"] = {"Bassari", "Oniyan"},
["bse"] = {"Wushi"},
["bsf"] = {"Bauchi"},
["bsg"] = {"Bashkardi"},
["bsh"] = {"Kati"},
["bsi"] = {"Bassossi"},
["bsj"] = {"Bangwinji"},
["bsk"] = {"Burushaski"},
["bsl"] = {"Basa-Gumna"},
["bsm"] = {"Busami"},
["bsn"] = {"Barasana-Eduria"},
["bso"] = {"Buso"},
["bsp"] = {"Baga Sitemu"},
["bsq"] = {"Bassa"},
["bsr"] = {"Bassa-Kontagora"},
["bss"] = {"Akoose"},
["bst"] = {"Basketo"},
["bsu"] = {"Bahonsuai"},
["bsv"] = {"Baga Sobané"},
["bsw"] = {"Baiso"},
["bsx"] = {"Yangkam"},
["bsy"] = {"Sabah Bisaya"},
["bta"] = {"Bata"},
["btc"] = {"Bati (Cameroon)"},
["btd"] = {"Batak Dairi"},
["bte"] = {"Gamo-Ningi"},
["btf"] = {"Birgit"},
["btg"] = {"Gagnoa Bété"},
["bth"] = {"Biatah Bidayuh"},
["bti"] = {"Burate"},
["btj"] = {"Bacanese Malay"},
["btk"] = {"Batak languages"},
["btm"] = {"Batak Mandailing"},
["btn"] = {"Ratagnon"},
["bto"] = {"Rinconada Bikol"},
["btp"] = {"Budibud"},
["btq"] = {"Batek"},
["btr"] = {"Baetora"},
["bts"] = {"Batak Simalungun"},
["btt"] = {"Bete-Bendi"},
["btu"] = {"Batu"},
["btv"] = {"Bateri"},
["btw"] = {"Butuanon"},
["btx"] = {"Batak Karo"},
["bty"] = {"Bobot"},
["btz"] = {"Batak Alas-Kluet"},
["bua"] = {"Buriat"},
["bub"] = {"Bua"},
["buc"] = {"Bushi"},
["bud"] = {"Ntcham"},
["bue"] = {"Beothuk"},
["buf"] = {"Bushoong"},
["bug"] = {"Buginese"},
["buh"] = {"Younuo Bunu"},
["bui"] = {"Bongili"},
["buj"] = {"Basa-Gurmana"},
["buk"] = {"Bugawac"},
["bum"] = {"Bulu (Cameroon)"},
["bun"] = {"Sherbro"},
["buo"] = {"Terei"},
["bup"] = {"Busoa"},
["buq"] = {"Brem"},
["bus"] = {"Bokobaru"},
["but"] = {"Bungain"},
["buu"] = {"Budu"},
["buv"] = {"Bun"},
["buw"] = {"Bubi"},
["bux"] = {"Boghom"},
["buy"] = {"Bullom So"},
["buz"] = {"Bukwen"},
["bva"] = {"Barein"},
["bvb"] = {"Bube"},
["bvc"] = {"Baelelea"},
["bvd"] = {"Baeggu"},
["bve"] = {"Berau Malay"},
["bvf"] = {"Boor"},
["bvg"] = {"Bonkeng"},
["bvh"] = {"Bure"},
["bvi"] = {"Belanda Viri"},
["bvj"] = {"Baan"},
["bvk"] = {"Bukat"},
["bvl"] = {"Bolivian Sign Language"},
["bvm"] = {"Bamunka"},
["bvn"] = {"Buna"},
["bvo"] = {"Bolgo"},
["bvp"] = {"Bumang"},
["bvq"] = {"Birri"},
["bvr"] = {"Burarra"},
["bvt"] = {"Bati (Indonesia)"},
["bvu"] = {"Bukit Malay"},
["bvv"] = {"Baniva"},
["bvw"] = {"Boga"},
["bvx"] = {"Dibole"},
["bvy"] = {"Baybayanon"},
["bvz"] = {"Bauzi"},
["bwa"] = {"Bwatoo"},
["bwb"] = {"Namosi-Naitasiri-Serua"},
["bwc"] = {"Bwile"},
["bwd"] = {"Bwaidoka"},
["bwe"] = {"Bwe Karen"},
["bwf"] = {"Boselewa"},
["bwg"] = {"Barwe"},
["bwh"] = {"Bishuo"},
["bwi"] = {"Baniwa"},
["bwj"] = {"Láá Láá Bwamu"},
["bwk"] = {"Bauwaki"},
["bwl"] = {"Bwela"},
["bwm"] = {"Biwat"},
["bwn"] = {"Wunai Bunu"},
["bwo"] = {"Boro (Ethiopia)", "Borna (Ethiopia)"},
["bwp"] = {"Mandobo Bawah"},
["bwq"] = {"Southern Bobo Madaré"},
["bwr"] = {"Bura-Pabir"},
["bws"] = {"Bomboma"},
["bwt"] = {"Bafaw-Balong"},
["bwu"] = {"Buli (Ghana)"},
["bww"] = {"Bwa"},
["bwx"] = {"Bu-Nao Bunu"},
["bwy"] = {"Cwi Bwamu"},
["bwz"] = {"Bwisi"},
["bxa"] = {"Tairaha"},
["bxb"] = {"Belanda Bor"},
["bxc"] = {"Molengue"},
["bxd"] = {"Pela"},
["bxe"] = {"Birale"},
["bxf"] = {"Bilur", "Minigir"},
["bxg"] = {"Bangala"},
["bxh"] = {"Buhutu"},
["bxi"] = {"Pirlatapa"},
["bxj"] = {"Bayungu"},
["bxk"] = {"Bukusu", "Lubukusu"},
["bxl"] = {"Jalkunan"},
["bxm"] = {"Mongolia Buriat"},
["bxn"] = {"Burduna"},
["bxo"] = {"Barikanchi"},
["bxp"] = {"Bebil"},
["bxq"] = {"Beele"},
["bxr"] = {"Russia Buriat"},
["bxs"] = {"Busam"},
["bxu"] = {"China Buriat"},
["bxv"] = {"Berakou"},
["bxw"] = {"Bankagooma"},
["bxz"] = {"Binahari"},
["bya"] = {"Batak"},
["byb"] = {"Bikya"},
["byc"] = {"Ubaghara"},
["byd"] = {"Benyadu'"},
["bye"] = {"Pouye"},
["byf"] = {"Bete"},
["byg"] = {"Baygo"},
["byh"] = {"Bhujel"},
["byi"] = {"Buyu"},
["byj"] = {"Bina (Nigeria)"},
["byk"] = {"Biao"},
["byl"] = {"Bayono"},
["bym"] = {"Bidjara"},
["byn"] = {"Bilin", "Blin"},
["byo"] = {"Biyo"},
["byp"] = {"Bumaji"},
["byq"] = {"Basay"},
["byr"] = {"Baruya", "Yipma"},
["bys"] = {"Burak"},
["byt"] = {"Berti"},
["byv"] = {"Medumba"},
["byw"] = {"Belhariya"},
["byx"] = {"Qaqet"},
["byz"] = {"Banaro"},
["bza"] = {"Bandi"},
["bzb"] = {"Andio"},
["bzc"] = {"Southern Betsimisaraka Malagasy"},
["bzd"] = {"Bribri"},
["bze"] = {"Jenaama Bozo"},
["bzf"] = {"Boikin"},
["bzg"] = {"Babuza"},
["bzh"] = {"Mapos Buang"},
["bzi"] = {"Bisu"},
["bzj"] = {"Belize Kriol English"},
["bzk"] = {"Nicaragua Creole English"},
["bzl"] = {"Boano (Sulawesi)"},
["bzm"] = {"Bolondo"},
["bzn"] = {"Boano (Maluku)"},
["bzo"] = {"Bozaba"},
["bzp"] = {"Kemberano"},
["bzq"] = {"Buli (Indonesia)"},
["bzr"] = {"Biri"},
["bzs"] = {"Brazilian Sign Language"},
["bzt"] = {"Brithenig"},
["bzu"] = {"Burmeso"},
["bzv"] = {"Naami"},
["bzw"] = {"Basa (Nigeria)"},
["bzx"] = {"Kɛlɛngaxo Bozo"},
["bzy"] = {"Obanliku"},
["bzz"] = {"Evant"},
["caa"] = {"Chortí"},
["cab"] = {"Garifuna"},
["cac"] = {"Chuj"},
["cad"] = {"Caddo"},
["cae"] = {"Lehar", "Laalaa"},
["caf"] = {"Southern Carrier"},
["cag"] = {"Nivaclé"},
["cah"] = {"Cahuarano"},
["cai"] = {"Central American Indian languages"},
["caj"] = {"Chané"},
["cak"] = {"Kaqchikel", "Cakchiquel"},
["cal"] = {"Carolinian"},
["cam"] = {"Cemuhî"},
["can"] = {"Chambri"},
["cao"] = {"Chácobo"},
["cap"] = {"Chipaya"},
["caq"] = {"Car Nicobarese"},
["car"] = {"Galibi Carib"},
["cas"] = {"Tsimané"},
["cau"] = {"Caucasian languages"},
["cav"] = {"Cavineña"},
["caw"] = {"Callawalla"},
["cax"] = {"Chiquitano"},
["cay"] = {"Cayuga"},
["caz"] = {"Canichana"},
["cba"] = {"Chibchan languages"},
["cbb"] = {"Cabiyarí"},
["cbc"] = {"Carapana"},
["cbd"] = {"Carijona"},
["cbg"] = {"Chimila"},
["cbi"] = {"Chachi"},
["cbj"] = {"Ede Cabe"},
["cbk"] = {"Chavacano"},
["cbl"] = {"Bualkhaw Chin"},
["cbn"] = {"Nyahkur"},
["cbo"] = {"Izora"},
["cbq"] = {"Tsucuba", "Cuba"},
["cbr"] = {"Cashibo-Cacataibo"},
["cbs"] = {"Cashinahua"},
["cbt"] = {"Chayahuita"},
["cbu"] = {"Candoshi-Shapra"},
["cbv"] = {"Cacua"},
["cbw"] = {"Kinabalian"},
["cby"] = {"Carabayo"},
["ccc"] = {"Chamicuro"},
["ccd"] = {"Cafundo Creole"},
["cce"] = {"Chopi"},
["ccg"] = {"Samba Daka"},
["cch"] = {"Atsam"},
["ccj"] = {"Kasanga"},
["ccl"] = {"Cutchi-Swahili"},
["ccm"] = {"Malaccan Creole Malay"},
["ccn"] = {"North Caucasian languages"},
["cco"] = {"Comaltepec Chinantec"},
["ccp"] = {"Chakma"},
["ccr"] = {"Cacaopera"},
["ccs"] = {"South Caucasian languages"},
["cda"] = {"Choni"},
["cdc"] = {"Chadic languages"},
["cdd"] = {"Caddoan languages"},
["cde"] = {"Chenchu"},
["cdf"] = {"Chiru"},
["cdh"] = {"Chambeali"},
["cdi"] = {"Chodri"},
["cdj"] = {"Churahi"},
["cdm"] = {"Chepang"},
["cdn"] = {"Chaudangsi"},
["cdo"] = {"Min Dong Chinese"},
["cdr"] = {"Cinda-Regi-Tiyal"},
["cds"] = {"Chadian Sign Language"},
["cdy"] = {"Chadong"},
["cdz"] = {"Koda"},
["cea"] = {"Lower Chehalis"},
["ceb"] = {"Cebuano"},
["ceg"] = {"Chamacoco"},
["cek"] = {"Eastern Khumi Chin"},
["cel"] = {"Celtic languages"},
["cen"] = {"Cen"},
["cet"] = {"Centúúm"},
["cey"] = {"Ekai Chin"},
["cfa"] = {"Dijim-Bwilim"},
["cfd"] = {"Cara"},
["cfg"] = {"Como Karim"},
["cfm"] = {"Falam Chin"},
["cga"] = {"Changriwa"},
["cgc"] = {"Kagayanen"},
["cgg"] = {"Chiga"},
["cgk"] = {"Chocangacakha"},
["chb"] = {"Chibcha"},
["chc"] = {"Catawba"},
["chd"] = {"Highland Oaxaca Chontal"},
["chf"] = {"Tabasco Chontal"},
["chg"] = {"Chagatai"},
["chh"] = {"Chinook"},
["chj"] = {"Ojitlán Chinantec"},
["chk"] = {"Chuukese"},
["chl"] = {"Cahuilla"},
["chm"] = {"Mari (Russia)"},
["chn"] = {"Chinook jargon"},
["cho"] = {"Choctaw"},
["chp"] = {"Chipewyan", "Dene Suline"},
["chq"] = {"Quiotepec Chinantec"},
["chr"] = {"Cherokee"},
["cht"] = {"Cholón"},
["chw"] = {"Chuwabu"},
["chx"] = {"Chantyal"},
["chy"] = {"Cheyenne"},
["chz"] = {"Ozumacín Chinantec"},
["cia"] = {"Cia-Cia"},
["cib"] = {"Ci Gbe"},
["cic"] = {"Chickasaw"},
["cid"] = {"Chimariko"},
["cie"] = {"Cineni"},
["cih"] = {"Chinali"},
["cik"] = {"Chitkuli Kinnauri"},
["cim"] = {"Cimbrian"},
["cin"] = {"Cinta Larga"},
["cip"] = {"Chiapanec"},
["cir"] = {"Tiri", "Haméa", "Méa"},
["ciw"] = {"Chippewa"},
["ciy"] = {"Chaima"},
["cja"] = {"Western Cham"},
["cje"] = {"Chru"},
["cjh"] = {"Upper Chehalis"},
["cji"] = {"Chamalal"},
["cjk"] = {"Chokwe"},
["cjm"] = {"Eastern Cham"},
["cjn"] = {"Chenapian"},
["cjo"] = {"Ashéninka Pajonal"},
["cjp"] = {"Cabécar"},
["cjs"] = {"Shor"},
["cjv"] = {"Chuave"},
["cjy"] = {"Jinyu Chinese"},
["ckb"] = {"Central Kurdish"},
["ckh"] = {"Chak"},
["ckl"] = {"Cibak"},
["ckm"] = {"Chakavian"},
["ckn"] = {"Kaang Chin"},
["cko"] = {"Anufo"},
["ckq"] = {"Kajakse"},
["ckr"] = {"Kairak"},
["cks"] = {"Tayo"},
["ckt"] = {"Chukot"},
["cku"] = {"Koasati"},
["ckv"] = {"Kavalan"},
["ckx"] = {"Caka"},
["cky"] = {"Cakfem-Mushere"},
["ckz"] = {"Cakchiquel-Quiché Mixed Language"},
["cla"] = {"Ron"},
["clc"] = {"Chilcotin"},
["cld"] = {"Chaldean Neo-Aramaic"},
["cle"] = {"Lealao Chinantec"},
["clh"] = {"Chilisso"},
["cli"] = {"Chakali"},
["clj"] = {"Laitu Chin"},
["clk"] = {"Idu-Mishmi"},
["cll"] = {"Chala"},
["clm"] = {"Clallam"},
["clo"] = {"Lowland Oaxaca Chontal"},
["clt"] = {"Lautu Chin"},
["clu"] = {"Caluyanun"},
["clw"] = {"Chulym"},
["cly"] = {"Eastern Highland Chatino"},
["cma"] = {"Maa"},
["cmc"] = {"Chamic languages"},
["cme"] = {"Cerma"},
["cmg"] = {"Classical Mongolian"},
["cmi"] = {"Emberá-Chamí"},
["cml"] = {"Campalagian"},
["cmm"] = {"Michigamea"},
["cmn"] = {"Mandarin Chinese"},
["cmo"] = {"Central Mnong"},
["cmr"] = {"Mro-Khimi Chin"},
["cms"] = {"Messapic"},
["cmt"] = {"Camtho"},
["cna"] = {"Changthang"},
["cnb"] = {"Chinbon Chin"},
["cnc"] = {"Côông"},
["cng"] = {"Northern Qiang"},
["cnh"] = {"Hakha Chin", "Haka Chin"},
["cni"] = {"Asháninka"},
["cnk"] = {"Khumi Chin"},
["cnl"] = {"Lalana Chinantec"},
["cno"] = {"Con"},
["cnp"] = {"Northern Ping Chinese", "Northern Pinghua"},
["cnq"] = {"Chung"},
["cnr"] = {"Montenegrin"},
["cns"] = {"Central Asmat"},
["cnt"] = {"Tepetotutla Chinantec"},
["cnu"] = {"Chenoua"},
["cnw"] = {"Ngawn Chin"},
["cnx"] = {"Middle Cornish"},
["coa"] = {"Cocos Islands Malay"},
["cob"] = {"Chicomuceltec"},
["coc"] = {"Cocopa"},
["cod"] = {"Cocama-Cocamilla"},
["coe"] = {"Koreguaje"},
["cof"] = {"Colorado"},
["cog"] = {"Chong"},
["coh"] = {"Chonyi-Dzihana-Kauma", "Chichonyi-Chidzihana-Chikauma"},
["coj"] = {"Cochimi"},
["cok"] = {"Santa Teresa Cora"},
["col"] = {"Columbia-Wenatchi"},
["com"] = {"Comanche"},
["con"] = {"Cofán"},
["coo"] = {"Comox"},
["cop"] = {"Coptic"},
["coq"] = {"Coquille"},
["cot"] = {"Caquinte"},
["cou"] = {"Wamey"},
["cov"] = {"Cao Miao"},
["cow"] = {"Cowlitz"},
["cox"] = {"Nanti"},
["coz"] = {"Chochotec"},
["cpa"] = {"Palantla Chinantec"},
["cpb"] = {"Ucayali-Yurúa Ashéninka"},
["cpc"] = {"Ajyíninka Apurucayali"},
["cpe"] = {"English-based creoles and pidgins"},
["cpf"] = {"French-based creoles and pidgins"},
["cpg"] = {"Cappadocian Greek"},
["cpi"] = {"Chinese Pidgin English"},
["cpn"] = {"Cherepon"},
["cpo"] = {"Kpeego"},
["cpp"] = {"Portuguese-based creoles and pidgins"},
["cps"] = {"Capiznon"},
["cpu"] = {"Pichis Ashéninka"},
["cpx"] = {"Pu-Xian Chinese"},
["cpy"] = {"South Ucayali Ashéninka"},
["cqd"] = {"Chuanqiandian Cluster Miao"},
["cra"] = {"Chara"},
["crb"] = {"Island Carib"},
["crc"] = {"Lonwolwol"},
["crd"] = {"Coeur d'Alene"},
["crf"] = {"Caramanta"},
["crg"] = {"Michif"},
["crh"] = {"Crimean Tatar", "Crimean Turkish"},
["cri"] = {"Sãotomense"},
["crj"] = {"Southern East Cree"},
["crk"] = {"Plains Cree"},
["crl"] = {"Northern East Cree"},
["crm"] = {"Moose Cree"},
["crn"] = {"El Nayar Cora"},
["cro"] = {"Crow"},
["crp"] = {"Creoles and pidgins"},
["crq"] = {"Iyo'wujwa Chorote"},
["crr"] = {"Carolina Algonquian"},
["crs"] = {"Seselwa Creole French"},
["crt"] = {"Iyojwa'ja Chorote"},
["crv"] = {"Chaura"},
["crw"] = {"Chrau"},
["crx"] = {"Carrier"},
["cry"] = {"Cori"},
["crz"] = {"Cruzeño"},
["csa"] = {"Chiltepec Chinantec"},
["csb"] = {"Kashubian"},
["csc"] = {"Catalan Sign Language", "Lengua de señas catalana", "Llengua de Signes Catalana"},
["csd"] = {"Chiangmai Sign Language"},
["cse"] = {"Czech Sign Language"},
["csf"] = {"Cuba Sign Language"},
["csg"] = {"Chilean Sign Language"},
["csh"] = {"Asho Chin"},
["csi"] = {"Coast Miwok"},
["csj"] = {"Songlai Chin"},
["csk"] = {"Jola-Kasa"},
["csl"] = {"Chinese Sign Language"},
["csm"] = {"Central Sierra Miwok"},
["csn"] = {"Colombian Sign Language"},
["cso"] = {"Sochiapam Chinantec", "Sochiapan Chinantec"},
["csp"] = {"Southern Ping Chinese", "Southern Pinghua"},
["csq"] = {"Croatia Sign Language"},
["csr"] = {"Costa Rican Sign Language"},
["css"] = {"Southern Ohlone"},
["cst"] = {"Northern Ohlone"},
["csu"] = {"Central Sudanic languages"},
["csv"] = {"Sumtu Chin"},
["csw"] = {"Swampy Cree"},
["csx"] = {"Cambodian Sign Language"},
["csy"] = {"Siyin Chin"},
["csz"] = {"Coos"},
["cta"] = {"Tataltepec Chatino"},
["ctc"] = {"Chetco"},
["ctd"] = {"Tedim Chin"},
["cte"] = {"Tepinapa Chinantec"},
["ctg"] = {"Chittagonian"},
["cth"] = {"Thaiphum Chin"},
["ctl"] = {"Tlacoatzintepec Chinantec"},
["ctm"] = {"Chitimacha"},
["ctn"] = {"Chhintange"},
["cto"] = {"Emberá-Catío"},
["ctp"] = {"Western Highland Chatino"},
["cts"] = {"Northern Catanduanes Bikol"},
["ctt"] = {"Wayanad Chetti"},
["ctu"] = {"Chol"},
["cty"] = {"Moundadan Chetty"},
["ctz"] = {"Zacatepec Chatino"},
["cua"] = {"Cua"},
["cub"] = {"Cubeo"},
["cuc"] = {"Usila Chinantec"},
["cuh"] = {"Chuka", "Gichuka"},
["cui"] = {"Cuiba"},
["cuj"] = {"Mashco Piro"},
["cuk"] = {"San Blas Kuna"},
["cul"] = {"Culina", "Kulina"},
["cuo"] = {"Cumanagoto"},
["cup"] = {"Cupeño"},
["cuq"] = {"Cun"},
["cur"] = {"Chhulung"},
["cus"] = {"Cushitic languages"},
["cut"] = {"Teutila Cuicatec"},
["cuu"] = {"Tai Ya"},
["cuv"] = {"Cuvok"},
["cuw"] = {"Chukwa"},
["cux"] = {"Tepeuxila Cuicatec"},
["cuy"] = {"Cuitlatec"},
["cvg"] = {"Chug"},
["cvn"] = {"Valle Nacional Chinantec"},
["cwa"] = {"Kabwa"},
["cwb"] = {"Maindo"},
["cwd"] = {"Woods Cree"},
["cwe"] = {"Kwere"},
["cwg"] = {"Chewong", "Cheq Wong"},
["cwt"] = {"Kuwaataay"},
["cxh"] = {"Cha'ari"},
["cya"] = {"Nopala Chatino"},
["cyb"] = {"Cayubaba"},
["cyo"] = {"Cuyonon"},
["czh"] = {"Huizhou Chinese"},
["czk"] = {"Knaanic"},
["czn"] = {"Zenzontepec Chatino"},
["czo"] = {"Min Zhong Chinese"},
["czt"] = {"Zotung Chin"},
["daa"] = {"Dangaléat"},
["dac"] = {"Dambi"},
["dad"] = {"Marik"},
["dae"] = {"Duupa"},
["dag"] = {"Dagbani"},
["dah"] = {"Gwahatike"},
["dai"] = {"Day"},
["daj"] = {"Dar Fur Daju"},
["dak"] = {"Dakota"},
["dal"] = {"Dahalo"},
["dam"] = {"Damakawa"},
["dao"] = {"Daai Chin"},
["daq"] = {"Dandami Maria"},
["dar"] = {"Dargwa"},
["das"] = {"Daho-Doo"},
["dau"] = {"Dar Sila Daju"},
["dav"] = {"Taita", "Dawida"},
["daw"] = {"Davawenyo"},
["dax"] = {"Dayi"},
["day"] = {"Land Dayak languages"},
["daz"] = {"Dao"},
["dba"] = {"Bangime"},
["dbb"] = {"Deno"},
["dbd"] = {"Dadiya"},
["dbe"] = {"Dabe"},
["dbf"] = {"Edopi"},
["dbg"] = {"Dogul Dom Dogon"},
["dbi"] = {"Doka"},
["dbj"] = {"Ida'an"},
["dbl"] = {"Dyirbal"},
["dbm"] = {"Duguri"},
["dbn"] = {"Duriankere"},
["dbo"] = {"Dulbu"},
["dbp"] = {"Duwai"},
["dbq"] = {"Daba"},
["dbr"] = {"Dabarre"},
["dbt"] = {"Ben Tey Dogon"},
["dbu"] = {"Bondum Dom Dogon"},
["dbv"] = {"Dungu"},
["dbw"] = {"Bankan Tey Dogon"},
["dby"] = {"Dibiyaso"},
["dcc"] = {"Deccan"},
["dcr"] = {"Negerhollands"},
["dda"] = {"Dadi Dadi"},
["ddd"] = {"Dongotono"},
["dde"] = {"Doondo"},
["ddg"] = {"Fataluku"},
["ddi"] = {"West Goodenough"},
["ddj"] = {"Jaru"},
["ddn"] = {"Dendi (Benin)"},
["ddo"] = {"Dido"},
["ddr"] = {"Dhudhuroa"},
["dds"] = {"Donno So Dogon"},
["ddw"] = {"Dawera-Daweloor"},
["dec"] = {"Dagik"},
["ded"] = {"Dedua"},
["dee"] = {"Dewoin"},
["def"] = {"Dezfuli"},
["deg"] = {"Degema"},
["deh"] = {"Dehwari"},
["dei"] = {"Demisa"},
["dek"] = {"Dek"},
["del"] = {"Delaware"},
["dem"] = {"Dem"},
["den"] = {"Slave (Athapascan)"},
["dep"] = {"Pidgin Delaware"},
["deq"] = {"Dendi (Central African Republic)"},
["der"] = {"Deori"},
["des"] = {"Desano"},
["dev"] = {"Domung"},
["dez"] = {"Dengese"},
["dga"] = {"Southern Dagaare"},
["dgb"] = {"Bunoge Dogon"},
["dgc"] = {"Casiguran Dumagat Agta"},
["dgd"] = {"Dagaari Dioula"},
["dge"] = {"Degenan"},
["dgg"] = {"Doga"},
["dgh"] = {"Dghwede"},
["dgi"] = {"Northern Dagara"},
["dgk"] = {"Dagba"},
["dgl"] = {"Andaandi", "Dongolawi"},
["dgn"] = {"Dagoman"},
["dgo"] = {"Dogri (individual language)"},
["dgr"] = {"Dogrib", "Tłı̨chǫ"},
["dgs"] = {"Dogoso"},
["dgt"] = {"Ndra'ngith"},
["dgw"] = {"Daungwurrung"},
["dgx"] = {"Doghoro"},
["dgz"] = {"Daga"},
["dhd"] = {"Dhundari"},
["dhg"] = {"Dhangu-Djangu", "Dhangu", "Djangu"},
["dhi"] = {"Dhimal"},
["dhl"] = {"Dhalandji"},
["dhm"] = {"Zemba"},
["dhn"] = {"Dhanki"},
["dho"] = {"Dhodia"},
["dhr"] = {"Dhargari"},
["dhs"] = {"Dhaiso"},
["dhu"] = {"Dhurga"},
["dhv"] = {"Dehu", "Drehu"},
["dhw"] = {"Dhanwar (Nepal)"},
["dhx"] = {"Dhungaloo"},
["dia"] = {"Dia"},
["dib"] = {"South Central Dinka"},
["dic"] = {"Lakota Dida"},
["did"] = {"Didinga"},
["dif"] = {"Dieri", "Diyari"},
["dig"] = {"Digo", "Chidigo"},
["dih"] = {"Kumiai"},
["dii"] = {"Dimbong"},
["dij"] = {"Dai"},
["dik"] = {"Southwestern Dinka"},
["dil"] = {"Dilling"},
["dim"] = {"Dime"},
["din"] = {"Dinka"},
["dio"] = {"Dibo"},
["dip"] = {"Northeastern Dinka"},
["diq"] = {"Dimli (individual language)"},
["dir"] = {"Dirim"},
["dis"] = {"Dimasa"},
["diu"] = {"Diriku"},
["diw"] = {"Northwestern Dinka"},
["dix"] = {"Dixon Reef"},
["diy"] = {"Diuwe"},
["diz"] = {"Ding"},
["dja"] = {"Djadjawurrung"},
["djb"] = {"Djinba"},
["djc"] = {"Dar Daju Daju"},
["djd"] = {"Djamindjung", "Ngaliwurru"},
["dje"] = {"Zarma"},
["djf"] = {"Djangun"},
["dji"] = {"Djinang"},
["djj"] = {"Djeebbana"},
["djk"] = {"Eastern Maroon Creole", "Businenge Tongo", "Nenge"},
["djm"] = {"Jamsay Dogon"},
["djn"] = {"Jawoyn", "Djauan"},
["djo"] = {"Jangkang"},
["djr"] = {"Djambarrpuyngu"},
["dju"] = {"Kapriman"},
["djw"] = {"Djawi"},
["dka"] = {"Dakpakha"},
["dkg"] = {"Kadung"},
["dkk"] = {"Dakka"},
["dkr"] = {"Kuijau"},
["dks"] = {"Southeastern Dinka"},
["dkx"] = {"Mazagway"},
["dlg"] = {"Dolgan"},
["dlk"] = {"Dahalik"},
["dlm"] = {"Dalmatian"},
["dln"] = {"Darlong"},
["dma"] = {"Duma"},
["dmb"] = {"Mombo Dogon"},
["dmc"] = {"Gavak"},
["dmd"] = {"Madhi Madhi"},
["dme"] = {"Dugwor"},
["dmf"] = {"Medefaidrin"},
["dmg"] = {"Upper Kinabatangan"},
["dmk"] = {"Domaaki"},
["dml"] = {"Dameli"},
["dmm"] = {"Dama"},
["dmn"] = {"Mande languages"},
["dmo"] = {"Kemedzung"},
["dmr"] = {"East Damar"},
["dms"] = {"Dampelas"},
["dmu"] = {"Dubu", "Tebi"},
["dmv"] = {"Dumpas"},
["dmw"] = {"Mudburra"},
["dmx"] = {"Dema"},
["dmy"] = {"Demta", "Sowari"},
["dna"] = {"Upper Grand Valley Dani"},
["dnd"] = {"Daonda"},
["dne"] = {"Ndendeule"},
["dng"] = {"Dungan"},
["dni"] = {"Lower Grand Valley Dani"},
["dnj"] = {"Dan"},
["dnk"] = {"Dengka"},
["dnn"] = {"Dzùùngoo"},
["dno"] = {"Ndrulo", "Northern Lendu"},
["dnr"] = {"Danaru"},
["dnt"] = {"Mid Grand Valley Dani"},
["dnu"] = {"Danau"},
["dnv"] = {"Danu"},
["dnw"] = {"Western Dani"},
["dny"] = {"Dení"},
["doa"] = {"Dom"},
["dob"] = {"Dobu"},
["doc"] = {"Northern Dong"},
["doe"] = {"Doe"},
["dof"] = {"Domu"},
["doh"] = {"Dong"},
["doi"] = {"Dogri (macrolanguage)"},
["dok"] = {"Dondo"},
["dol"] = {"Doso"},
["don"] = {"Toura (Papua New Guinea)"},
["doo"] = {"Dongo"},
["dop"] = {"Lukpa"},
["doq"] = {"Dominican Sign Language"},
["dor"] = {"Dori'o"},
["dos"] = {"Dogosé"},
["dot"] = {"Dass"},
["dov"] = {"Dombe"},
["dow"] = {"Doyayo"},
["dox"] = {"Bussa"},
["doy"] = {"Dompo"},
["doz"] = {"Dorze"},
["dpp"] = {"Papar"},
["dra"] = {"Dravidian languages"},
["drb"] = {"Dair"},
["drc"] = {"Minderico"},
["drd"] = {"Darmiya"},
["dre"] = {"Dolpo"},
["drg"] = {"Rungus"},
["dri"] = {"C'Lela"},
["drl"] = {"Paakantyi"},
["drn"] = {"West Damar"},
["dro"] = {"Daro-Matu Melanau"},
["drq"] = {"Dura"},
["drs"] = {"Gedeo"},
["drt"] = {"Drents"},
["dru"] = {"Rukai"},
["dry"] = {"Darai"},
["dsb"] = {"Lower Sorbian"},
["dse"] = {"Dutch Sign Language"},
["dsh"] = {"Daasanach"},
["dsi"] = {"Disa"},
["dsk"] = {"Dokshi"},
["dsl"] = {"Danish Sign Language"},
["dsn"] = {"Dusner"},
["dso"] = {"Desiya"},
["dsq"] = {"Tadaksahak"},
["dsz"] = {"Mardin Sign Language"},
["dta"] = {"Daur"},
["dtb"] = {"Labuk-Kinabatangan Kadazan"},
["dtd"] = {"Ditidaht"},
["dth"] = {"Adithinngithigh"},
["dti"] = {"Ana Tinga Dogon"},
["dtk"] = {"Tene Kan Dogon"},
["dtm"] = {"Tomo Kan Dogon"},
["dtn"] = {"Daatsʼíin"},
["dto"] = {"Tommo So Dogon"},
["dtp"] = {"Kadazan Dusun", "Central Dusun"},
["dtr"] = {"Lotud"},
["dts"] = {"Toro So Dogon"},
["dtt"] = {"Toro Tegu Dogon"},
["dtu"] = {"Tebul Ure Dogon"},
["dty"] = {"Dotyali"},
["dua"] = {"Duala"},
["dub"] = {"Dubli"},
["duc"] = {"Duna"},
["due"] = {"Umiray Dumaget Agta"},
["duf"] = {"Dumbea", "Drubea"},
["dug"] = {"Duruma", "Chiduruma"},
["duh"] = {"Dungra Bhil"},
["dui"] = {"Dumun"},
["duk"] = {"Uyajitaya"},
["dul"] = {"Alabat Island Agta"},
["dum"] = {"Middle Dutch (ca. 1050-1350)"},
["dun"] = {"Dusun Deyah"},
["duo"] = {"Dupaninan Agta"},
["dup"] = {"Duano"},
["duq"] = {"Dusun Malang"},
["dur"] = {"Dii"},
["dus"] = {"Dumi"},
["duu"] = {"Drung"},
["duv"] = {"Duvle"},
["duw"] = {"Dusun Witu"},
["dux"] = {"Duungooma"},
["duy"] = {"Dicamay Agta"},
["duz"] = {"Duli-Gey"},
["dva"] = {"Duau"},
["dwa"] = {"Diri"},
["dwk"] = {"Dawik Kui"},
["dwr"] = {"Dawro"},
["dws"] = {"Dutton World Speedwords"},
["dwu"] = {"Dhuwal"},
["dww"] = {"Dawawa"},
["dwy"] = {"Dhuwaya"},
["dwz"] = {"Dewas Rai"},
["dya"] = {"Dyan"},
["dyb"] = {"Dyaberdyaber"},
["dyd"] = {"Dyugun"},
["dyg"] = {"Villa Viciosa Agta"},
["dyi"] = {"Djimini Senoufo"},
["dym"] = {"Yanda Dom Dogon"},
["dyn"] = {"Dyangadi", "Dhanggatti"},
["dyo"] = {"Jola-Fonyi"},
["dyr"] = {"Dyarim"},
["dyu"] = {"Dyula"},
["dyy"] = {"Djabugay", "Dyaabugay"},
["dza"] = {"Tunzu"},
["dzd"] = {"Daza"},
["dze"] = {"Djiwarli"},
["dzg"] = {"Dazaga"},
["dzl"] = {"Dzalakha"},
["dzn"] = {"Dzando"},
["eaa"] = {"Karenggapa"},
["ebc"] = {"Beginci"},
["ebg"] = {"Ebughu"},
["ebk"] = {"Eastern Bontok"},
["ebo"] = {"Teke-Ebo"},
["ebr"] = {"Ebrié"},
["ebu"] = {"Embu", "Kiembu"},
["ecr"] = {"Eteocretan"},
["ecs"] = {"Ecuadorian Sign Language"},
["ecy"] = {"Eteocypriot"},
["eee"] = {"E"},
["efa"] = {"Efai"},
["efe"] = {"Efe"},
["efi"] = {"Efik"},
["ega"] = {"Ega"},
["egl"] = {"Emilian"},
["egm"] = {"Benamanga"},
["ego"] = {"Eggon"},
["egx"] = {"Egyptian languages"},
["egy"] = {"Egyptian (Ancient)"},
["ehs"] = {"Miyakubo Sign Language"},
["ehu"] = {"Ehueun"},
["eip"] = {"Eipomek"},
["eit"] = {"Eitiep"},
["eiv"] = {"Askopan"},
["eja"] = {"Ejamat"},
["eka"] = {"Ekajuk"},
["eke"] = {"Ekit"},
["ekg"] = {"Ekari"},
["eki"] = {"Eki"},
["ekk"] = {"Standard Estonian"},
["ekl"] = {"Kol (Bangladesh)", "Kol"},
["ekm"] = {"Elip"},
["eko"] = {"Koti"},
["ekp"] = {"Ekpeye"},
["ekr"] = {"Yace"},
["eky"] = {"Eastern Kayah"},
["ele"] = {"Elepi"},
["elh"] = {"El Hugeirat"},
["eli"] = {"Nding"},
["elk"] = {"Elkei"},
["elm"] = {"Eleme"},
["elo"] = {"El Molo"},
["elu"] = {"Elu"},
["elx"] = {"Elamite"},
["ema"] = {"Emai-Iuleha-Ora"},
["emb"] = {"Embaloh"},
["eme"] = {"Emerillon"},
["emg"] = {"Eastern Meohang"},
["emi"] = {"Mussau-Emira"},
["emk"] = {"Eastern Maninkakan"},
["emm"] = {"Mamulique"},
["emn"] = {"Eman"},
["emp"] = {"Northern Emberá"},
["emq"] = {"Eastern Minyag"},
["ems"] = {"Pacific Gulf Yupik"},
["emu"] = {"Eastern Muria"},
["emw"] = {"Emplawas"},
["emx"] = {"Erromintxela"},
["emy"] = {"Epigraphic Mayan"},
["emz"] = {"Mbessa"},
["ena"] = {"Apali"},
["enb"] = {"Markweeta"},
["enc"] = {"En"},
["end"] = {"Ende"},
["enf"] = {"Forest Enets"},
["enh"] = {"Tundra Enets"},
["enl"] = {"Enlhet"},
["enm"] = {"Middle English (1100-1500)"},
["enn"] = {"Engenni"},
["eno"] = {"Enggano"},
["enq"] = {"Enga"},
["enr"] = {"Emumu", "Emem"},
["enu"] = {"Enu"},
["env"] = {"Enwan (Edo State)"},
["enw"] = {"Enwan (Akwa Ibom State)"},
["enx"] = {"Enxet"},
["eot"] = {"Beti (Côte d'Ivoire)"},
["epi"] = {"Epie"},
["era"] = {"Eravallan"},
["erg"] = {"Sie"},
["erh"] = {"Eruwa"},
["eri"] = {"Ogea"},
["erk"] = {"South Efate"},
["ero"] = {"Horpa"},
["err"] = {"Erre"},
["ers"] = {"Ersu"},
["ert"] = {"Eritai"},
["erw"] = {"Erokwanas"},
["ese"] = {"Ese Ejja"},
["esg"] = {"Aheri Gondi"},
["esh"] = {"Eshtehardi"},
["esi"] = {"North Alaskan Inupiatun"},
["esk"] = {"Northwest Alaska Inupiatun"},
["esl"] = {"Egypt Sign Language"},
["esm"] = {"Esuma"},
["esn"] = {"Salvadoran Sign Language"},
["eso"] = {"Estonian Sign Language"},
["esq"] = {"Esselen"},
["ess"] = {"Central Siberian Yupik"},
["esu"] = {"Central Yupik"},
["esx"] = {"Eskimo-Aleut languages"},
["esy"] = {"Eskayan"},
["etb"] = {"Etebi"},
["etc"] = {"Etchemin"},
["eth"] = {"Ethiopian Sign Language"},
["etn"] = {"Eton (Vanuatu)"},
["eto"] = {"Eton (Cameroon)"},
["etr"] = {"Edolo"},
["ets"] = {"Yekhee"},
["ett"] = {"Etruscan"},
["etu"] = {"Ejagham"},
["etx"] = {"Eten"},
["etz"] = {"Semimi"},
["eud"] = {"Eudeve"},
["euq"] = {"Basque (family)"},
["eve"] = {"Even"},
["evh"] = {"Uvbie"},
["evn"] = {"Evenki"},
["ewo"] = {"Ewondo"},
["ext"] = {"Extremaduran"},
["eya"] = {"Eyak"},
["eyo"] = {"Keiyo"},
["eza"] = {"Ezaa"},
["eze"] = {"Uzekwe"},
["faa"] = {"Fasu"},
["fab"] = {"Fa d'Ambu"},
["fad"] = {"Wagi"},
["faf"] = {"Fagani"},
["fag"] = {"Finongan"},
["fah"] = {"Baissa Fali"},
["fai"] = {"Faiwol"},
["faj"] = {"Faita"},
["fak"] = {"Fang (Cameroon)"},
["fal"] = {"South Fali"},
["fam"] = {"Fam"},
["fan"] = {"Fang (Equatorial Guinea)"},
["fap"] = {"Paloor"},
["far"] = {"Fataleka"},
["fat"] = {"Fanti"},
["fau"] = {"Fayu"},
["fax"] = {"Fala"},
["fay"] = {"Southwestern Fars"},
["faz"] = {"Northwestern Fars"},
["fbl"] = {"West Albay Bikol"},
["fcs"] = {"Quebec Sign Language"},
["fer"] = {"Feroge"},
["ffi"] = {"Foia Foia"},
["ffm"] = {"Maasina Fulfulde"},
["fgr"] = {"Fongoro"},
["fia"] = {"Nobiin"},
["fie"] = {"Fyer"},
["fif"] = {"Faifi"},
["fil"] = {"Filipino", "Pilipino"},
["fip"] = {"Fipa"},
["fir"] = {"Firan"},
["fit"] = {"Tornedalen Finnish", "Meänkieli"},
["fiu"] = {"Finno-Ugrian languages"},
["fiw"] = {"Fiwaga"},
["fkk"] = {"Kirya-Konzəl"},
["fkv"] = {"Kven Finnish"},
["fla"] = {"Kalispel-Pend d'Oreille"},
["flh"] = {"Foau"},
["fli"] = {"Fali"},
["fll"] = {"North Fali"},
["fln"] = {"Flinders Island"},
["flr"] = {"Fuliiru"},
["fly"] = {"Flaaitaal", "Tsotsitaal"},
["fmp"] = {"Fe'fe'"},
["fmu"] = {"Far Western Muria"},
["fnb"] = {"Fanbak"},
["fng"] = {"Fanagalo"},
["fni"] = {"Fania"},
["fod"] = {"Foodo"},
["foi"] = {"Foi"},
["fom"] = {"Foma"},
["fon"] = {"Fon"},
["for"] = {"Fore"},
["fos"] = {"Siraya"},
["fox"] = {"Formosan languages"},
["fpe"] = {"Fernando Po Creole English"},
["fqs"] = {"Fas"},
["frc"] = {"Cajun French"},
["frd"] = {"Fordata"},
["frk"] = {"Frankish"},
["frm"] = {"Middle French (ca. 1400-1600)"},
["fro"] = {"Old French (842-ca. 1400)"},
["frp"] = {"Arpitan", "Francoprovençal"},
["frq"] = {"Forak"},
["frr"] = {"Northern Frisian"},
["frs"] = {"Eastern Frisian"},
["frt"] = {"Fortsenal"},
["fse"] = {"Finnish Sign Language"},
["fsl"] = {"French Sign Language"},
["fss"] = {"Finland-Swedish Sign Language", "finlandssvenskt teckenspråk", "suomenruotsalainen viittomakieli"},
["fub"] = {"Adamawa Fulfulde"},
["fuc"] = {"Pulaar"},
["fud"] = {"East Futuna"},
["fue"] = {"Borgu Fulfulde"},
["fuf"] = {"Pular"},
["fuh"] = {"Western Niger Fulfulde"},
["fui"] = {"Bagirmi Fulfulde"},
["fuj"] = {"Ko"},
["fum"] = {"Fum"},
["fun"] = {"Fulniô"},
["fuq"] = {"Central-Eastern Niger Fulfulde"},
["fur"] = {"Friulian"},
["fut"] = {"Futuna-Aniwa"},
["fuu"] = {"Furu"},
["fuv"] = {"Nigerian Fulfulde"},
["fuy"] = {"Fuyug"},
["fvr"] = {"Fur"},
["fwa"] = {"Fwâi"},
["fwe"] = {"Fwe"},
["gaa"] = {"Ga"},
["gab"] = {"Gabri"},
["gac"] = {"Mixed Great Andamanese"},
["gad"] = {"Gaddang"},
["gae"] = {"Guarequena"},
["gaf"] = {"Gende"},
["gag"] = {"Gagauz"},
["gah"] = {"Alekano"},
["gai"] = {"Borei"},
["gaj"] = {"Gadsup"},
["gak"] = {"Gamkonora"},
["gal"] = {"Galolen"},
["gam"] = {"Kandawo"},
["gan"] = {"Gan Chinese"},
["gao"] = {"Gants"},
["gap"] = {"Gal"},
["gaq"] = {"Gata'"},
["gar"] = {"Galeya"},
["gas"] = {"Adiwasi Garasia"},
["gat"] = {"Kenati"},
["gau"] = {"Mudhili Gadaba"},
["gaw"] = {"Nobonob"},
["gax"] = {"Borana-Arsi-Guji Oromo"},
["gay"] = {"Gayo"},
["gaz"] = {"West Central Oromo"},
["gba"] = {"Gbaya (Central African Republic)"},
["gbb"] = {"Kaytetye"},
["gbd"] = {"Karajarri"},
["gbe"] = {"Niksek"},
["gbf"] = {"Gaikundi"},
["gbg"] = {"Gbanziri"},
["gbh"] = {"Defi Gbe"},
["gbi"] = {"Galela"},
["gbj"] = {"Bodo Gadaba"},
["gbk"] = {"Gaddi"},
["gbl"] = {"Gamit"},
["gbm"] = {"Garhwali"},
["gbn"] = {"Mo'da"},
["gbo"] = {"Northern Grebo"},
["gbp"] = {"Gbaya-Bossangoa"},
["gbq"] = {"Gbaya-Bozoum"},
["gbr"] = {"Gbagyi"},
["gbs"] = {"Gbesi Gbe"},
["gbu"] = {"Gagadu"},
["gbv"] = {"Gbanu"},
["gbw"] = {"Gabi-Gabi"},
["gbx"] = {"Eastern Xwla Gbe"},
["gby"] = {"Gbari"},
["gbz"] = {"Zoroastrian Dari"},
["gcc"] = {"Mali"},
["gcd"] = {"Ganggalida"},
["gce"] = {"Galice"},
["gcf"] = {"Guadeloupean Creole French"},
["gcl"] = {"Grenadian Creole English"},
["gcn"] = {"Gaina"},
["gcr"] = {"Guianese Creole French"},
["gct"] = {"Colonia Tovar German"},
["gda"] = {"Gade Lohar"},
["gdb"] = {"Pottangi Ollar Gadaba"},
["gdc"] = {"Gugu Badhun"},
["gdd"] = {"Gedaged"},
["gde"] = {"Gude"},
["gdf"] = {"Guduf-Gava"},
["gdg"] = {"Ga'dang"},
["gdh"] = {"Gadjerawang", "Gajirrabeng"},
["gdi"] = {"Gundi"},
["gdj"] = {"Gurdjar"},
["gdk"] = {"Gadang"},
["gdl"] = {"Dirasha"},
["gdm"] = {"Laal"},
["gdn"] = {"Umanakaina"},
["gdo"] = {"Ghodoberi"},
["gdq"] = {"Mehri"},
["gdr"] = {"Wipi"},
["gds"] = {"Ghandruk Sign Language"},
["gdt"] = {"Kungardutyi"},
["gdu"] = {"Gudu"},
["gdx"] = {"Godwari"},
["gea"] = {"Geruma"},
["geb"] = {"Kire"},
["gec"] = {"Gboloo Grebo"},
["ged"] = {"Gade"},
["gef"] = {"Gerai"},
["geg"] = {"Gengle"},
["geh"] = {"Hutterite German", "Hutterisch"},
["gei"] = {"Gebe"},
["gej"] = {"Gen"},
["gek"] = {"Ywom"},
["gel"] = {"ut-Ma'in"},
["gem"] = {"Germanic languages"},
["geq"] = {"Geme"},
["ges"] = {"Geser-Gorom"},
["gev"] = {"Eviya"},
["gew"] = {"Gera"},
["gex"] = {"Garre"},
["gey"] = {"Enya"},
["gez"] = {"Geez"},
["gfk"] = {"Patpatar"},
["gft"] = {"Gafat"},
["gga"] = {"Gao"},
["ggb"] = {"Gbii"},
["ggd"] = {"Gugadj"},
["gge"] = {"Gurr-goni"},
["ggg"] = {"Gurgula"},
["ggk"] = {"Kungarakany"},
["ggl"] = {"Ganglau"},
["ggt"] = {"Gitua"},
["ggu"] = {"Gagu", "Gban"},
["ggw"] = {"Gogodala"},
["gha"] = {"Ghadamès"},
["ghc"] = {"Hiberno-Scottish Gaelic"},
["ghe"] = {"Southern Ghale"},
["ghh"] = {"Northern Ghale"},
["ghk"] = {"Geko Karen"},
["ghl"] = {"Ghulfan"},
["ghn"] = {"Ghanongga"},
["gho"] = {"Ghomara"},
["ghr"] = {"Ghera"},
["ghs"] = {"Guhu-Samane"},
["ght"] = {"Kuke", "Kutang Ghale"},
["gia"] = {"Kija"},
["gib"] = {"Gibanawa"},
["gic"] = {"Gail"},
["gid"] = {"Gidar"},
["gie"] = {"Gaɓogbo", "Guébie"},
["gig"] = {"Goaria"},
["gih"] = {"Githabul"},
["gii"] = {"Girirra"},
["gil"] = {"Gilbertese"},
["gim"] = {"Gimi (Eastern Highlands)"},
["gin"] = {"Hinukh"},
["gip"] = {"Gimi (West New Britain)"},
["giq"] = {"Green Gelao"},
["gir"] = {"Red Gelao"},
["gis"] = {"North Giziga"},
["git"] = {"Gitxsan"},
["giu"] = {"Mulao"},
["giw"] = {"White Gelao"},
["gix"] = {"Gilima"},
["giy"] = {"Giyug"},
["giz"] = {"South Giziga"},
["gjk"] = {"Kachi Koli"},
["gjm"] = {"Gunditjmara"},
["gjn"] = {"Gonja"},
["gjr"] = {"Gurindji Kriol"},
["gju"] = {"Gujari"},
["gka"] = {"Guya"},
["gkd"] = {"Magɨ (Madang Province)"},
["gke"] = {"Ndai"},
["gkn"] = {"Gokana"},
["gko"] = {"Kok-Nar"},
["gkp"] = {"Guinea Kpelle"},
["gku"] = {"ǂUngkue"},
["glb"] = {"Belning"},
["glc"] = {"Bon Gula"},
["gld"] = {"Nanai"},
["glh"] = {"Northwest Pashai", "Northwest Pashayi"},
["glj"] = {"Gula Iro"},
["glk"] = {"Gilaki"},
["gll"] = {"Garlali"},
["glo"] = {"Galambu"},
["glr"] = {"Glaro-Twabo"},
["glu"] = {"Gula (Chad)"},
["glw"] = {"Glavda"},
["gly"] = {"Gule"},
["gma"] = {"Gambera"},
["gmb"] = {"Gula'alaa"},
["gmd"] = {"Mághdì"},
["gme"] = {"East Germanic languages"},
["gmg"] = {"Magɨyi"},
["gmh"] = {"Middle High German (ca. 1050-1500)"},
["gml"] = {"Middle Low German"},
["gmm"] = {"Gbaya-Mbodomo"},
["gmn"] = {"Gimnime"},
["gmq"] = {"North Germanic languages"},
["gmr"] = {"Mirning", "Mirniny"},
["gmu"] = {"Gumalu"},
["gmv"] = {"Gamo"},
["gmw"] = {"West Germanic languages"},
["gmx"] = {"Magoma"},
["gmy"] = {"Mycenaean Greek"},
["gmz"] = {"Mgbolizhia"},
["gna"] = {"Kaansa"},
["gnb"] = {"Gangte"},
["gnc"] = {"Guanche"},
["gnd"] = {"Zulgo-Gemzek"},
["gne"] = {"Ganang"},
["gng"] = {"Ngangam"},
["gnh"] = {"Lere"},
["gni"] = {"Gooniyandi"},
["gnj"] = {"Ngen"},
["gnk"] = {"ǁGana"},
["gnl"] = {"Gangulu"},
["gnm"] = {"Ginuman"},
["gnn"] = {"Gumatj"},
["gno"] = {"Northern Gondi"},
["gnq"] = {"Gana"},
["gnr"] = {"Gureng Gureng"},
["gnt"] = {"Guntai"},
["gnu"] = {"Gnau"},
["gnw"] = {"Western Bolivian Guaraní"},
["gnz"] = {"Ganzi"},
["goa"] = {"Guro"},
["gob"] = {"Playero"},
["goc"] = {"Gorakor"},
["god"] = {"Godié"},
["goe"] = {"Gongduk"},
["gof"] = {"Gofa"},
["gog"] = {"Gogo"},
["goh"] = {"Old High German (ca. 750-1050)"},
["goi"] = {"Gobasi"},
["goj"] = {"Gowlan"},
["gok"] = {"Gowli"},
["gol"] = {"Gola"},
["gom"] = {"Goan Konkani"},
["gon"] = {"Gondi"},
["goo"] = {"Gone Dau"},
["gop"] = {"Yeretuar"},
["goq"] = {"Gorap"},
["gor"] = {"Gorontalo"},
["gos"] = {"Gronings"},
["got"] = {"Gothic"},
["gou"] = {"Gavar"},
["gov"] = {"Goo"},
["gow"] = {"Gorowa"},
["gox"] = {"Gobu"},
["goy"] = {"Goundo"},
["goz"] = {"Gozarkhani"},
["gpa"] = {"Gupa-Abawa"},
["gpe"] = {"Ghanaian Pidgin English"},
["gpn"] = {"Taiap"},
["gqa"] = {"Ga'anda"},
["gqi"] = {"Guiqiong"},
["gqn"] = {"Guana (Brazil)"},
["gqr"] = {"Gor"},
["gqu"] = {"Qau"},
["gra"] = {"Rajput Garasia"},
["grb"] = {"Grebo"},
["grc"] = {"Ancient Greek (to 1453)"},
["grd"] = {"Guruntum-Mbaaru"},
["grg"] = {"Madi"},
["grh"] = {"Gbiri-Niragu"},
["gri"] = {"Ghari"},
["grj"] = {"Southern Grebo"},
["grk"] = {"Greek languages"},
["grm"] = {"Kota Marudu Talantang"},
["gro"] = {"Groma"},
["grq"] = {"Gorovu"},
["grr"] = {"Taznatit"},
["grs"] = {"Gresi"},
["grt"] = {"Garo"},
["gru"] = {"Kistane"},
["grv"] = {"Central Grebo"},
["grw"] = {"Gweda"},
["grx"] = {"Guriaso"},
["gry"] = {"Barclayville Grebo"},
["grz"] = {"Guramalum"},
["gse"] = {"Ghanaian Sign Language"},
["gsg"] = {"German Sign Language"},
["gsl"] = {"Gusilay"},
["gsm"] = {"Guatemalan Sign Language"},
["gsn"] = {"Nema", "Gusan"},
["gso"] = {"Southwest Gbaya"},
["gsp"] = {"Wasembo"},
["gss"] = {"Greek Sign Language"},
["gsw"] = {"Swiss German", "Alemannic", "Alsatian"},
["gta"] = {"Guató"},
["gtu"] = {"Aghu-Tharnggala"},
["gua"] = {"Shiki"},
["gub"] = {"Guajajára"},
["guc"] = {"Wayuu"},
["gud"] = {"Yocoboué Dida"},
["gue"] = {"Gurindji"},
["guf"] = {"Gupapuyngu"},
["gug"] = {"Paraguayan Guaraní"},
["guh"] = {"Guahibo"},
["gui"] = {"Eastern Bolivian Guaraní"},
["guk"] = {"Gumuz"},
["gul"] = {"Sea Island Creole English"},
["gum"] = {"Guambiano"},
["gun"] = {"Mbyá Guaraní"},
["guo"] = {"Guayabero"},
["gup"] = {"Gunwinggu"},
["guq"] = {"Aché"},
["gur"] = {"Farefare"},
["gus"] = {"Guinean Sign Language"},
["gut"] = {"Maléku Jaíka"},
["guu"] = {"Yanomamö"},
["guw"] = {"Gun"},
["gux"] = {"Gourmanchéma"},
["guz"] = {"Gusii", "Ekegusii"},
["gva"] = {"Guana (Paraguay)"},
["gvc"] = {"Guanano"},
["gve"] = {"Duwet"},
["gvf"] = {"Golin"},
["gvj"] = {"Guajá"},
["gvl"] = {"Gulay"},
["gvm"] = {"Gurmana"},
["gvn"] = {"Kuku-Yalanji"},
["gvo"] = {"Gavião Do Jiparaná"},
["gvp"] = {"Pará Gavião"},
["gvr"] = {"Gurung"},
["gvs"] = {"Gumawana"},
["gvy"] = {"Guyani"},
["gwa"] = {"Mbato"},
["gwb"] = {"Gwa"},
["gwc"] = {"Gawri", "Kalami"},
["gwd"] = {"Gawwada"},
["gwe"] = {"Gweno"},
["gwf"] = {"Gowro"},
["gwg"] = {"Moo"},
["gwi"] = {"Gwichʼin"},
["gwj"] = {"ǀGwi"},
["gwm"] = {"Awngthim"},
["gwn"] = {"Gwandara"},
["gwr"] = {"Gwere"},
["gwt"] = {"Gawar-Bati"},
["gwu"] = {"Guwamu"},
["gww"] = {"Kwini"},
["gwx"] = {"Gua"},
["gxx"] = {"Wè Southern"},
["gya"] = {"Northwest Gbaya"},
["gyb"] = {"Garus"},
["gyd"] = {"Kayardild"},
["gye"] = {"Gyem"},
["gyf"] = {"Gungabula"},
["gyg"] = {"Gbayi"},
["gyi"] = {"Gyele"},
["gyl"] = {"Gayil"},
["gym"] = {"Ngäbere"},
["gyn"] = {"Guyanese Creole English"},
["gyo"] = {"Gyalsumdo"},
["gyr"] = {"Guarayu"},
["gyy"] = {"Gunya"},
["gyz"] = {"Geji", "Gyaazi"},
["gza"] = {"Ganza"},
["gzi"] = {"Gazi"},
["gzn"] = {"Gane"},
["haa"] = {"Han"},
["hab"] = {"Hanoi Sign Language"},
["hac"] = {"Gurani"},
["had"] = {"Hatam"},
["hae"] = {"Eastern Oromo"},
["haf"] = {"Haiphong Sign Language"},
["hag"] = {"Hanga"},
["hah"] = {"Hahon"},
["hai"] = {"Haida"},
["haj"] = {"Hajong"},
["hak"] = {"Hakka Chinese"},
["hal"] = {"Halang"},
["ham"] = {"Hewa"},
["han"] = {"Hangaza"},
["hao"] = {"Hakö"},
["hap"] = {"Hupla"},
["haq"] = {"Ha"},
["har"] = {"Harari"},
["has"] = {"Haisla"},
["hav"] = {"Havu"},
["haw"] = {"Hawaiian"},
["hax"] = {"Southern Haida"},
["hay"] = {"Haya"},
["haz"] = {"Hazaragi"},
["hba"] = {"Hamba"},
["hbb"] = {"Huba"},
["hbn"] = {"Heiban"},
["hbo"] = {"Ancient Hebrew"},
["hbu"] = {"Habu"},
["hca"] = {"Andaman Creole Hindi"},
["hch"] = {"Huichol"},
["hdn"] = {"Northern Haida"},
["hds"] = {"Honduras Sign Language"},
["hdy"] = {"Hadiyya"},
["hea"] = {"Northern Qiandong Miao"},
["hed"] = {"Herdé"},
["heg"] = {"Helong"},
["heh"] = {"Hehe"},
["hei"] = {"Heiltsuk"},
["hem"] = {"Hemba"},
["hgm"] = {"Haiǁom"},
["hgw"] = {"Haigwai"},
["hhi"] = {"Hoia Hoia"},
["hhr"] = {"Kerak"},
["hhy"] = {"Hoyahoya"},
["hia"] = {"Lamang"},
["hib"] = {"Hibito"},
["hid"] = {"Hidatsa"},
["hif"] = {"Fiji Hindi"},
["hig"] = {"Kamwe"},
["hih"] = {"Pamosu"},
["hii"] = {"Hinduri"},
["hij"] = {"Hijuk"},
["hik"] = {"Seit-Kaitetu"},
["hil"] = {"Hiligaynon"},
["him"] = {"Himachali languages", "Western Pahari languages"},
["hio"] = {"Tsoa"},
["hir"] = {"Himarimã"},
["hit"] = {"Hittite"},
["hiw"] = {"Hiw"},
["hix"] = {"Hixkaryána"},
["hji"] = {"Haji"},
["hka"] = {"Kahe"},
["hke"] = {"Hunde"},
["hkh"] = {"Khah", "Poguli"},
["hkk"] = {"Hunjara-Kaina Ke"},
["hkn"] = {"Mel-Khaonh"},
["hks"] = {"Hong Kong Sign Language", "Heung Kong Sau Yue"},
["hla"] = {"Halia"},
["hlb"] = {"Halbi"},
["hld"] = {"Halang Doan"},
["hle"] = {"Hlersu"},
["hlt"] = {"Matu Chin"},
["hlu"] = {"Hieroglyphic Luwian"},
["hma"] = {"Southern Mashan Hmong", "Southern Mashan Miao"},
["hmb"] = {"Humburi Senni Songhay"},
["hmc"] = {"Central Huishui Hmong", "Central Huishui Miao"},
["hmd"] = {"Large Flowery Miao", "A-hmaos", "Da-Hua Miao"},
["hme"] = {"Eastern Huishui Hmong", "Eastern Huishui Miao"},
["hmf"] = {"Hmong Don"},
["hmg"] = {"Southwestern Guiyang Hmong"},
["hmh"] = {"Southwestern Huishui Hmong", "Southwestern Huishui Miao"},
["hmi"] = {"Northern Huishui Hmong", "Northern Huishui Miao"},
["hmj"] = {"Ge", "Gejia"},
["hmk"] = {"Maek"},
["hml"] = {"Luopohe Hmong", "Luopohe Miao"},
["hmm"] = {"Central Mashan Hmong", "Central Mashan Miao"},
["hmn"] = {"Hmong", "Mong"},
["hmp"] = {"Northern Mashan Hmong", "Northern Mashan Miao"},
["hmq"] = {"Eastern Qiandong Miao"},
["hmr"] = {"Hmar"},
["hms"] = {"Southern Qiandong Miao"},
["hmt"] = {"Hamtai"},
["hmu"] = {"Hamap"},
["hmv"] = {"Hmong Dô"},
["hmw"] = {"Western Mashan Hmong", "Western Mashan Miao"},
["hmx"] = {"Hmong-Mien languages"},
["hmy"] = {"Southern Guiyang Hmong", "Southern Guiyang Miao"},
["hmz"] = {"Hmong Shua", "Sinicized Miao"},
["hna"] = {"Mina (Cameroon)"},
["hnd"] = {"Southern Hindko"},
["hne"] = {"Chhattisgarhi"},
["hng"] = {"Hungu"},
["hnh"] = {"ǁAni"},
["hni"] = {"Hani"},
["hnj"] = {"Hmong Njua", "Mong Leng", "Mong Njua"},
["hnn"] = {"Hanunoo"},
["hno"] = {"Northern Hindko"},
["hns"] = {"Caribbean Hindustani"},
["hnu"] = {"Hung"},
["hoa"] = {"Hoava"},
["hob"] = {"Mari (Madang Province)"},
["hoc"] = {"Ho"},
["hod"] = {"Holma"},
["hoe"] = {"Horom"},
["hoh"] = {"Hobyót"},
["hoi"] = {"Holikachuk"},
["hoj"] = {"Hadothi", "Haroti"},
["hok"] = {"Hokan languages"},
["hol"] = {"Holu"},
["hom"] = {"Homa"},
["hoo"] = {"Holoholo"},
["hop"] = {"Hopi"},
["hor"] = {"Horo"},
["hos"] = {"Ho Chi Minh City Sign Language"},
["hot"] = {"Hote", "Malê"},
["hov"] = {"Hovongan"},
["how"] = {"Honi"},
["hoy"] = {"Holiya"},
["hoz"] = {"Hozo"},
["hpo"] = {"Hpon"},
["hps"] = {"Hawai'i Sign Language (HSL)", "Hawai'i Pidgin Sign Language"},
["hra"] = {"Hrangkhol"},
["hrc"] = {"Niwer Mil"},
["hre"] = {"Hre"},
["hrk"] = {"Haruku"},
["hrm"] = {"Horned Miao"},
["hro"] = {"Haroi"},
["hrp"] = {"Nhirrpi"},
["hrt"] = {"Hértevin"},
["hru"] = {"Hruso"},
["hrw"] = {"Warwar Feni"},
["hrx"] = {"Hunsrik"},
["hrz"] = {"Harzani"},
["hsb"] = {"Upper Sorbian"},
["hsh"] = {"Hungarian Sign Language"},
["hsl"] = {"Hausa Sign Language"},
["hsn"] = {"Xiang Chinese"},
["hss"] = {"Harsusi"},
["hti"] = {"Hoti"},
["hto"] = {"Minica Huitoto"},
["hts"] = {"Hadza"},
["htu"] = {"Hitu"},
["htx"] = {"Middle Hittite"},
["hub"] = {"Huambisa"},
["huc"] = {"ǂHua", "ǂʼAmkhoe"},
["hud"] = {"Huaulu"},
["hue"] = {"San Francisco Del Mar Huave"},
["huf"] = {"Humene"},
["hug"] = {"Huachipaeri"},
["huh"] = {"Huilliche"},
["hui"] = {"Huli"},
["huj"] = {"Northern Guiyang Hmong", "Northern Guiyang Miao"},
["huk"] = {"Hulung"},
["hul"] = {"Hula"},
["hum"] = {"Hungana"},
["huo"] = {"Hu"},
["hup"] = {"Hupa"},
["huq"] = {"Tsat"},
["hur"] = {"Halkomelem"},
["hus"] = {"Huastec"},
["hut"] = {"Humla"},
["huu"] = {"Murui Huitoto"},
["huv"] = {"San Mateo Del Mar Huave"},
["huw"] = {"Hukumina"},
["hux"] = {"Nüpode Huitoto"},
["huy"] = {"Hulaulá"},
["huz"] = {"Hunzib"},
["hvc"] = {"Haitian Vodoun Culture Language"},
["hve"] = {"San Dionisio Del Mar Huave"},
["hvk"] = {"Haveke"},
["hvn"] = {"Sabu"},
["hvv"] = {"Santa María Del Mar Huave"},
["hwa"] = {"Wané"},
["hwc"] = {"Hawai'i Creole English", "Hawai'i Pidgin"},
["hwo"] = {"Hwana"},
["hya"] = {"Hya"},
["hyw"] = {"Western Armenian"},
["hyx"] = {"Armenian (family)"},
["iai"] = {"Iaai"},
["ian"] = {"Iatmul"},
["iar"] = {"Purari"},
["iba"] = {"Iban"},
["ibb"] = {"Ibibio"},
["ibd"] = {"Iwaidja"},
["ibe"] = {"Akpes"},
["ibg"] = {"Ibanag"},
["ibh"] = {"Bih"},
["ibl"] = {"Ibaloi"},
["ibm"] = {"Agoi"},
["ibn"] = {"Ibino"},
["ibr"] = {"Ibuoro"},
["ibu"] = {"Ibu"},
["iby"] = {"Ibani"},
["ica"] = {"Ede Ica"},
["ich"] = {"Etkywan"},
["icl"] = {"Icelandic Sign Language"},
["icr"] = {"Islander Creole English"},
["ida"] = {"Idakho-Isukha-Tiriki", "Luidakho-Luisukha-Lutirichi"},
["idb"] = {"Indo-Portuguese"},
["idc"] = {"Idon", "Ajiya"},
["idd"] = {"Ede Idaca"},
["ide"] = {"Idere"},
["idi"] = {"Idi"},
["idr"] = {"Indri"},
["ids"] = {"Idesa"},
["idt"] = {"Idaté"},
["idu"] = {"Idoma"},
["ifa"] = {"Amganad Ifugao"},
["ifb"] = {"Batad Ifugao", "Ayangan Ifugao"},
["ife"] = {"Ifè"},
["iff"] = {"Ifo"},
["ifk"] = {"Tuwali Ifugao"},
["ifm"] = {"Teke-Fuumu"},
["ifu"] = {"Mayoyao Ifugao"},
["ify"] = {"Keley-I Kallahan"},
["igb"] = {"Ebira"},
["ige"] = {"Igede"},
["igg"] = {"Igana"},
["igl"] = {"Igala"},
["igm"] = {"Kanggape"},
["ign"] = {"Ignaciano"},
["igo"] = {"Isebe"},
["igs"] = {"Interglossa"},
["igw"] = {"Igwe"},
["ihb"] = {"Iha Based Pidgin"},
["ihi"] = {"Ihievbe"},
["ihp"] = {"Iha"},
["ihw"] = {"Bidhawal"},
["iin"] = {"Thiin"},
["iir"] = {"Indo-Iranian languages"},
["ijc"] = {"Izon"},
["ije"] = {"Biseni"},
["ijj"] = {"Ede Ije"},
["ijn"] = {"Kalabari"},
["ijo"] = {"Ijo languages"},
["ijs"] = {"Southeast Ijo"},
["ike"] = {"Eastern Canadian Inuktitut"},
["ikh"] = {"Ikhin-Arokho"},
["iki"] = {"Iko"},
["ikk"] = {"Ika"},
["ikl"] = {"Ikulu"},
["iko"] = {"Olulumo-Ikom"},
["ikp"] = {"Ikpeshi"},
["ikr"] = {"Ikaranggal"},
["iks"] = {"Inuit Sign Language"},
["ikt"] = {"Inuinnaqtun", "Western Canadian Inuktitut"},
["ikv"] = {"Iku-Gora-Ankwa"},
["ikw"] = {"Ikwere"},
["ikx"] = {"Ik"},
["ikz"] = {"Ikizu"},
["ila"] = {"Ile Ape"},
["ilb"] = {"Ila"},
["ilg"] = {"Garig-Ilgar"},
["ili"] = {"Ili Turki"},
["ilk"] = {"Ilongot"},
["ilm"] = {"Iranun (Malaysia)"},
["ilo"] = {"Iloko"},
["ilp"] = {"Iranun (Philippines)"},
["ils"] = {"International Sign"},
["ilu"] = {"Ili'uun"},
["ilv"] = {"Ilue"},
["ima"] = {"Mala Malasar"},
["imi"] = {"Anamgura"},
["iml"] = {"Miluk"},
["imn"] = {"Imonda"},
["imo"] = {"Imbongu"},
["imr"] = {"Imroing"},
["ims"] = {"Marsian"},
["imt"] = {"Imotong"},
["imy"] = {"Milyan"},
["inb"] = {"Inga"},
["inc"] = {"Indic languages"},
["ine"] = {"Indo-European languages"},
["ing"] = {"Degexit'an"},
["inh"] = {"Ingush"},
["inj"] = {"Jungle Inga"},
["inl"] = {"Indonesian Sign Language"},
["inm"] = {"Minaean"},
["inn"] = {"Isinai"},
["ino"] = {"Inoke-Yate"},
["inp"] = {"Iñapari"},
["ins"] = {"Indian Sign Language"},
["int"] = {"Intha"},
["inz"] = {"Ineseño"},
["ior"] = {"Inor"},
["iou"] = {"Tuma-Irumu"},
["iow"] = {"Iowa-Oto"},
["ipi"] = {"Ipili"},
["ipo"] = {"Ipiko"},
["iqu"] = {"Iquito"},
["iqw"] = {"Ikwo"},
["ira"] = {"Iranian languages"},
["ire"] = {"Iresim"},
["irh"] = {"Irarutu"},
["iri"] = {"Rigwe", "Irigwe"},
["irk"] = {"Iraqw"},
["irn"] = {"Irántxe"},
["iro"] = {"Iroquoian languages"},
["irr"] = {"Ir"},
["iru"] = {"Irula"},
["irx"] = {"Kamberau"},
["iry"] = {"Iraya"},
["isa"] = {"Isabi"},
["isc"] = {"Isconahua"},
["isd"] = {"Isnag"},
["ise"] = {"Italian Sign Language"},
["isg"] = {"Irish Sign Language"},
["ish"] = {"Esan"},
["isi"] = {"Nkem-Nkum"},
["isk"] = {"Ishkashimi"},
["ism"] = {"Masimasi"},
["isn"] = {"Isanzu"},
["iso"] = {"Isoko"},
["isr"] = {"Israeli Sign Language"},
["ist"] = {"Istriot"},
["isu"] = {"Isu (Menchum Division)"},
["itb"] = {"Binongan Itneg"},
["itc"] = {"Italic languages"},
["itd"] = {"Southern Tidung"},
["ite"] = {"Itene"},
["iti"] = {"Inlaod Itneg"},
["itk"] = {"Judeo-Italian"},
["itl"] = {"Itelmen"},
["itm"] = {"Itu Mbon Uzo"},
["ito"] = {"Itonama"},
["itr"] = {"Iteri"},
["its"] = {"Isekiri"},
["itt"] = {"Maeng Itneg"},
["itv"] = {"Itawit"},
["itw"] = {"Ito"},
["itx"] = {"Itik"},
["ity"] = {"Moyadan Itneg"},
["itz"] = {"Itzá"},
["ium"] = {"Iu Mien"},
["ivb"] = {"Ibatan"},
["ivv"] = {"Ivatan"},
["iwk"] = {"I-Wak"},
["iwm"] = {"Iwam"},
["iwo"] = {"Iwur"},
["iws"] = {"Sepik Iwam"},
["ixc"] = {"Ixcatec"},
["ixl"] = {"Ixil"},
["iya"] = {"Iyayu"},
["iyo"] = {"Mesaka"},
["iyx"] = {"Yaka (Congo)"},
["izh"] = {"Ingrian"},
["izm"] = {"Kizamani"},
["izr"] = {"Izere"},
["izz"] = {"Izii"},
["jaa"] = {"Jamamadí"},
["jab"] = {"Hyam"},
["jac"] = {"Popti'", "Jakalteko"},
["jad"] = {"Jahanka"},
["jae"] = {"Yabem"},
["jaf"] = {"Jara"},
["jah"] = {"Jah Hut"},
["jaj"] = {"Zazao"},
["jak"] = {"Jakun"},
["jal"] = {"Yalahatan"},
["jam"] = {"Jamaican Creole English"},
["jan"] = {"Jandai"},
["jao"] = {"Yanyuwa"},
["jaq"] = {"Yaqay"},
["jas"] = {"New Caledonian Javanese"},
["jat"] = {"Jakati"},
["jau"] = {"Yaur"},
["jax"] = {"Jambi Malay"},
["jay"] = {"Yan-nhangu", "Nhangu"},
["jaz"] = {"Jawe"},
["jbe"] = {"Judeo-Berber"},
["jbi"] = {"Badjiri"},
["jbj"] = {"Arandai"},
["jbk"] = {"Barikewa"},
["jbm"] = {"Bijim"},
["jbn"] = {"Nafusi"},
["jbo"] = {"Lojban"},
["jbr"] = {"Jofotek-Bromnya"},
["jbt"] = {"Jabutí"},
["jbu"] = {"Jukun Takum"},
["jbw"] = {"Yawijibaya"},
["jcs"] = {"Jamaican Country Sign Language"},
["jct"] = {"Krymchak"},
["jda"] = {"Jad"},
["jdg"] = {"Jadgali"},
["jdt"] = {"Judeo-Tat"},
["jeb"] = {"Jebero"},
["jee"] = {"Jerung"},
["jeh"] = {"Jeh"},
["jei"] = {"Yei"},
["jek"] = {"Jeri Kuo"},
["jel"] = {"Yelmek"},
["jen"] = {"Dza"},
["jer"] = {"Jere"},
["jet"] = {"Manem"},
["jeu"] = {"Jonkor Bourmataguil"},
["jgb"] = {"Ngbee"},
["jge"] = {"Judeo-Georgian"},
["jgk"] = {"Gwak"},
["jgo"] = {"Ngomba"},
["jhi"] = {"Jehai"},
["jhs"] = {"Jhankot Sign Language"},
["jia"] = {"Jina"},
["jib"] = {"Jibu"},
["jic"] = {"Tol"},
["jid"] = {"Bu (Kaduna State)"},
["jie"] = {"Jilbe"},
["jig"] = {"Jingulu", "Djingili"},
["jih"] = {"sTodsde", "Shangzhai"},
["jii"] = {"Jiiddu"},
["jil"] = {"Jilim"},
["jim"] = {"Jimi (Cameroon)"},
["jio"] = {"Jiamao"},
["jiq"] = {"Guanyinqiao", "Lavrung"},
["jit"] = {"Jita"},
["jiu"] = {"Youle Jinuo"},
["jiv"] = {"Shuar"},
["jiy"] = {"Buyuan Jinuo"},
["jje"] = {"Jejueo"},
["jjr"] = {"Bankal"},
["jka"] = {"Kaera"},
["jkm"] = {"Mobwa Karen"},
["jko"] = {"Kubo"},
["jkp"] = {"Paku Karen"},
["jkr"] = {"Koro (India)"},
["jks"] = {"Amami Koniya Sign Language"},
["jku"] = {"Labir"},
["jle"] = {"Ngile"},
["jls"] = {"Jamaican Sign Language"},
["jma"] = {"Dima"},
["jmb"] = {"Zumbun"},
["jmc"] = {"Machame"},
["jmd"] = {"Yamdena"},
["jmi"] = {"Jimi (Nigeria)"},
["jml"] = {"Jumli"},
["jmn"] = {"Makuri Naga"},
["jmr"] = {"Kamara"},
["jms"] = {"Mashi (Nigeria)"},
["jmw"] = {"Mouwase"},
["jmx"] = {"Western Juxtlahuaca Mixtec"},
["jna"] = {"Jangshung"},
["jnd"] = {"Jandavra"},
["jng"] = {"Yangman"},
["jni"] = {"Janji"},
["jnj"] = {"Yemsa"},
["jnl"] = {"Rawat"},
["jns"] = {"Jaunsari"},
["job"] = {"Joba"},
["jod"] = {"Wojenaka"},
["jog"] = {"Jogi"},
["jor"] = {"Jorá"},
["jos"] = {"Jordanian Sign Language"},
["jow"] = {"Jowulu"},
["jpa"] = {"Jewish Palestinian Aramaic"},
["jpr"] = {"Judeo-Persian"},
["jpx"] = {"Japanese (family)"},
["jqr"] = {"Jaqaru"},
["jra"] = {"Jarai"},
["jrb"] = {"Judeo-Arabic"},
["jrr"] = {"Jiru"},
["jrt"] = {"Jakattoe"},
["jru"] = {"Japrería"},
["jsl"] = {"Japanese Sign Language"},
["jua"] = {"Júma"},
["jub"] = {"Wannu"},
["juc"] = {"Jurchen"},
["jud"] = {"Worodougou"},
["juh"] = {"Hõne"},
["jui"] = {"Ngadjuri"},
["juk"] = {"Wapan"},
["jul"] = {"Jirel"},
["jum"] = {"Jumjum"},
["jun"] = {"Juang"},
["juo"] = {"Jiba"},
["jup"] = {"Hupdë"},
["jur"] = {"Jurúna"},
["jus"] = {"Jumla Sign Language"},
["jut"] = {"Jutish"},
["juu"] = {"Ju"},
["juw"] = {"Wãpha"},
["juy"] = {"Juray"},
["jvd"] = {"Javindo"},
["jvn"] = {"Caribbean Javanese"},
["jwi"] = {"Jwira-Pepesa"},
["jya"] = {"Jiarong"},
["jye"] = {"Judeo-Yemeni Arabic"},
["jyy"] = {"Jaya"},
["kaa"] = {"Kara-Kalpak", "Karakalpak"},
["kab"] = {"Kabyle"},
["kac"] = {"Kachin", "Jingpho"},
["kad"] = {"Adara"},
["kae"] = {"Ketangalan"},
["kaf"] = {"Katso"},
["kag"] = {"Kajaman"},
["kah"] = {"Kara (Central African Republic)"},
["kai"] = {"Karekare"},
["kaj"] = {"Jju"},
["kak"] = {"Kalanguya", "Kayapa Kallahan"},
["kam"] = {"Kamba (Kenya)"},
["kao"] = {"Xaasongaxango"},
["kap"] = {"Bezhta"},
["kaq"] = {"Capanahua"},
["kar"] = {"Karen languages"},
["kav"] = {"Katukína"},
["kaw"] = {"Kawi"},
["kax"] = {"Kao"},
["kay"] = {"Kamayurá"},
["kba"] = {"Kalarko"},
["kbb"] = {"Kaxuiâna"},
["kbc"] = {"Kadiwéu"},
["kbd"] = {"Kabardian"},
["kbe"] = {"Kanju"},
["kbg"] = {"Khamba"},
["kbh"] = {"Camsá"},
["kbi"] = {"Kaptiau"},
["kbj"] = {"Kari"},
["kbk"] = {"Grass Koiari"},
["kbl"] = {"Kanembu"},
["kbm"] = {"Iwal"},
["kbn"] = {"Kare (Central African Republic)"},
["kbo"] = {"Keliko"},
["kbp"] = {"Kabiyè"},
["kbq"] = {"Kamano"},
["kbr"] = {"Kafa"},
["kbs"] = {"Kande"},
["kbt"] = {"Abadi"},
["kbu"] = {"Kabutra"},
["kbv"] = {"Dera (Indonesia)"},
["kbw"] = {"Kaiep"},
["kbx"] = {"Ap Ma"},
["kby"] = {"Manga Kanuri"},
["kbz"] = {"Duhwa"},
["kca"] = {"Khanty"},
["kcb"] = {"Kawacha"},
["kcc"] = {"Lubila"},
["kcd"] = {"Ngkâlmpw Kanum"},
["kce"] = {"Kaivi"},
["kcf"] = {"Ukaan"},
["kcg"] = {"Tyap"},
["kch"] = {"Vono"},
["kci"] = {"Kamantan"},
["kcj"] = {"Kobiana"},
["kck"] = {"Kalanga"},
["kcl"] = {"Kela (Papua New Guinea)", "Kala"},
["kcm"] = {"Gula (Central African Republic)"},
["kcn"] = {"Nubi"},
["kco"] = {"Kinalakna"},
["kcp"] = {"Kanga"},
["kcq"] = {"Kamo"},
["kcr"] = {"Katla"},
["kcs"] = {"Koenoem"},
["kct"] = {"Kaian"},
["kcu"] = {"Kami (Tanzania)"},
["kcv"] = {"Kete"},
["kcw"] = {"Kabwari"},
["kcx"] = {"Kachama-Ganjule"},
["kcy"] = {"Korandje"},
["kcz"] = {"Konongo"},
["kda"] = {"Worimi"},
["kdc"] = {"Kutu"},
["kdd"] = {"Yankunytjatjara"},
["kde"] = {"Makonde"},
["kdf"] = {"Mamusi"},
["kdg"] = {"Seba"},
["kdh"] = {"Tem"},
["kdi"] = {"Kumam"},
["kdj"] = {"Karamojong"},
["kdk"] = {"Numèè", "Kwényi"},
["kdl"] = {"Tsikimba"},
["kdm"] = {"Kagoma"},
["kdn"] = {"Kunda"},
["kdo"] = {"Kordofanian languages"},
["kdp"] = {"Kaningdon-Nindem"},
["kdq"] = {"Koch"},
["kdr"] = {"Karaim"},
["kdt"] = {"Kuy"},
["kdu"] = {"Kadaru"},
["kdw"] = {"Koneraw"},
["kdx"] = {"Kam"},
["kdy"] = {"Keder", "Keijar"},
["kdz"] = {"Kwaja"},
["kea"] = {"Kabuverdianu"},
["keb"] = {"Kélé"},
["kec"] = {"Keiga"},
["ked"] = {"Kerewe"},
["kee"] = {"Eastern Keres"},
["kef"] = {"Kpessi"},
["keg"] = {"Tese"},
["keh"] = {"Keak"},
["kei"] = {"Kei"},
["kej"] = {"Kadar"},
["kek"] = {"Kekchí"},
["kel"] = {"Kela (Democratic Republic of Congo)"},
["kem"] = {"Kemak"},
["ken"] = {"Kenyang"},
["keo"] = {"Kakwa"},
["kep"] = {"Kaikadi"},
["keq"] = {"Kamar"},
["ker"] = {"Kera"},
["kes"] = {"Kugbo"},
["ket"] = {"Ket"},
["keu"] = {"Akebu"},
["kev"] = {"Kanikkaran"},
["kew"] = {"West Kewa"},
["kex"] = {"Kukna"},
["key"] = {"Kupia"},
["kez"] = {"Kukele"},
["kfa"] = {"Kodava"},
["kfb"] = {"Northwestern Kolami"},
["kfc"] = {"Konda-Dora"},
["kfd"] = {"Korra Koraga"},
["kfe"] = {"Kota (India)"},
["kff"] = {"Koya"},
["kfg"] = {"Kudiya"},
["kfh"] = {"Kurichiya"},
["kfi"] = {"Kannada Kurumba"},
["kfj"] = {"Kemiehua"},
["kfk"] = {"Kinnauri"},
["kfl"] = {"Kung"},
["kfm"] = {"Khunsari"},
["kfn"] = {"Kuk"},
["kfo"] = {"Koro (Côte d'Ivoire)"},
["kfp"] = {"Korwa"},
["kfq"] = {"Korku"},
["kfr"] = {"Kachhi", "Kutchi"},
["kfs"] = {"Bilaspuri"},
["kft"] = {"Kanjari"},
["kfu"] = {"Katkari"},
["kfv"] = {"Kurmukar"},
["kfw"] = {"Kharam Naga"},
["kfx"] = {"Kullu Pahari"},
["kfy"] = {"Kumaoni"},
["kfz"] = {"Koromfé"},
["kga"] = {"Koyaga"},
["kgb"] = {"Kawe"},
["kge"] = {"Komering"},
["kgf"] = {"Kube"},
["kgg"] = {"Kusunda"},
["kgi"] = {"Selangor Sign Language"},
["kgj"] = {"Gamale Kham"},
["kgk"] = {"Kaiwá"},
["kgl"] = {"Kunggari"},
["kgn"] = {"Karingani"},
["kgo"] = {"Krongo"},
["kgp"] = {"Kaingang"},
["kgq"] = {"Kamoro"},
["kgr"] = {"Abun"},
["kgs"] = {"Kumbainggar"},
["kgt"] = {"Somyev"},
["kgu"] = {"Kobol"},
["kgv"] = {"Karas"},
["kgw"] = {"Karon Dori"},
["kgx"] = {"Kamaru"},
["kgy"] = {"Kyerung"},
["kha"] = {"Khasi"},
["khb"] = {"Lü"},
["khc"] = {"Tukang Besi North"},
["khd"] = {"Bädi Kanum"},
["khe"] = {"Korowai"},
["khf"] = {"Khuen"},
["khg"] = {"Khams Tibetan"},
["khh"] = {"Kehu"},
["khi"] = {"Khoisan languages"},
["khj"] = {"Kuturmi"},
["khk"] = {"Halh Mongolian"},
["khl"] = {"Lusi"},
["khn"] = {"Khandesi"},
["kho"] = {"Khotanese", "Sakan"},
["khp"] = {"Kapori", "Kapauri"},
["khq"] = {"Koyra Chiini Songhay"},
["khr"] = {"Kharia"},
["khs"] = {"Kasua"},
["kht"] = {"Khamti"},
["khu"] = {"Nkhumbi"},
["khv"] = {"Khvarshi"},
["khw"] = {"Khowar"},
["khx"] = {"Kanu"},
["khy"] = {"Kele (Democratic Republic of Congo)"},
["khz"] = {"Keapara"},
["kia"] = {"Kim"},
["kib"] = {"Koalib"},
["kic"] = {"Kickapoo"},
["kid"] = {"Koshin"},
["kie"] = {"Kibet"},
["kif"] = {"Eastern Parbate Kham"},
["kig"] = {"Kimaama", "Kimaghima"},
["kih"] = {"Kilmeri"},
["kii"] = {"Kitsai"},
["kij"] = {"Kilivila"},
["kil"] = {"Kariya"},
["kim"] = {"Karagas"},
["kio"] = {"Kiowa"},
["kip"] = {"Sheshi Kham"},
["kiq"] = {"Kosadle", "Kosare"},
["kis"] = {"Kis"},
["kit"] = {"Agob"},
["kiu"] = {"Kirmanjki (individual language)"},
["kiv"] = {"Kimbu"},
["kiw"] = {"Northeast Kiwai"},
["kix"] = {"Khiamniungan Naga"},
["kiy"] = {"Kirikiri"},
["kiz"] = {"Kisi"},
["kja"] = {"Mlap"},
["kjb"] = {"Q'anjob'al", "Kanjobal"},
["kjc"] = {"Coastal Konjo"},
["kjd"] = {"Southern Kiwai"},
["kje"] = {"Kisar"},
["kjg"] = {"Khmu"},
["kjh"] = {"Khakas"},
["kji"] = {"Zabana"},
["kjj"] = {"Khinalugh"},
["kjk"] = {"Highland Konjo"},
["kjl"] = {"Western Parbate Kham"},
["kjm"] = {"Kháng"},
["kjn"] = {"Kunjen"},
["kjo"] = {"Harijan Kinnauri"},
["kjp"] = {"Pwo Eastern Karen"},
["kjq"] = {"Western Keres"},
["kjr"] = {"Kurudu"},
["kjs"] = {"East Kewa"},
["kjt"] = {"Phrae Pwo Karen"},
["kju"] = {"Kashaya"},
["kjv"] = {"Kaikavian Literary Language"},
["kjx"] = {"Ramopa"},
["kjy"] = {"Erave"},
["kjz"] = {"Bumthangkha"},
["kka"] = {"Kakanda"},
["kkb"] = {"Kwerisa"},
["kkc"] = {"Odoodee"},
["kkd"] = {"Kinuku"},
["kke"] = {"Kakabe"},
["kkf"] = {"Kalaktang Monpa"},
["kkg"] = {"Mabaka Valley Kalinga"},
["kkh"] = {"Khün"},
["kki"] = {"Kagulu"},
["kkj"] = {"Kako"},
["kkk"] = {"Kokota"},
["kkl"] = {"Kosarek Yale"},
["kkm"] = {"Kiong"},
["kkn"] = {"Kon Keu"},
["kko"] = {"Karko"},
["kkp"] = {"Gugubera", "Koko-Bera"},
["kkq"] = {"Kaeku"},
["kkr"] = {"Kir-Balar"},
["kks"] = {"Giiwo"},
["kkt"] = {"Koi"},
["kku"] = {"Tumi"},
["kkv"] = {"Kangean"},
["kkw"] = {"Teke-Kukuya"},
["kkx"] = {"Kohin"},
["kky"] = {"Guugu Yimidhirr", "Guguyimidjir"},
["kkz"] = {"Kaska"},
["kla"] = {"Klamath-Modoc"},
["klb"] = {"Kiliwa"},
["klc"] = {"Kolbila"},
["kld"] = {"Gamilaraay"},
["kle"] = {"Kulung (Nepal)"},
["klf"] = {"Kendeje"},
["klg"] = {"Tagakaulo"},
["klh"] = {"Weliki"},
["kli"] = {"Kalumpang"},
["klj"] = {"Khalaj"},
["klk"] = {"Kono (Nigeria)"},
["kll"] = {"Kagan Kalagan"},
["klm"] = {"Migum"},
["kln"] = {"Kalenjin"},
["klo"] = {"Kapya"},
["klp"] = {"Kamasa"},
["klq"] = {"Rumu"},
["klr"] = {"Khaling"},
["kls"] = {"Kalasha"},
["klt"] = {"Nukna"},
["klu"] = {"Klao"},
["klv"] = {"Maskelynes"},
["klw"] = {"Tado", "Lindu"},
["klx"] = {"Koluwawa"},
["kly"] = {"Kalao"},
["klz"] = {"Kabola"},
["kma"] = {"Konni"},
["kmb"] = {"Kimbundu"},
["kmc"] = {"Southern Dong"},
["kmd"] = {"Majukayang Kalinga"},
["kme"] = {"Bakole"},
["kmf"] = {"Kare (Papua New Guinea)"},
["kmg"] = {"Kâte"},
["kmh"] = {"Kalam"},
["kmi"] = {"Kami (Nigeria)"},
["kmj"] = {"Kumarbhag Paharia"},
["kmk"] = {"Limos Kalinga"},
["kml"] = {"Tanudan Kalinga"},
["kmm"] = {"Kom (India)"},
["kmn"] = {"Awtuw"},
["kmo"] = {"Kwoma"},
["kmp"] = {"Gimme"},
["kmq"] = {"Kwama"},
["kmr"] = {"Northern Kurdish"},
["kms"] = {"Kamasau"},
["kmt"] = {"Kemtuik"},
["kmu"] = {"Kanite"},
["kmv"] = {"Karipúna Creole French"},
["kmw"] = {"Komo (Democratic Republic of Congo)"},
["kmx"] = {"Waboda"},
["kmy"] = {"Koma"},
["kmz"] = {"Khorasani Turkish"},
["kna"] = {"Dera (Nigeria)"},
["knb"] = {"Lubuagan Kalinga"},
["knc"] = {"Central Kanuri"},
["knd"] = {"Konda"},
["kne"] = {"Kankanaey"},
["knf"] = {"Mankanya"},
["kng"] = {"Koongo"},
["kni"] = {"Kanufi"},
["knj"] = {"Western Kanjobal"},
["knk"] = {"Kuranko"},
["knl"] = {"Keninjal"},
["knm"] = {"Kanamarí"},
["knn"] = {"Konkani (individual language)"},
["kno"] = {"Kono (Sierra Leone)"},
["knp"] = {"Kwanja"},
["knq"] = {"Kintaq"},
["knr"] = {"Kaningra"},
["kns"] = {"Kensiu"},
["knt"] = {"Panoan Katukína"},
["knu"] = {"Kono (Guinea)"},
["knv"] = {"Tabo"},
["knw"] = {"Kung-Ekoka"},
["knx"] = {"Kendayan", "Salako"},
["kny"] = {"Kanyok"},
["knz"] = {"Kalamsé"},
["koa"] = {"Konomala"},
["koc"] = {"Kpati"},
["kod"] = {"Kodi"},
["koe"] = {"Kacipo-Bale Suri"},
["kof"] = {"Kubi"},
["kog"] = {"Cogui", "Kogi"},
["koh"] = {"Koyo"},
["koi"] = {"Komi-Permyak"},
["kok"] = {"Konkani (macrolanguage)"},
["kol"] = {"Kol (Papua New Guinea)"},
["koo"] = {"Konzo"},
["kop"] = {"Waube"},
["koq"] = {"Kota (Gabon)"},
["kos"] = {"Kosraean"},
["kot"] = {"Lagwan"},
["kou"] = {"Koke"},
["kov"] = {"Kudu-Camo"},
["kow"] = {"Kugama"},
["koy"] = {"Koyukon"},
["koz"] = {"Korak"},
["kpa"] = {"Kutto"},
["kpb"] = {"Mullu Kurumba"},
["kpc"] = {"Curripaco"},
["kpd"] = {"Koba"},
["kpe"] = {"Kpelle"},
["kpf"] = {"Komba"},
["kpg"] = {"Kapingamarangi"},
["kph"] = {"Kplang"},
["kpi"] = {"Kofei"},
["kpj"] = {"Karajá"},
["kpk"] = {"Kpan"},
["kpl"] = {"Kpala"},
["kpm"] = {"Koho"},
["kpn"] = {"Kepkiriwát"},
["kpo"] = {"Ikposo"},
["kpq"] = {"Korupun-Sela"},
["kpr"] = {"Korafe-Yegha"},
["kps"] = {"Tehit"},
["kpt"] = {"Karata"},
["kpu"] = {"Kafoa"},
["kpv"] = {"Komi-Zyrian"},
["kpw"] = {"Kobon"},
["kpx"] = {"Mountain Koiali"},
["kpy"] = {"Koryak"},
["kpz"] = {"Kupsabiny"},
["kqa"] = {"Mum"},
["kqb"] = {"Kovai"},
["kqc"] = {"Doromu-Koki"},
["kqd"] = {"Koy Sanjaq Surat"},
["kqe"] = {"Kalagan"},
["kqf"] = {"Kakabai"},
["kqg"] = {"Khe"},
["kqh"] = {"Kisankasa"},
["kqi"] = {"Koitabu"},
["kqj"] = {"Koromira"},
["kqk"] = {"Kotafon Gbe"},
["kql"] = {"Kyenele"},
["kqm"] = {"Khisa"},
["kqn"] = {"Kaonde"},
["kqo"] = {"Eastern Krahn"},
["kqp"] = {"Kimré"},
["kqq"] = {"Krenak"},
["kqr"] = {"Kimaragang"},
["kqs"] = {"Northern Kissi"},
["kqt"] = {"Klias River Kadazan"},
["kqu"] = {"Seroa"},
["kqv"] = {"Okolod"},
["kqw"] = {"Kandas"},
["kqx"] = {"Mser"},
["kqy"] = {"Koorete"},
["kqz"] = {"Korana"},
["kra"] = {"Kumhali"},
["krb"] = {"Karkin"},
["krc"] = {"Karachay-Balkar"},
["krd"] = {"Kairui-Midiki"},
["kre"] = {"Panará"},
["krf"] = {"Koro (Vanuatu)"},
["krh"] = {"Kurama"},
["kri"] = {"Krio"},
["krj"] = {"Kinaray-A"},
["krk"] = {"Kerek"},
["krl"] = {"Karelian"},
["krn"] = {"Sapo"},
["kro"] = {"Kru languages"},
["krp"] = {"Durop"},
["krr"] = {"Krung"},
["krs"] = {"Gbaya (Sudan)"},
["krt"] = {"Tumari Kanuri"},
["kru"] = {"Kurukh"},
["krv"] = {"Kavet"},
["krw"] = {"Western Krahn"},
["krx"] = {"Karon"},
["kry"] = {"Kryts"},
["krz"] = {"Sota Kanum"},
["ksb"] = {"Shambala"},
["ksc"] = {"Southern Kalinga"},
["ksd"] = {"Kuanua"},
["kse"] = {"Kuni"},
["ksf"] = {"Bafia"},
["ksg"] = {"Kusaghe"},
["ksh"] = {"Kölsch"},
["ksi"] = {"Krisa", "I'saka"},
["ksj"] = {"Uare"},
["ksk"] = {"Kansa"},
["ksl"] = {"Kumalu"},
["ksm"] = {"Kumba"},
["ksn"] = {"Kasiguranin"},
["kso"] = {"Kofa"},
["ksp"] = {"Kaba"},
["ksq"] = {"Kwaami"},
["ksr"] = {"Borong"},
["kss"] = {"Southern Kisi"},
["kst"] = {"Winyé"},
["ksu"] = {"Khamyang"},
["ksv"] = {"Kusu"},
["ksw"] = {"S'gaw Karen"},
["ksx"] = {"Kedang"},
["ksy"] = {"Kharia Thar"},
["ksz"] = {"Kodaku"},
["kta"] = {"Katua"},
["ktb"] = {"Kambaata"},
["ktc"] = {"Kholok"},
["ktd"] = {"Kokata", "Kukatha"},
["kte"] = {"Nubri"},
["ktf"] = {"Kwami"},
["ktg"] = {"Kalkutung"},
["kth"] = {"Karanga"},
["kti"] = {"North Muyu"},
["ktj"] = {"Plapo Krumen"},
["ktk"] = {"Kaniet"},
["ktl"] = {"Koroshi"},
["ktm"] = {"Kurti"},
["ktn"] = {"Karitiâna"},
["kto"] = {"Kuot"},
["ktp"] = {"Kaduo"},
["ktq"] = {"Katabaga"},
["kts"] = {"South Muyu"},
["ktt"] = {"Ketum"},
["ktu"] = {"Kituba (Democratic Republic of Congo)"},
["ktv"] = {"Eastern Katu"},
["ktw"] = {"Kato"},
["ktx"] = {"Kaxararí"},
["kty"] = {"Kango (Bas-Uélé District)"},
["ktz"] = {"Juǀʼhoan", "Juǀʼhoansi"},
["kub"] = {"Kutep"},
["kuc"] = {"Kwinsu"},
["kud"] = {"'Auhelawa"},
["kue"] = {"Kuman (Papua New Guinea)"},
["kuf"] = {"Western Katu"},
["kug"] = {"Kupa"},
["kuh"] = {"Kushi"},
["kui"] = {"Kuikúro-Kalapálo", "Kalapalo"},
["kuj"] = {"Kuria"},
["kuk"] = {"Kepo'"},
["kul"] = {"Kulere"},
["kum"] = {"Kumyk"},
["kun"] = {"Kunama"},
["kuo"] = {"Kumukio"},
["kup"] = {"Kunimaipa"},
["kuq"] = {"Karipuna"},
["kus"] = {"Kusaal"},
["kut"] = {"Kutenai"},
["kuu"] = {"Upper Kuskokwim"},
["kuv"] = {"Kur"},
["kuw"] = {"Kpagua"},
["kux"] = {"Kukatja"},
["kuy"] = {"Kuuku-Ya'u"},
["kuz"] = {"Kunza"},
["kva"] = {"Bagvalal"},
["kvb"] = {"Kubu"},
["kvc"] = {"Kove"},
["kvd"] = {"Kui (Indonesia)"},
["kve"] = {"Kalabakan"},
["kvf"] = {"Kabalai"},
["kvg"] = {"Kuni-Boazi"},
["kvh"] = {"Komodo"},
["kvi"] = {"Kwang"},
["kvj"] = {"Psikye"},
["kvk"] = {"Korean Sign Language"},
["kvl"] = {"Kayaw"},
["kvm"] = {"Kendem"},
["kvn"] = {"Border Kuna"},
["kvo"] = {"Dobel"},
["kvp"] = {"Kompane"},
["kvq"] = {"Geba Karen"},
["kvr"] = {"Kerinci"},
["kvt"] = {"Lahta Karen", "Lahta"},
["kvu"] = {"Yinbaw Karen"},
["kvv"] = {"Kola"},
["kvw"] = {"Wersing"},
["kvx"] = {"Parkari Koli"},
["kvy"] = {"Yintale Karen", "Yintale"},
["kvz"] = {"Tsakwambo", "Tsaukambo"},
["kwa"] = {"Dâw"},
["kwb"] = {"Kwa"},
["kwc"] = {"Likwala"},
["kwd"] = {"Kwaio"},
["kwe"] = {"Kwerba"},
["kwf"] = {"Kwara'ae"},
["kwg"] = {"Sara Kaba Deme"},
["kwh"] = {"Kowiai"},
["kwi"] = {"Awa-Cuaiquer"},
["kwj"] = {"Kwanga"},
["kwk"] = {"Kwakiutl"},
["kwl"] = {"Kofyar"},
["kwm"] = {"Kwambi"},
["kwn"] = {"Kwangali"},
["kwo"] = {"Kwomtari"},
["kwp"] = {"Kodia"},
["kwr"] = {"Kwer"},
["kws"] = {"Kwese"},
["kwt"] = {"Kwesten"},
["kwu"] = {"Kwakum"},
["kwv"] = {"Sara Kaba Náà"},
["kww"] = {"Kwinti"},
["kwx"] = {"Khirwar"},
["kwy"] = {"San Salvador Kongo"},
["kwz"] = {"Kwadi"},
["kxa"] = {"Kairiru"},
["kxb"] = {"Krobu"},
["kxc"] = {"Konso", "Khonso"},
["kxd"] = {"Brunei"},
["kxf"] = {"Manumanaw Karen", "Manumanaw"},
["kxh"] = {"Karo (Ethiopia)"},
["kxi"] = {"Keningau Murut"},
["kxj"] = {"Kulfa"},
["kxk"] = {"Zayein Karen"},
["kxm"] = {"Northern Khmer"},
["kxn"] = {"Kanowit-Tanjong Melanau"},
["kxo"] = {"Kanoé"},
["kxp"] = {"Wadiyara Koli"},
["kxq"] = {"Smärky Kanum"},
["kxr"] = {"Koro (Papua New Guinea)"},
["kxs"] = {"Kangjia"},
["kxt"] = {"Koiwat"},
["kxv"] = {"Kuvi"},
["kxw"] = {"Konai"},
["kxx"] = {"Likuba"},
["kxy"] = {"Kayong"},
["kxz"] = {"Kerewo"},
["kya"] = {"Kwaya"},
["kyb"] = {"Butbut Kalinga"},
["kyc"] = {"Kyaka"},
["kyd"] = {"Karey"},
["kye"] = {"Krache"},
["kyf"] = {"Kouya"},
["kyg"] = {"Keyagana"},
["kyh"] = {"Karok"},
["kyi"] = {"Kiput"},
["kyj"] = {"Karao"},
["kyk"] = {"Kamayo"},
["kyl"] = {"Kalapuya"},
["kym"] = {"Kpatili"},
["kyn"] = {"Northern Binukidnon"},
["kyo"] = {"Kelon"},
["kyp"] = {"Kang"},
["kyq"] = {"Kenga"},
["kyr"] = {"Kuruáya"},
["kys"] = {"Baram Kayan"},
["kyt"] = {"Kayagar"},
["kyu"] = {"Western Kayah"},
["kyv"] = {"Kayort"},
["kyw"] = {"Kudmali"},
["kyx"] = {"Rapoisi"},
["kyy"] = {"Kambaira"},
["kyz"] = {"Kayabí"},
["kza"] = {"Western Karaboro"},
["kzb"] = {"Kaibobo"},
["kzc"] = {"Bondoukou Kulango"},
["kzd"] = {"Kadai"},
["kze"] = {"Kosena"},
["kzf"] = {"Da'a Kaili"},
["kzg"] = {"Kikai"},
["kzi"] = {"Kelabit"},
["kzk"] = {"Kazukuru"},
["kzl"] = {"Kayeli"},
["kzm"] = {"Kais"},
["kzn"] = {"Kokola"},
["kzo"] = {"Kaningi"},
["kzp"] = {"Kaidipang"},
["kzq"] = {"Kaike"},
["kzr"] = {"Karang"},
["kzs"] = {"Sugut Dusun"},
["kzu"] = {"Kayupulau"},
["kzv"] = {"Komyandaret"},
["kzw"] = {"Karirí-Xocó"},
["kzx"] = {"Kamarian"},
["kzy"] = {"Kango (Tshopo District)"},
["kzz"] = {"Kalabra"},
["laa"] = {"Southern Subanen"},
["lab"] = {"Linear A"},
["lac"] = {"Lacandon"},
["lad"] = {"Ladino"},
["lae"] = {"Pattani"},
["laf"] = {"Lafofa"},
["lag"] = {"Rangi"},
["lah"] = {"Lahnda"},
["lai"] = {"Lambya"},
["laj"] = {"Lango (Uganda)"},
["lal"] = {"Lalia"},
["lam"] = {"Lamba"},
["lan"] = {"Laru"},
["lap"] = {"Laka (Chad)"},
["laq"] = {"Qabiao"},
["lar"] = {"Larteh"},
["las"] = {"Lama (Togo)"},
["lau"] = {"Laba"},
["law"] = {"Lauje"},
["lax"] = {"Tiwa"},
["lay"] = {"Lama Bai"},
["laz"] = {"Aribwatsa"},
["lbb"] = {"Label"},
["lbc"] = {"Lakkia"},
["lbe"] = {"Lak"},
["lbf"] = {"Tinani"},
["lbg"] = {"Laopang"},
["lbi"] = {"La'bi"},
["lbj"] = {"Ladakhi"},
["lbk"] = {"Central Bontok"},
["lbl"] = {"Libon Bikol"},
["lbm"] = {"Lodhi"},
["lbn"] = {"Rmeet"},
["lbo"] = {"Laven"},
["lbq"] = {"Wampar"},
["lbr"] = {"Lohorung"},
["lbs"] = {"Libyan Sign Language"},
["lbt"] = {"Lachi"},
["lbu"] = {"Labu"},
["lbv"] = {"Lavatbura-Lamusong"},
["lbw"] = {"Tolaki"},
["lbx"] = {"Lawangan"},
["lby"] = {"Lamalama", "Lamu-Lamu"},
["lbz"] = {"Lardil"},
["lcc"] = {"Legenyem"},
["lcd"] = {"Lola"},
["lce"] = {"Loncong", "Sekak"},
["lcf"] = {"Lubu"},
["lch"] = {"Luchazi"},
["lcl"] = {"Lisela"},
["lcm"] = {"Tungag"},
["lcp"] = {"Western Lawa"},
["lcq"] = {"Luhu"},
["lcs"] = {"Lisabata-Nuniali"},
["lda"] = {"Kla-Dan"},
["ldb"] = {"Dũya"},
["ldd"] = {"Luri"},
["ldg"] = {"Lenyima"},
["ldh"] = {"Lamja-Dengsa-Tola"},
["ldi"] = {"Laari"},
["ldj"] = {"Lemoro"},
["ldk"] = {"Leelau"},
["ldl"] = {"Kaan"},
["ldm"] = {"Landoma"},
["ldn"] = {"Láadan"},
["ldo"] = {"Loo"},
["ldp"] = {"Tso"},
["ldq"] = {"Lufu"},
["lea"] = {"Lega-Shabunda"},
["leb"] = {"Lala-Bisa"},
["lec"] = {"Leco"},
["led"] = {"Lendu"},
["lee"] = {"Lyélé"},
["lef"] = {"Lelemi"},
["leh"] = {"Lenje"},
["lei"] = {"Lemio"},
["lej"] = {"Lengola"},
["lek"] = {"Leipon"},
["lel"] = {"Lele (Democratic Republic of Congo)"},
["lem"] = {"Nomaande"},
["len"] = {"Lenca"},
["leo"] = {"Leti (Cameroon)"},
["lep"] = {"Lepcha"},
["leq"] = {"Lembena"},
["ler"] = {"Lenkau"},
["les"] = {"Lese"},
["let"] = {"Lesing-Gelimi", "Amio-Gelimi"},
["leu"] = {"Kara (Papua New Guinea)"},
["lev"] = {"Lamma"},
["lew"] = {"Ledo Kaili"},
["lex"] = {"Luang"},
["ley"] = {"Lemolang"},
["lez"] = {"Lezghian"},
["lfa"] = {"Lefa"},
["lfn"] = {"Lingua Franca Nova"},
["lga"] = {"Lungga"},
["lgb"] = {"Laghu"},
["lgg"] = {"Lugbara"},
["lgh"] = {"Laghuu"},
["lgi"] = {"Lengilu"},
["lgk"] = {"Lingarak", "Neverver"},
["lgl"] = {"Wala"},
["lgm"] = {"Lega-Mwenga"},
["lgn"] = {"T'apo", "Opuuo"},
["lgo"] = {"Lango (South Sudan)"},
["lgq"] = {"Logba"},
["lgr"] = {"Lengo"},
["lgs"] = {"Guinea-Bissau Sign Language", "Língua Gestual Guineense"},
["lgt"] = {"Pahi"},
["lgu"] = {"Longgu"},
["lgz"] = {"Ligenza"},
["lha"] = {"Laha (Viet Nam)"},
["lhh"] = {"Laha (Indonesia)"},
["lhi"] = {"Lahu Shi"},
["lhl"] = {"Lahul Lohar"},
["lhm"] = {"Lhomi"},
["lhn"] = {"Lahanan"},
["lhp"] = {"Lhokpu"},
["lhs"] = {"Mlahsö"},
["lht"] = {"Lo-Toga"},
["lhu"] = {"Lahu"},
["lia"] = {"West-Central Limba"},
["lib"] = {"Likum"},
["lic"] = {"Hlai"},
["lid"] = {"Nyindrou"},
["lie"] = {"Likila"},
["lif"] = {"Limbu"},
["lig"] = {"Ligbi"},
["lih"] = {"Lihir"},
["lij"] = {"Ligurian"},
["lik"] = {"Lika"},
["lil"] = {"Lillooet"},
["lio"] = {"Liki"},
["lip"] = {"Sekpele"},
["liq"] = {"Libido"},
["lir"] = {"Liberian English"},
["lis"] = {"Lisu"},
["liu"] = {"Logorik"},
["liv"] = {"Liv"},
["liw"] = {"Col"},
["lix"] = {"Liabuku"},
["liy"] = {"Banda-Bambari"},
["liz"] = {"Libinza"},
["lja"] = {"Golpa"},
["lje"] = {"Rampi"},
["lji"] = {"Laiyolo"},
["ljl"] = {"Li'o"},
["ljp"] = {"Lampung Api"},
["ljw"] = {"Yirandali"},
["ljx"] = {"Yuru"},
["lka"] = {"Lakalei"},
["lkb"] = {"Kabras", "Lukabaras"},
["lkc"] = {"Kucong"},
["lkd"] = {"Lakondê"},
["lke"] = {"Kenyi"},
["lkh"] = {"Lakha"},
["lki"] = {"Laki"},
["lkj"] = {"Remun"},
["lkl"] = {"Laeko-Libuat"},
["lkm"] = {"Kalaamaya"},
["lkn"] = {"Lakon", "Vure"},
["lko"] = {"Khayo", "Olukhayo"},
["lkr"] = {"Päri"},
["lks"] = {"Kisa", "Olushisa"},
["lkt"] = {"Lakota"},
["lku"] = {"Kungkari"},
["lky"] = {"Lokoya"},
["lla"] = {"Lala-Roba"},
["llb"] = {"Lolo"},
["llc"] = {"Lele (Guinea)"},
["lld"] = {"Ladin"},
["lle"] = {"Lele (Papua New Guinea)"},
["llf"] = {"Hermit"},
["llg"] = {"Lole"},
["llh"] = {"Lamu"},
["lli"] = {"Teke-Laali"},
["llj"] = {"Ladji Ladji"},
["llk"] = {"Lelak"},
["lll"] = {"Lilau"},
["llm"] = {"Lasalimu"},
["lln"] = {"Lele (Chad)"},
["llp"] = {"North Efate"},
["llq"] = {"Lolak"},
["lls"] = {"Lithuanian Sign Language"},
["llu"] = {"Lau"},
["llx"] = {"Lauan"},
["lma"] = {"East Limba"},
["lmb"] = {"Merei"},
["lmc"] = {"Limilngan"},
["lmd"] = {"Lumun"},
["lme"] = {"Pévé"},
["lmf"] = {"South Lembata"},
["lmg"] = {"Lamogai"},
["lmh"] = {"Lambichhong"},
["lmi"] = {"Lombi"},
["lmj"] = {"West Lembata"},
["lmk"] = {"Lamkang"},
["lml"] = {"Hano"},
["lmn"] = {"Lambadi"},
["lmo"] = {"Lombard"},
["lmp"] = {"Limbum"},
["lmq"] = {"Lamatuka"},
["lmr"] = {"Lamalera"},
["lmu"] = {"Lamenu"},
["lmv"] = {"Lomaiviti"},
["lmw"] = {"Lake Miwok"},
["lmx"] = {"Laimbue"},
["lmy"] = {"Lamboya"},
["lna"] = {"Langbashe"},
["lnb"] = {"Mbalanhu"},
["lnd"] = {"Lundayeh", "Lun Bawang"},
["lng"] = {"Langobardic"},
["lnh"] = {"Lanoh"},
["lni"] = {"Daantanai'"},
["lnj"] = {"Leningitij"},
["lnl"] = {"South Central Banda"},
["lnm"] = {"Langam"},
["lnn"] = {"Lorediakarkar"},
["lns"] = {"Lamnso'"},
["lnu"] = {"Longuda"},
["lnw"] = {"Lanima"},
["lnz"] = {"Lonzo"},
["loa"] = {"Loloda"},
["lob"] = {"Lobi"},
["loc"] = {"Inonhan"},
["loe"] = {"Saluan"},
["lof"] = {"Logol"},
["log"] = {"Logo"},
["loh"] = {"Laarim", "Narim"},
["loi"] = {"Loma (Côte d'Ivoire)"},
["loj"] = {"Lou"},
["lok"] = {"Loko"},
["lol"] = {"Mongo"},
["lom"] = {"Loma (Liberia)"},
["lon"] = {"Malawi Lomwe"},
["loo"] = {"Lombo"},
["lop"] = {"Lopa"},
["loq"] = {"Lobala"},
["lor"] = {"Téén"},
["los"] = {"Loniu"},
["lot"] = {"Otuho"},
["lou"] = {"Louisiana Creole"},
["lov"] = {"Lopi"},
["low"] = {"Tampias Lobu"},
["lox"] = {"Loun"},
["loy"] = {"Loke"},
["loz"] = {"Lozi"},
["lpa"] = {"Lelepa"},
["lpe"] = {"Lepki"},
["lpn"] = {"Long Phuri Naga"},
["lpo"] = {"Lipo"},
["lpx"] = {"Lopit"},
["lqr"] = {"Logir"},
["lra"] = {"Rara Bakati'"},
["lrc"] = {"Northern Luri"},
["lre"] = {"Laurentian"},
["lrg"] = {"Laragia"},
["lri"] = {"Marachi", "Olumarachi"},
["lrk"] = {"Loarki"},
["lrl"] = {"Lari"},
["lrm"] = {"Marama", "Olumarama"},
["lrn"] = {"Lorang"},
["lro"] = {"Laro"},
["lrr"] = {"Southern Yamphu"},
["lrt"] = {"Larantuka Malay"},
["lrv"] = {"Larevat"},
["lrz"] = {"Lemerig"},
["lsa"] = {"Lasgerdi"},
["lsb"] = {"Burundian Sign Language", "Langue des Signes Burundaise"},
["lsc"] = {"Albarradas Sign Language", "Lengua de señas Albarradas"},
["lsd"] = {"Lishana Deni"},
["lse"] = {"Lusengo"},
["lsh"] = {"Lish"},
["lsi"] = {"Lashi"},
["lsl"] = {"Latvian Sign Language"},
["lsm"] = {"Saamia", "Olusamia"},
["lsn"] = {"Tibetan Sign Language"},
["lso"] = {"Laos Sign Language"},
["lsp"] = {"Panamanian Sign Language", "Lengua de Señas Panameñas"},
["lsr"] = {"Aruop"},
["lss"] = {"Lasi"},
["lst"] = {"Trinidad and Tobago Sign Language"},
["lsv"] = {"Sivia Sign Language"},
["lsw"] = {"Seychelles Sign Language", "Lalang Siny Seselwa", "Langue des Signes Seychelloise"},
["lsy"] = {"Mauritian Sign Language"},
["ltc"] = {"Late Middle Chinese"},
["ltg"] = {"Latgalian"},
["lth"] = {"Thur"},
["lti"] = {"Leti (Indonesia)"},
["ltn"] = {"Latundê"},
["lto"] = {"Tsotso", "Olutsotso"},
["lts"] = {"Tachoni", "Lutachoni"},
["ltu"] = {"Latu"},
["lua"] = {"Luba-Lulua"},
["luc"] = {"Aringa"},
["lud"] = {"Ludian"},
["lue"] = {"Luvale"},
["luf"] = {"Laua"},
["lui"] = {"Luiseno"},
["luj"] = {"Luna"},
["luk"] = {"Lunanakha"},
["lul"] = {"Olu'bo"},
["lum"] = {"Luimbi"},
["lun"] = {"Lunda"},
["luo"] = {"Luo (Kenya and Tanzania)", "Dholuo"},
["lup"] = {"Lumbu"},
["luq"] = {"Lucumi"},
["lur"] = {"Laura"},
["lus"] = {"Lushai"},
["lut"] = {"Lushootseed"},
["luu"] = {"Lumba-Yakkha"},
["luv"] = {"Luwati"},
["luw"] = {"Luo (Cameroon)"},
["luy"] = {"Luyia", "Oluluyia"},
["luz"] = {"Southern Luri"},
["lva"] = {"Maku'a"},
["lvi"] = {"Lavi"},
["lvk"] = {"Lavukaleve"},
["lvl"] = {"Lwel"},
["lvs"] = {"Standard Latvian"},
["lvu"] = {"Levuka"},
["lwa"] = {"Lwalu"},
["lwe"] = {"Lewo Eleng"},
["lwg"] = {"Wanga", "Oluwanga"},
["lwh"] = {"White Lachi"},
["lwl"] = {"Eastern Lawa"},
["lwm"] = {"Laomian"},
["lwo"] = {"Luwo"},
["lws"] = {"Malawian Sign Language"},
["lwt"] = {"Lewotobi"},
["lwu"] = {"Lawu"},
["lww"] = {"Lewo"},
["lxm"] = {"Lakurumau"},
["lya"] = {"Layakha"},
["lyg"] = {"Lyngngam"},
["lyn"] = {"Luyana"},
["lzh"] = {"Literary Chinese"},
["lzl"] = {"Litzlitz"},
["lzn"] = {"Leinong Naga"},
["lzz"] = {"Laz"},
["maa"] = {"San Jerónimo Tecóatl Mazatec"},
["mab"] = {"Yutanduchi Mixtec"},
["mad"] = {"Madurese"},
["mae"] = {"Bo-Rukul"},
["maf"] = {"Mafa"},
["mag"] = {"Magahi"},
["mai"] = {"Maithili"},
["maj"] = {"Jalapa De Díaz Mazatec"},
["mak"] = {"Makasar"},
["mam"] = {"Mam"},
["man"] = {"Mandingo", "Manding"},
["map"] = {"Austronesian languages"},
["maq"] = {"Chiquihuitlán Mazatec"},
["mas"] = {"Masai"},
["mat"] = {"San Francisco Matlatzinca"},
["mau"] = {"Huautla Mazatec"},
["mav"] = {"Sateré-Mawé"},
["maw"] = {"Mampruli"},
["max"] = {"North Moluccan Malay"},
["maz"] = {"Central Mazahua"},
["mba"] = {"Higaonon"},
["mbb"] = {"Western Bukidnon Manobo"},
["mbc"] = {"Macushi"},
["mbd"] = {"Dibabawon Manobo"},
["mbe"] = {"Molale"},
["mbf"] = {"Baba Malay"},
["mbh"] = {"Mangseng"},
["mbi"] = {"Ilianen Manobo"},
["mbj"] = {"Nadëb"},
["mbk"] = {"Malol"},
["mbl"] = {"Maxakalí"},
["mbm"] = {"Ombamba"},
["mbn"] = {"Macaguán"},
["mbo"] = {"Mbo (Cameroon)"},
["mbp"] = {"Malayo"},
["mbq"] = {"Maisin"},
["mbr"] = {"Nukak Makú"},
["mbs"] = {"Sarangani Manobo"},
["mbt"] = {"Matigsalug Manobo"},
["mbu"] = {"Mbula-Bwazza"},
["mbv"] = {"Mbulungish"},
["mbw"] = {"Maring"},
["mbx"] = {"Mari (East Sepik Province)"},
["mby"] = {"Memoni"},
["mbz"] = {"Amoltepec Mixtec"},
["mca"] = {"Maca"},
["mcb"] = {"Machiguenga"},
["mcc"] = {"Bitur"},
["mcd"] = {"Sharanahua"},
["mce"] = {"Itundujia Mixtec"},
["mcf"] = {"Matsés"},
["mcg"] = {"Mapoyo"},
["mch"] = {"Maquiritari"},
["mci"] = {"Mese"},
["mcj"] = {"Mvanip"},
["mck"] = {"Mbunda"},
["mcl"] = {"Macaguaje"},
["mcm"] = {"Malaccan Creole Portuguese"},
["mcn"] = {"Masana"},
["mco"] = {"Coatlán Mixe"},
["mcp"] = {"Makaa"},
["mcq"] = {"Ese"},
["mcr"] = {"Menya"},
["mcs"] = {"Mambai"},
["mct"] = {"Mengisa"},
["mcu"] = {"Cameroon Mambila"},
["mcv"] = {"Minanibai"},
["mcw"] = {"Mawa (Chad)"},
["mcx"] = {"Mpiemo"},
["mcy"] = {"South Watut"},
["mcz"] = {"Mawan"},
["mda"] = {"Mada (Nigeria)"},
["mdb"] = {"Morigi"},
["mdc"] = {"Male (Papua New Guinea)"},
["mdd"] = {"Mbum"},
["mde"] = {"Maba (Chad)"},
["mdf"] = {"Moksha"},
["mdg"] = {"Massalat"},
["mdh"] = {"Maguindanaon"},
["mdi"] = {"Mamvu"},
["mdj"] = {"Mangbetu"},
["mdk"] = {"Mangbutu"},
["mdl"] = {"Maltese Sign Language"},
["mdm"] = {"Mayogo"},
["mdn"] = {"Mbati"},
["mdp"] = {"Mbala"},
["mdq"] = {"Mbole"},
["mdr"] = {"Mandar"},
["mds"] = {"Maria (Papua New Guinea)"},
["mdt"] = {"Mbere"},
["mdu"] = {"Mboko"},
["mdv"] = {"Santa Lucía Monteverde Mixtec"},
["mdw"] = {"Mbosi"},
["mdx"] = {"Dizin"},
["mdy"] = {"Male (Ethiopia)"},
["mdz"] = {"Suruí Do Pará"},
["mea"] = {"Menka"},
["meb"] = {"Ikobi"},
["mec"] = {"Marra"},
["med"] = {"Melpa"},
["mee"] = {"Mengen"},
["mef"] = {"Megam"},
["meh"] = {"Southwestern Tlaxiaco Mixtec"},
["mei"] = {"Midob"},
["mej"] = {"Meyah"},
["mek"] = {"Mekeo"},
["mel"] = {"Central Melanau"},
["mem"] = {"Mangala"},
["men"] = {"Mende (Sierra Leone)"},
["meo"] = {"Kedah Malay"},
["mep"] = {"Miriwoong"},
["meq"] = {"Merey"},
["mer"] = {"Meru"},
["mes"] = {"Masmaje"},
["met"] = {"Mato"},
["meu"] = {"Motu"},
["mev"] = {"Mano"},
["mew"] = {"Maaka"},
["mey"] = {"Hassaniyya"},
["mez"] = {"Menominee"},
["mfa"] = {"Pattani Malay"},
["mfb"] = {"Bangka"},
["mfc"] = {"Mba"},
["mfd"] = {"Mendankwe-Nkwen"},
["mfe"] = {"Morisyen"},
["mff"] = {"Naki"},
["mfg"] = {"Mogofin"},
["mfh"] = {"Matal"},
["mfi"] = {"Wandala"},
["mfj"] = {"Mefele"},
["mfk"] = {"North Mofu"},
["mfl"] = {"Putai"},
["mfm"] = {"Marghi South"},
["mfn"] = {"Cross River Mbembe"},
["mfo"] = {"Mbe"},
["mfp"] = {"Makassar Malay"},
["mfq"] = {"Moba"},
["mfr"] = {"Marrithiyel"},
["mfs"] = {"Mexican Sign Language"},
["mft"] = {"Mokerang"},
["mfu"] = {"Mbwela"},
["mfv"] = {"Mandjak"},
["mfw"] = {"Mulaha"},
["mfx"] = {"Melo"},
["mfy"] = {"Mayo"},
["mfz"] = {"Mabaan"},
["mga"] = {"Middle Irish (900-1200)"},
["mgb"] = {"Mararit"},
["mgc"] = {"Morokodo"},
["mgd"] = {"Moru"},
["mge"] = {"Mango"},
["mgf"] = {"Maklew"},
["mgg"] = {"Mpumpong"},
["mgh"] = {"Makhuwa-Meetto"},
["mgi"] = {"Lijili"},
["mgj"] = {"Abureni"},
["mgk"] = {"Mawes"},
["mgl"] = {"Maleu-Kilenge"},
["mgm"] = {"Mambae"},
["mgn"] = {"Mbangi"},
["mgo"] = {"Meta'"},
["mgp"] = {"Eastern Magar"},
["mgq"] = {"Malila"},
["mgr"] = {"Mambwe-Lungu"},
["mgs"] = {"Manda (Tanzania)"},
["mgt"] = {"Mongol"},
["mgu"] = {"Mailu"},
["mgv"] = {"Matengo"},
["mgw"] = {"Matumbi"},
["mgy"] = {"Mbunga"},
["mgz"] = {"Mbugwe"},
["mha"] = {"Manda (India)"},
["mhb"] = {"Mahongwe"},
["mhc"] = {"Mocho"},
["mhd"] = {"Mbugu"},
["mhe"] = {"Besisi", "Mah Meri"},
["mhf"] = {"Mamaa"},
["mhg"] = {"Margu"},
["mhi"] = {"Ma'di"},
["mhj"] = {"Mogholi"},
["mhk"] = {"Mungaka"},
["mhl"] = {"Mauwake"},
["mhm"] = {"Makhuwa-Moniga"},
["mhn"] = {"Mócheno"},
["mho"] = {"Mashi (Zambia)"},
["mhp"] = {"Balinese Malay"},
["mhq"] = {"Mandan"},
["mhr"] = {"Eastern Mari"},
["mhs"] = {"Buru (Indonesia)"},
["mht"] = {"Mandahuaca"},
["mhu"] = {"Digaro-Mishmi", "Darang Deng"},
["mhw"] = {"Mbukushu"},
["mhx"] = {"Maru", "Lhaovo"},
["mhy"] = {"Ma'anyan"},
["mhz"] = {"Mor (Mor Islands)"},
["mia"] = {"Miami"},
["mib"] = {"Atatláhuca Mixtec"},
["mic"] = {"Mi'kmaq", "Micmac"},
["mid"] = {"Mandaic"},
["mie"] = {"Ocotepec Mixtec"},
["mif"] = {"Mofu-Gudur"},
["mig"] = {"San Miguel El Grande Mixtec"},
["mih"] = {"Chayuco Mixtec"},
["mii"] = {"Chigmecatitlán Mixtec"},
["mij"] = {"Abar", "Mungbam"},
["mik"] = {"Mikasuki"},
["mil"] = {"Peñoles Mixtec"},
["mim"] = {"Alacatlatzala Mixtec"},
["min"] = {"Minangkabau"},
["mio"] = {"Pinotepa Nacional Mixtec"},
["mip"] = {"Apasco-Apoala Mixtec"},
["miq"] = {"Mískito"},
["mir"] = {"Isthmus Mixe"},
["mis"] = {"Uncoded languages"},
["mit"] = {"Southern Puebla Mixtec"},
["miu"] = {"Cacaloxtepec Mixtec"},
["miw"] = {"Akoye"},
["mix"] = {"Mixtepec Mixtec"},
["miy"] = {"Ayutla Mixtec"},
["miz"] = {"Coatzospan Mixtec"},
["mjb"] = {"Makalero"},
["mjc"] = {"San Juan Colorado Mixtec"},
["mjd"] = {"Northwest Maidu"},
["mje"] = {"Muskum"},
["mjg"] = {"Tu"},
["mjh"] = {"Mwera (Nyasa)"},
["mji"] = {"Kim Mun"},
["mjj"] = {"Mawak"},
["mjk"] = {"Matukar"},
["mjl"] = {"Mandeali"},
["mjm"] = {"Medebur"},
["mjn"] = {"Ma (Papua New Guinea)"},
["mjo"] = {"Malankuravan"},
["mjp"] = {"Malapandaram"},
["mjq"] = {"Malaryan"},
["mjr"] = {"Malavedan"},
["mjs"] = {"Miship"},
["mjt"] = {"Sauria Paharia"},
["mju"] = {"Manna-Dora"},
["mjv"] = {"Mannan"},
["mjw"] = {"Karbi"},
["mjx"] = {"Mahali"},
["mjy"] = {"Mahican"},
["mjz"] = {"Majhi"},
["mka"] = {"Mbre"},
["mkb"] = {"Mal Paharia"},
["mkc"] = {"Siliput"},
["mke"] = {"Mawchi"},
["mkf"] = {"Miya"},
["mkg"] = {"Mak (China)"},
["mkh"] = {"Mon-Khmer languages"},
["mki"] = {"Dhatki"},
["mkj"] = {"Mokilese"},
["mkk"] = {"Byep"},
["mkl"] = {"Mokole"},
["mkm"] = {"Moklen"},
["mkn"] = {"Kupang Malay"},
["mko"] = {"Mingang Doso"},
["mkp"] = {"Moikodi"},
["mkq"] = {"Bay Miwok"},
["mkr"] = {"Malas"},
["mks"] = {"Silacayoapan Mixtec"},
["mkt"] = {"Vamale"},
["mku"] = {"Konyanka Maninka"},
["mkv"] = {"Mafea"},
["mkw"] = {"Kituba (Congo)"},
["mkx"] = {"Kinamiging Manobo"},
["mky"] = {"East Makian"},
["mkz"] = {"Makasae"},
["mla"] = {"Malo"},
["mlb"] = {"Mbule"},
["mlc"] = {"Cao Lan"},
["mle"] = {"Manambu"},
["mlf"] = {"Mal"},
["mlh"] = {"Mape"},
["mli"] = {"Malimpung"},
["mlj"] = {"Miltu"},
["mlk"] = {"Ilwana", "Kiwilwana"},
["mll"] = {"Malua Bay"},
["mlm"] = {"Mulam"},
["mln"] = {"Malango"},
["mlo"] = {"Mlomp"},
["mlp"] = {"Bargam"},
["mlq"] = {"Western Maninkakan"},
["mlr"] = {"Vame"},
["mls"] = {"Masalit"},
["mlu"] = {"To'abaita"},
["mlv"] = {"Motlav", "Mwotlap"},
["mlw"] = {"Moloko"},
["mlx"] = {"Malfaxal", "Naha'ai"},
["mlz"] = {"Malaynon"},
["mma"] = {"Mama"},
["mmb"] = {"Momina"},
["mmc"] = {"Michoacán Mazahua"},
["mmd"] = {"Maonan"},
["mme"] = {"Mae"},
["mmf"] = {"Mundat"},
["mmg"] = {"North Ambrym"},
["mmh"] = {"Mehináku"},
["mmi"] = {"Musar"},
["mmj"] = {"Majhwar"},
["mmk"] = {"Mukha-Dora"},
["mml"] = {"Man Met"},
["mmm"] = {"Maii"},
["mmn"] = {"Mamanwa"},
["mmo"] = {"Mangga Buang"},
["mmp"] = {"Siawi"},
["mmq"] = {"Musak"},
["mmr"] = {"Western Xiangxi Miao"},
["mmt"] = {"Malalamai"},
["mmu"] = {"Mmaala"},
["mmv"] = {"Miriti"},
["mmw"] = {"Emae"},
["mmx"] = {"Madak"},
["mmy"] = {"Migaama"},
["mmz"] = {"Mabaale"},
["mna"] = {"Mbula"},
["mnb"] = {"Muna"},
["mnc"] = {"Manchu"},
["mnd"] = {"Mondé"},
["mne"] = {"Naba"},
["mnf"] = {"Mundani"},
["mng"] = {"Eastern Mnong"},
["mnh"] = {"Mono (Democratic Republic of Congo)"},
["mni"] = {"Manipuri"},
["mnj"] = {"Munji"},
["mnk"] = {"Mandinka"},
["mnl"] = {"Tiale"},
["mnm"] = {"Mapena"},
["mnn"] = {"Southern Mnong"},
["mno"] = {"Manobo languages"},
["mnp"] = {"Min Bei Chinese"},
["mnq"] = {"Minriq"},
["mnr"] = {"Mono (USA)"},
["mns"] = {"Mansi"},
["mnu"] = {"Mer"},
["mnv"] = {"Rennell-Bellona"},
["mnw"] = {"Mon"},
["mnx"] = {"Manikion"},
["mny"] = {"Manyawa"},
["mnz"] = {"Moni"},
["moa"] = {"Mwan"},
["moc"] = {"Mocoví"},
["mod"] = {"Mobilian"},
["moe"] = {"Innu", "Montagnais"},
["mog"] = {"Mongondow"},
["moh"] = {"Mohawk"},
["moi"] = {"Mboi"},
["moj"] = {"Monzombo"},
["mok"] = {"Morori"},
["mom"] = {"Mangue"},
["moo"] = {"Monom"},
["mop"] = {"Mopán Maya"},
["moq"] = {"Mor (Bomberai Peninsula)"},
["mor"] = {"Moro"},
["mos"] = {"Mossi"},
["mot"] = {"Barí"},
["mou"] = {"Mogum"},
["mov"] = {"Mohave"},
["mow"] = {"Moi (Congo)"},
["mox"] = {"Molima"},
["moy"] = {"Shekkacho"},
["moz"] = {"Mukulu", "Gergiko"},
["mpa"] = {"Mpoto"},
["mpb"] = {"Malak Malak", "Mullukmulluk"},
["mpc"] = {"Mangarrayi"},
["mpd"] = {"Machinere"},
["mpe"] = {"Majang"},
["mpg"] = {"Marba"},
["mph"] = {"Maung"},
["mpi"] = {"Mpade"},
["mpj"] = {"Martu Wangka", "Wangkajunga"},
["mpk"] = {"Mbara (Chad)"},
["mpl"] = {"Middle Watut"},
["mpm"] = {"Yosondúa Mixtec"},
["mpn"] = {"Mindiri"},
["mpo"] = {"Miu"},
["mpp"] = {"Migabac"},
["mpq"] = {"Matís"},
["mpr"] = {"Vangunu"},
["mps"] = {"Dadibi"},
["mpt"] = {"Mian"},
["mpu"] = {"Makuráp"},
["mpv"] = {"Mungkip"},
["mpw"] = {"Mapidian"},
["mpx"] = {"Misima-Panaeati"},
["mpy"] = {"Mapia"},
["mpz"] = {"Mpi"},
["mqa"] = {"Maba (Indonesia)"},
["mqb"] = {"Mbuko"},
["mqc"] = {"Mangole"},
["mqe"] = {"Matepi"},
["mqf"] = {"Momuna"},
["mqg"] = {"Kota Bangun Kutai Malay"},
["mqh"] = {"Tlazoyaltepec Mixtec"},
["mqi"] = {"Mariri"},
["mqj"] = {"Mamasa"},
["mqk"] = {"Rajah Kabunsuwan Manobo"},
["mql"] = {"Mbelime"},
["mqm"] = {"South Marquesan"},
["mqn"] = {"Moronene"},
["mqo"] = {"Modole"},
["mqp"] = {"Manipa"},
["mqq"] = {"Minokok"},
["mqr"] = {"Mander"},
["mqs"] = {"West Makian"},
["mqt"] = {"Mok"},
["mqu"] = {"Mandari"},
["mqv"] = {"Mosimo"},
["mqw"] = {"Murupi"},
["mqx"] = {"Mamuju"},
["mqy"] = {"Manggarai"},
["mqz"] = {"Pano"},
["mra"] = {"Mlabri"},
["mrb"] = {"Marino"},
["mrc"] = {"Maricopa"},
["mrd"] = {"Western Magar"},
["mre"] = {"Martha's Vineyard Sign Language"},
["mrf"] = {"Elseng"},
["mrg"] = {"Mising"},
["mrh"] = {"Mara Chin"},
["mrj"] = {"Western Mari"},
["mrk"] = {"Hmwaveke"},
["mrl"] = {"Mortlockese"},
["mrm"] = {"Merlav", "Mwerlap"},
["mrn"] = {"Cheke Holo"},
["mro"] = {"Mru"},
["mrp"] = {"Morouas"},
["mrq"] = {"North Marquesan"},
["mrr"] = {"Maria (India)"},
["mrs"] = {"Maragus"},
["mrt"] = {"Marghi Central"},
["mru"] = {"Mono (Cameroon)"},
["mrv"] = {"Mangareva"},
["mrw"] = {"Maranao"},
["mrx"] = {"Maremgi", "Dineor"},
["mry"] = {"Mandaya"},
["mrz"] = {"Marind"},
["msb"] = {"Masbatenyo"},
["msc"] = {"Sankaran Maninka"},
["msd"] = {"Yucatec Maya Sign Language"},
["mse"] = {"Musey"},
["msf"] = {"Mekwei"},
["msg"] = {"Moraid"},
["msh"] = {"Masikoro Malagasy"},
["msi"] = {"Sabah Malay"},
["msj"] = {"Ma (Democratic Republic of Congo)"},
["msk"] = {"Mansaka"},
["msl"] = {"Molof", "Poule"},
["msm"] = {"Agusan Manobo"},
["msn"] = {"Vurës"},
["mso"] = {"Mombum"},
["msp"] = {"Maritsauá"},
["msq"] = {"Caac"},
["msr"] = {"Mongolian Sign Language"},
["mss"] = {"West Masela"},
["msu"] = {"Musom"},
["msv"] = {"Maslam"},
["msw"] = {"Mansoanka"},
["msx"] = {"Moresada"},
["msy"] = {"Aruamu"},
["msz"] = {"Momare"},
["mta"] = {"Cotabato Manobo"},
["mtb"] = {"Anyin Morofo"},
["mtc"] = {"Munit"},
["mtd"] = {"Mualang"},
["mte"] = {"Mono (Solomon Islands)"},
["mtf"] = {"Murik (Papua New Guinea)"},
["mtg"] = {"Una"},
["mth"] = {"Munggui"},
["mti"] = {"Maiwa (Papua New Guinea)"},
["mtj"] = {"Moskona"},
["mtk"] = {"Mbe'"},
["mtl"] = {"Montol"},
["mtm"] = {"Mator"},
["mtn"] = {"Matagalpa"},
["mto"] = {"Totontepec Mixe"},
["mtp"] = {"Wichí Lhamtés Nocten"},
["mtq"] = {"Muong"},
["mtr"] = {"Mewari"},
["mts"] = {"Yora"},
["mtt"] = {"Mota"},
["mtu"] = {"Tututepec Mixtec"},
["mtv"] = {"Asaro'o"},
["mtw"] = {"Southern Binukidnon"},
["mtx"] = {"Tidaá Mixtec"},
["mty"] = {"Nabi"},
["mua"] = {"Mundang"},
["mub"] = {"Mubi"},
["muc"] = {"Ajumbu"},
["mud"] = {"Mednyj Aleut"},
["mue"] = {"Media Lengua"},
["mug"] = {"Musgu"},
["muh"] = {"Mündü"},
["mui"] = {"Musi"},
["muj"] = {"Mabire"},
["muk"] = {"Mugom"},
["mul"] = {"Multiple languages"},
["mum"] = {"Maiwala"},
["mun"] = {"Munda languages"},
["muo"] = {"Nyong"},
["mup"] = {"Malvi"},
["muq"] = {"Eastern Xiangxi Miao"},
["mur"] = {"Murle"},
["mus"] = {"Creek"},
["mut"] = {"Western Muria"},
["muu"] = {"Yaaku"},
["muv"] = {"Muthuvan"},
["mux"] = {"Bo-Ung"},
["muy"] = {"Muyang"},
["muz"] = {"Mursi"},
["mva"] = {"Manam"},
["mvb"] = {"Mattole"},
["mvd"] = {"Mamboru"},
["mve"] = {"Marwari (Pakistan)"},
["mvf"] = {"Peripheral Mongolian"},
["mvg"] = {"Yucuañe Mixtec"},
["mvh"] = {"Mulgi"},
["mvi"] = {"Miyako"},
["mvk"] = {"Mekmek"},
["mvl"] = {"Mbara (Australia)"},
["mvn"] = {"Minaveha"},
["mvo"] = {"Marovo"},
["mvp"] = {"Duri"},
["mvq"] = {"Moere"},
["mvr"] = {"Marau"},
["mvs"] = {"Massep"},
["mvt"] = {"Mpotovoro"},
["mvu"] = {"Marfa"},
["mvv"] = {"Tagal Murut"},
["mvw"] = {"Machinga"},
["mvx"] = {"Meoswar"},
["mvy"] = {"Indus Kohistani"},
["mvz"] = {"Mesqan"},
["mwa"] = {"Mwatebu"},
["mwb"] = {"Juwal"},
["mwc"] = {"Are"},
["mwe"] = {"Mwera (Chimwera)"},
["mwf"] = {"Murrinh-Patha"},
["mwg"] = {"Aiklep"},
["mwh"] = {"Mouk-Aria"},
["mwi"] = {"Labo", "Ninde"},
["mwk"] = {"Kita Maninkakan"},
["mwl"] = {"Mirandese"},
["mwm"] = {"Sar"},
["mwn"] = {"Nyamwanga"},
["mwo"] = {"Central Maewo"},
["mwp"] = {"Kala Lagaw Ya"},
["mwq"] = {"Mün Chin"},
["mwr"] = {"Marwari"},
["mws"] = {"Mwimbi-Muthambi"},
["mwt"] = {"Moken"},
["mwu"] = {"Mittu"},
["mwv"] = {"Mentawai"},
["mww"] = {"Hmong Daw"},
["mwz"] = {"Moingi"},
["mxa"] = {"Northwest Oaxaca Mixtec"},
["mxb"] = {"Tezoatlán Mixtec"},
["mxc"] = {"Manyika"},
["mxd"] = {"Modang"},
["mxe"] = {"Mele-Fila"},
["mxf"] = {"Malgbe"},
["mxg"] = {"Mbangala"},
["mxh"] = {"Mvuba"},
["mxi"] = {"Mozarabic"},
["mxj"] = {"Miju-Mishmi", "Geman Deng"},
["mxk"] = {"Monumbo"},
["mxl"] = {"Maxi Gbe"},
["mxm"] = {"Meramera"},
["mxn"] = {"Moi (Indonesia)"},
["mxo"] = {"Mbowe"},
["mxp"] = {"Tlahuitoltepec Mixe"},
["mxq"] = {"Juquila Mixe"},
["mxr"] = {"Murik (Malaysia)"},
["mxs"] = {"Huitepec Mixtec"},
["mxt"] = {"Jamiltepec Mixtec"},
["mxu"] = {"Mada (Cameroon)"},
["mxv"] = {"Metlatónoc Mixtec"},
["mxw"] = {"Namo"},
["mxx"] = {"Mahou", "Mawukakan"},
["mxy"] = {"Southeastern Nochixtlán Mixtec"},
["mxz"] = {"Central Masela"},
["myb"] = {"Mbay"},
["myc"] = {"Mayeka"},
["mye"] = {"Myene"},
["myf"] = {"Bambassi"},
["myg"] = {"Manta"},
["myh"] = {"Makah"},
["myj"] = {"Mangayat"},
["myk"] = {"Mamara Senoufo"},
["myl"] = {"Moma"},
["mym"] = {"Me'en"},
["myn"] = {"Mayan languages"},
["myo"] = {"Anfillo"},
["myp"] = {"Pirahã"},
["myr"] = {"Muniche"},
["mys"] = {"Mesmes"},
["myu"] = {"Mundurukú"},
["myv"] = {"Erzya"},
["myw"] = {"Muyuw"},
["myx"] = {"Masaaba"},
["myy"] = {"Macuna"},
["myz"] = {"Classical Mandaic"},
["mza"] = {"Santa María Zacatepec Mixtec"},
["mzb"] = {"Tumzabt"},
["mzc"] = {"Madagascar Sign Language"},
["mzd"] = {"Malimba"},
["mze"] = {"Morawa"},
["mzg"] = {"Monastic Sign Language"},
["mzh"] = {"Wichí Lhamtés Güisnay"},
["mzi"] = {"Ixcatlán Mazatec"},
["mzj"] = {"Manya"},
["mzk"] = {"Nigeria Mambila"},
["mzl"] = {"Mazatlán Mixe"},
["mzm"] = {"Mumuye"},
["mzn"] = {"Mazanderani"},
["mzo"] = {"Matipuhy"},
["mzp"] = {"Movima"},
["mzq"] = {"Mori Atas"},
["mzr"] = {"Marúbo"},
["mzs"] = {"Macanese"},
["mzt"] = {"Mintil"},
["mzu"] = {"Inapang"},
["mzv"] = {"Manza"},
["mzw"] = {"Deg"},
["mzx"] = {"Mawayana"},
["mzy"] = {"Mozambican Sign Language"},
["mzz"] = {"Maiadomu"},
["naa"] = {"Namla"},
["nab"] = {"Southern Nambikuára"},
["nac"] = {"Narak"},
["nae"] = {"Naka'ela"},
["naf"] = {"Nabak"},
["nag"] = {"Naga Pidgin"},
["nah"] = {"Nahuatl languages"},
["nai"] = {"North American Indian languages"},
["naj"] = {"Nalu"},
["nak"] = {"Nakanai"},
["nal"] = {"Nalik"},
["nam"] = {"Ngan'gityemerri"},
["nan"] = {"Min Nan Chinese"},
["nao"] = {"Naaba"},
["nap"] = {"Neapolitan"},
["naq"] = {"Khoekhoe", "Nama (Namibia)"},
["nar"] = {"Iguta"},
["nas"] = {"Naasioi"},
["nat"] = {"Ca̱hungwa̱rya̱", "Hungworo"},
["naw"] = {"Nawuri"},
["nax"] = {"Nakwi"},
["nay"] = {"Ngarrindjeri"},
["naz"] = {"Coatepec Nahuatl"},
["nba"] = {"Nyemba"},
["nbb"] = {"Ndoe"},
["nbc"] = {"Chang Naga"},
["nbd"] = {"Ngbinda"},
["nbe"] = {"Konyak Naga"},
["nbg"] = {"Nagarchal"},
["nbh"] = {"Ngamo"},
["nbi"] = {"Mao Naga"},
["nbj"] = {"Ngarinyman"},
["nbk"] = {"Nake"},
["nbm"] = {"Ngbaka Ma'bo"},
["nbn"] = {"Kuri"},
["nbo"] = {"Nkukoli"},
["nbp"] = {"Nnam"},
["nbq"] = {"Nggem"},
["nbr"] = {"Numana"},
["nbs"] = {"Namibian Sign Language"},
["nbt"] = {"Na"},
["nbu"] = {"Rongmei Naga"},
["nbv"] = {"Ngamambo"},
["nbw"] = {"Southern Ngbandi"},
["nby"] = {"Ningera"},
["nca"] = {"Iyo"},
["ncb"] = {"Central Nicobarese"},
["ncc"] = {"Ponam"},
["ncd"] = {"Nachering"},
["nce"] = {"Yale"},
["ncf"] = {"Notsi"},
["ncg"] = {"Nisga'a"},
["nch"] = {"Central Huasteca Nahuatl"},
["nci"] = {"Classical Nahuatl"},
["ncj"] = {"Northern Puebla Nahuatl"},
["nck"] = {"Na-kara"},
["ncl"] = {"Michoacán Nahuatl"},
["ncm"] = {"Nambo"},
["ncn"] = {"Nauna"},
["nco"] = {"Sibe"},
["ncq"] = {"Northern Katang"},
["ncr"] = {"Ncane"},
["ncs"] = {"Nicaraguan Sign Language"},
["nct"] = {"Chothe Naga"},
["ncu"] = {"Chumburung"},
["ncx"] = {"Central Puebla Nahuatl"},
["ncz"] = {"Natchez"},
["nda"] = {"Ndasa"},
["ndb"] = {"Kenswei Nsei"},
["ndc"] = {"Ndau"},
["ndd"] = {"Nde-Nsele-Nta"},
["ndf"] = {"Nadruvian"},
["ndg"] = {"Ndengereko"},
["ndh"] = {"Ndali"},
["ndi"] = {"Samba Leko"},
["ndj"] = {"Ndamba"},
["ndk"] = {"Ndaka"},
["ndl"] = {"Ndolo"},
["ndm"] = {"Ndam"},
["ndn"] = {"Ngundi"},
["ndp"] = {"Ndo"},
["ndq"] = {"Ndombe"},
["ndr"] = {"Ndoola"},
["nds"] = {"Low German", "Low Saxon"},
["ndt"] = {"Ndunga"},
["ndu"] = {"Dugun"},
["ndv"] = {"Ndut"},
["ndw"] = {"Ndobo"},
["ndx"] = {"Nduga"},
["ndy"] = {"Lutos"},
["ndz"] = {"Ndogo"},
["nea"] = {"Eastern Ngad'a"},
["neb"] = {"Toura (Côte d'Ivoire)"},
["nec"] = {"Nedebang"},
["ned"] = {"Nde-Gbite"},
["nee"] = {"Nêlêmwa-Nixumwak"},
["nef"] = {"Nefamese"},
["neg"] = {"Negidal"},
["neh"] = {"Nyenkha"},
["nei"] = {"Neo-Hittite"},
["nej"] = {"Neko"},
["nek"] = {"Neku"},
["nem"] = {"Nemi"},
["nen"] = {"Nengone"},
["neo"] = {"Ná-Meo"},
["neq"] = {"North Central Mixe"},
["ner"] = {"Yahadian"},
["nes"] = {"Bhoti Kinnauri"},
["net"] = {"Nete"},
["neu"] = {"Neo"},
["nev"] = {"Nyaheun"},
["new"] = {"Newari", "Nepal Bhasa"},
["nex"] = {"Neme"},
["ney"] = {"Neyo"},
["nez"] = {"Nez Perce"},
["nfa"] = {"Dhao"},
["nfd"] = {"Ahwai"},
["nfl"] = {"Ayiwo", "Äiwoo"},
["nfr"] = {"Nafaanra"},
["nfu"] = {"Mfumte"},
["nga"] = {"Ngbaka"},
["ngb"] = {"Northern Ngbandi"},
["ngc"] = {"Ngombe (Democratic Republic of Congo)"},
["ngd"] = {"Ngando (Central African Republic)"},
["nge"] = {"Ngemba"},
["ngf"] = {"Trans-New Guinea languages"},
["ngg"] = {"Ngbaka Manza"},
["ngh"] = {"Nǁng"},
["ngi"] = {"Ngizim"},
["ngj"] = {"Ngie"},
["ngk"] = {"Dalabon"},
["ngl"] = {"Lomwe"},
["ngm"] = {"Ngatik Men's Creole"},
["ngn"] = {"Ngwo"},
["ngp"] = {"Ngulu"},
["ngq"] = {"Ngurimi", "Ngoreme"},
["ngr"] = {"Engdewu"},
["ngs"] = {"Gvoko"},
["ngt"] = {"Kriang", "Ngeq"},
["ngu"] = {"Guerrero Nahuatl"},
["ngv"] = {"Nagumi"},
["ngw"] = {"Ngwaba"},
["ngx"] = {"Nggwahyi"},
["ngy"] = {"Tibea"},
["ngz"] = {"Ngungwel"},
["nha"] = {"Nhanda"},
["nhb"] = {"Beng"},
["nhc"] = {"Tabasco Nahuatl"},
["nhd"] = {"Chiripá", "Ava Guaraní"},
["nhe"] = {"Eastern Huasteca Nahuatl"},
["nhf"] = {"Nhuwala"},
["nhg"] = {"Tetelcingo Nahuatl"},
["nhh"] = {"Nahari"},
["nhi"] = {"Zacatlán-Ahuacatlán-Tepetzintla Nahuatl"},
["nhk"] = {"Isthmus-Cosoleacaque Nahuatl"},
["nhm"] = {"Morelos Nahuatl"},
["nhn"] = {"Central Nahuatl"},
["nho"] = {"Takuu"},
["nhp"] = {"Isthmus-Pajapan Nahuatl"},
["nhq"] = {"Huaxcaleca Nahuatl"},
["nhr"] = {"Naro"},
["nht"] = {"Ometepec Nahuatl"},
["nhu"] = {"Noone"},
["nhv"] = {"Temascaltepec Nahuatl"},
["nhw"] = {"Western Huasteca Nahuatl"},
["nhx"] = {"Isthmus-Mecayapan Nahuatl"},
["nhy"] = {"Northern Oaxaca Nahuatl"},
["nhz"] = {"Santa María La Alta Nahuatl"},
["nia"] = {"Nias"},
["nib"] = {"Nakame"},
["nic"] = {"Niger-Kordofanian languages"},
["nid"] = {"Ngandi"},
["nie"] = {"Niellim"},
["nif"] = {"Nek"},
["nig"] = {"Ngalakgan"},
["nih"] = {"Nyiha (Tanzania)"},
["nii"] = {"Nii"},
["nij"] = {"Ngaju"},
["nik"] = {"Southern Nicobarese"},
["nil"] = {"Nila"},
["nim"] = {"Nilamba"},
["nin"] = {"Ninzo"},
["nio"] = {"Nganasan"},
["niq"] = {"Nandi"},
["nir"] = {"Nimboran"},
["nis"] = {"Nimi"},
["nit"] = {"Southeastern Kolami"},
["niu"] = {"Niuean"},
["niv"] = {"Gilyak"},
["niw"] = {"Nimo"},
["nix"] = {"Hema"},
["niy"] = {"Ngiti"},
["niz"] = {"Ningil"},
["nja"] = {"Nzanyi"},
["njb"] = {"Nocte Naga"},
["njd"] = {"Ndonde Hamba"},
["njh"] = {"Lotha Naga"},
["nji"] = {"Gudanji"},
["njj"] = {"Njen"},
["njl"] = {"Njalgulgule"},
["njm"] = {"Angami Naga"},
["njn"] = {"Liangmai Naga"},
["njo"] = {"Ao Naga"},
["njr"] = {"Njerep"},
["njs"] = {"Nisa"},
["njt"] = {"Ndyuka-Trio Pidgin"},
["nju"] = {"Ngadjunmaya"},
["njx"] = {"Kunyi"},
["njy"] = {"Njyem"},
["njz"] = {"Nyishi"},
["nka"] = {"Nkoya"},
["nkb"] = {"Khoibu Naga"},
["nkc"] = {"Nkongho"},
["nkd"] = {"Koireng"},
["nke"] = {"Duke"},
["nkf"] = {"Inpui Naga"},
["nkg"] = {"Nekgini"},
["nkh"] = {"Khezha Naga"},
["nki"] = {"Thangal Naga"},
["nkj"] = {"Nakai"},
["nkk"] = {"Nokuku"},
["nkm"] = {"Namat"},
["nkn"] = {"Nkangala"},
["nko"] = {"Nkonya"},
["nkp"] = {"Niuatoputapu"},
["nkq"] = {"Nkami"},
["nkr"] = {"Nukuoro"},
["nks"] = {"North Asmat"},
["nkt"] = {"Nyika (Tanzania)"},
["nku"] = {"Bouna Kulango"},
["nkv"] = {"Nyika (Malawi and Zambia)"},
["nkw"] = {"Nkutu"},
["nkx"] = {"Nkoroo"},
["nkz"] = {"Nkari"},
["nla"] = {"Ngombale"},
["nlc"] = {"Nalca"},
["nle"] = {"East Nyala"},
["nlg"] = {"Gela"},
["nli"] = {"Grangali"},
["nlj"] = {"Nyali"},
["nlk"] = {"Ninia Yali"},
["nll"] = {"Nihali"},
["nlm"] = {"Mankiyali"},
["nlo"] = {"Ngul"},
["nlq"] = {"Lao Naga"},
["nlu"] = {"Nchumbulu"},
["nlv"] = {"Orizaba Nahuatl"},
["nlw"] = {"Walangama"},
["nlx"] = {"Nahali"},
["nly"] = {"Nyamal"},
["nlz"] = {"Nalögo"},
["nma"] = {"Maram Naga"},
["nmb"] = {"Big Nambas", "V'ënen Taut"},
["nmc"] = {"Ngam"},
["nmd"] = {"Ndumu"},
["nme"] = {"Mzieme Naga"},
["nmf"] = {"Tangkhul Naga (India)"},
["nmg"] = {"Kwasio"},
["nmh"] = {"Monsang Naga"},
["nmi"] = {"Nyam"},
["nmj"] = {"Ngombe (Central African Republic)"},
["nmk"] = {"Namakura"},
["nml"] = {"Ndemli"},
["nmm"] = {"Manangba"},
["nmn"] = {"ǃXóõ"},
["nmo"] = {"Moyon Naga"},
["nmp"] = {"Nimanbur"},
["nmq"] = {"Nambya"},
["nmr"] = {"Nimbari"},
["nms"] = {"Letemboi"},
["nmt"] = {"Namonuito"},
["nmu"] = {"Northeast Maidu"},
["nmv"] = {"Ngamini"},
["nmw"] = {"Nimoa", "Rifao"},
["nmx"] = {"Nama (Papua New Guinea)"},
["nmy"] = {"Namuyi"},
["nmz"] = {"Nawdm"},
["nna"] = {"Nyangumarta"},
["nnb"] = {"Nande"},
["nnc"] = {"Nancere"},
["nnd"] = {"West Ambae"},
["nne"] = {"Ngandyera"},
["nnf"] = {"Ngaing"},
["nng"] = {"Maring Naga"},
["nnh"] = {"Ngiemboon"},
["nni"] = {"North Nuaulu"},
["nnj"] = {"Nyangatom"},
["nnk"] = {"Nankina"},
["nnl"] = {"Northern Rengma Naga"},
["nnm"] = {"Namia"},
["nnn"] = {"Ngete"},
["nnp"] = {"Wancho Naga"},
["nnq"] = {"Ngindo"},
["nnr"] = {"Narungga"},
["nnt"] = {"Nanticoke"},
["nnu"] = {"Dwang"},
["nnv"] = {"Nugunu (Australia)"},
["nnw"] = {"Southern Nuni"},
["nny"] = {"Nyangga"},
["nnz"] = {"Nda'nda'"},
["noa"] = {"Woun Meu"},
["noc"] = {"Nuk"},
["nod"] = {"Northern Thai"},
["noe"] = {"Nimadi"},
["nof"] = {"Nomane"},
["nog"] = {"Nogai"},
["noh"] = {"Nomu"},
["noi"] = {"Noiri"},
["noj"] = {"Nonuya"},
["nok"] = {"Nooksack"},
["nol"] = {"Nomlaki"},
["non"] = {"Old Norse"},
["nop"] = {"Numanggang"},
["noq"] = {"Ngongo"},
["nos"] = {"Eastern Nisu"},
["not"] = {"Nomatsiguenga"},
["nou"] = {"Ewage-Notu"},
["nov"] = {"Novial"},
["now"] = {"Nyambo"},
["noy"] = {"Noy"},
["noz"] = {"Nayi"},
["npa"] = {"Nar Phu"},
["npb"] = {"Nupbikha"},
["npg"] = {"Ponyo-Gongwang Naga"},
["nph"] = {"Phom Naga"},
["npi"] = {"Nepali (individual language)"},
["npl"] = {"Southeastern Puebla Nahuatl"},
["npn"] = {"Mondropolon"},
["npo"] = {"Pochuri Naga"},
["nps"] = {"Nipsan"},
["npu"] = {"Puimei Naga"},
["npx"] = {"Noipx"},
["npy"] = {"Napu"},
["nqg"] = {"Southern Nago"},
["nqk"] = {"Kura Ede Nago"},
["nql"] = {"Ngendelengo"},
["nqm"] = {"Ndom"},
["nqn"] = {"Nen"},
["nqo"] = {"N'Ko", "N’Ko"},
["nqq"] = {"Kyan-Karyaw Naga"},
["nqt"] = {"Nteng"},
["nqy"] = {"Akyaung Ari Naga"},
["nra"] = {"Ngom"},
["nrb"] = {"Nara"},
["nrc"] = {"Noric"},
["nre"] = {"Southern Rengma Naga"},
["nrf"] = {"Jèrriais", "Guernésiais", "Sercquiais"},
["nrg"] = {"Narango"},
["nri"] = {"Chokri Naga"},
["nrk"] = {"Ngarla"},
["nrl"] = {"Ngarluma"},
["nrm"] = {"Narom"},
["nrn"] = {"Norn"},
["nrp"] = {"North Picene"},
["nrr"] = {"Norra", "Nora"},
["nrt"] = {"Northern Kalapuya"},
["nru"] = {"Narua"},
["nrx"] = {"Ngurmbur"},
["nrz"] = {"Lala"},
["nsa"] = {"Sangtam Naga"},
["nsb"] = {"Lower Nossob"},
["nsc"] = {"Nshi"},
["nsd"] = {"Southern Nisu"},
["nse"] = {"Nsenga"},
["nsf"] = {"Northwestern Nisu"},
["nsg"] = {"Ngasa"},
["nsh"] = {"Ngoshie"},
["nsi"] = {"Nigerian Sign Language"},
["nsk"] = {"Naskapi"},
["nsl"] = {"Norwegian Sign Language"},
["nsm"] = {"Sumi Naga"},
["nsn"] = {"Nehan"},
["nso"] = {"Pedi", "Northern Sotho", "Sepedi"},
["nsp"] = {"Nepalese Sign Language"},
["nsq"] = {"Northern Sierra Miwok"},
["nsr"] = {"Maritime Sign Language"},
["nss"] = {"Nali"},
["nst"] = {"Tase Naga"},
["nsu"] = {"Sierra Negra Nahuatl"},
["nsv"] = {"Southwestern Nisu"},
["nsw"] = {"Navut"},
["nsx"] = {"Nsongo"},
["nsy"] = {"Nasal"},
["nsz"] = {"Nisenan"},
["ntd"] = {"Northern Tidung"},
["nte"] = {"Nathembo"},
["ntg"] = {"Ngantangarra"},
["nti"] = {"Natioro"},
["ntj"] = {"Ngaanyatjarra"},
["ntk"] = {"Ikoma-Nata-Isenye"},
["ntm"] = {"Nateni"},
["nto"] = {"Ntomba"},
["ntp"] = {"Northern Tepehuan"},
["ntr"] = {"Delo"},
["ntu"] = {"Natügu"},
["ntw"] = {"Nottoway"},
["ntx"] = {"Tangkhul Naga (Myanmar)"},
["nty"] = {"Mantsi"},
["ntz"] = {"Natanzi"},
["nua"] = {"Yuanga"},
["nub"] = {"Nubian languages"},
["nuc"] = {"Nukuini"},
["nud"] = {"Ngala"},
["nue"] = {"Ngundu"},
["nuf"] = {"Nusu"},
["nug"] = {"Nungali"},
["nuh"] = {"Ndunda"},
["nui"] = {"Ngumbi"},
["nuj"] = {"Nyole"},
["nuk"] = {"Nuu-chah-nulth", "Nuuchahnulth"},
["nul"] = {"Nusa Laut"},
["num"] = {"Niuafo'ou"},
["nun"] = {"Anong"},
["nuo"] = {"Nguôn"},
["nup"] = {"Nupe-Nupe-Tako"},
["nuq"] = {"Nukumanu"},
["nur"] = {"Nukuria"},
["nus"] = {"Nuer"},
["nut"] = {"Nung (Viet Nam)"},
["nuu"] = {"Ngbundu"},
["nuv"] = {"Northern Nuni"},
["nuw"] = {"Nguluwan"},
["nux"] = {"Mehek"},
["nuy"] = {"Nunggubuyu"},
["nuz"] = {"Tlamacazapa Nahuatl"},
["nvh"] = {"Nasarian"},
["nvm"] = {"Namiae"},
["nvo"] = {"Nyokon"},
["nwa"] = {"Nawathinehena"},
["nwb"] = {"Nyabwa"},
["nwc"] = {"Classical Newari", "Classical Nepal Bhasa", "Old Newari"},
["nwe"] = {"Ngwe"},
["nwg"] = {"Ngayawung"},
["nwi"] = {"Southwest Tanna"},
["nwm"] = {"Nyamusa-Molo"},
["nwo"] = {"Nauo"},
["nwr"] = {"Nawaru"},
["nww"] = {"Ndwewe"},
["nwx"] = {"Middle Newar"},
["nwy"] = {"Nottoway-Meherrin"},
["nxa"] = {"Nauete"},
["nxd"] = {"Ngando (Democratic Republic of Congo)"},
["nxe"] = {"Nage"},
["nxg"] = {"Ngad'a"},
["nxi"] = {"Nindi"},
["nxk"] = {"Koki Naga"},
["nxl"] = {"South Nuaulu"},
["nxm"] = {"Numidian"},
["nxn"] = {"Ngawun"},
["nxo"] = {"Ndambomo"},
["nxq"] = {"Naxi"},
["nxr"] = {"Ninggerum"},
["nxx"] = {"Nafri"},
["nyb"] = {"Nyangbo"},
["nyc"] = {"Nyanga-li"},
["nyd"] = {"Nyore", "Olunyole"},
["nye"] = {"Nyengo"},
["nyf"] = {"Giryama", "Kigiryama"},
["nyg"] = {"Nyindu"},
["nyh"] = {"Nyikina"},
["nyi"] = {"Ama (Sudan)"},
["nyj"] = {"Nyanga"},
["nyk"] = {"Nyaneka"},
["nyl"] = {"Nyeu"},
["nym"] = {"Nyamwezi"},
["nyn"] = {"Nyankole"},
["nyo"] = {"Nyoro"},
["nyp"] = {"Nyang'i"},
["nyq"] = {"Nayini"},
["nyr"] = {"Nyiha (Malawi)"},
["nys"] = {"Nyungar"},
["nyt"] = {"Nyawaygi"},
["nyu"] = {"Nyungwe"},
["nyv"] = {"Nyulnyul"},
["nyw"] = {"Nyaw"},
["nyx"] = {"Nganyaywana"},
["nyy"] = {"Nyakyusa-Ngonde"},
["nza"] = {"Tigon Mbembe"},
["nzb"] = {"Njebi"},
["nzd"] = {"Nzadi"},
["nzi"] = {"Nzima"},
["nzk"] = {"Nzakara"},
["nzm"] = {"Zeme Naga"},
["nzr"] = {"Dir-Nyamzak-Mbarimi"},
["nzs"] = {"New Zealand Sign Language"},
["nzu"] = {"Teke-Nzikou"},
["nzy"] = {"Nzakambay"},
["nzz"] = {"Nanga Dama Dogon"},
["oaa"] = {"Orok"},
["oac"] = {"Oroch"},
["oar"] = {"Old Aramaic (up to 700 BCE)", "Ancient Aramaic (up to 700 BCE)"},
["oav"] = {"Old Avar"},
["obi"] = {"Obispeño"},
["obk"] = {"Southern Bontok"},
["obl"] = {"Oblo"},
["obm"] = {"Moabite"},
["obo"] = {"Obo Manobo"},
["obr"] = {"Old Burmese"},
["obt"] = {"Old Breton"},
["obu"] = {"Obulom"},
["oca"] = {"Ocaina"},
["och"] = {"Old Chinese"},
["ocm"] = {"Old Cham"},
["oco"] = {"Old Cornish"},
["ocu"] = {"Atzingo Matlatzinca"},
["oda"] = {"Odut"},
["odk"] = {"Od"},
["odt"] = {"Old Dutch"},
["odu"] = {"Odual"},
["ofo"] = {"Ofo"},
["ofs"] = {"Old Frisian"},
["ofu"] = {"Efutop"},
["ogb"] = {"Ogbia"},
["ogc"] = {"Ogbah"},
["oge"] = {"Old Georgian"},
["ogg"] = {"Ogbogolo"},
["ogo"] = {"Khana"},
["ogu"] = {"Ogbronuagum"},
["oht"] = {"Old Hittite"},
["ohu"] = {"Old Hungarian"},
["oia"] = {"Oirata"},
["oie"] = {"Okolie"},
["oin"] = {"Inebu One"},
["ojb"] = {"Northwestern Ojibwa"},
["ojc"] = {"Central Ojibwa"},
["ojg"] = {"Eastern Ojibwa"},
["ojp"] = {"Old Japanese"},
["ojs"] = {"Severn Ojibwa"},
["ojv"] = {"Ontong Java"},
["ojw"] = {"Western Ojibwa"},
["oka"] = {"Okanagan"},
["okb"] = {"Okobo"},
["okc"] = {"Kobo"},
["okd"] = {"Okodia"},
["oke"] = {"Okpe (Southwestern Edo)"},
["okg"] = {"Koko Babangk"},
["okh"] = {"Koresh-e Rostam"},
["oki"] = {"Okiek"},
["okj"] = {"Oko-Juwoi"},
["okk"] = {"Kwamtim One"},
["okl"] = {"Old Kentish Sign Language"},
["okm"] = {"Middle Korean (10th-16th cent.)"},
["okn"] = {"Oki-No-Erabu"},
["oko"] = {"Old Korean (3rd-9th cent.)"},
["okr"] = {"Kirike"},
["oks"] = {"Oko-Eni-Osayen"},
["oku"] = {"Oku"},
["okv"] = {"Orokaiva"},
["okx"] = {"Okpe (Northwestern Edo)"},
["okz"] = {"Old Khmer"},
["ola"] = {"Walungge"},
["old"] = {"Mochi"},
["ole"] = {"Olekha"},
["olk"] = {"Olkol"},
["olm"] = {"Oloma"},
["olo"] = {"Livvi"},
["olr"] = {"Olrat"},
["olt"] = {"Old Lithuanian"},
["olu"] = {"Kuvale"},
["oma"] = {"Omaha-Ponca"},
["omb"] = {"East Ambae"},
["omc"] = {"Mochica"},
["omg"] = {"Omagua"},
["omi"] = {"Omi"},
["omk"] = {"Omok"},
["oml"] = {"Ombo"},
["omn"] = {"Minoan"},
["omo"] = {"Utarmbung"},
["omp"] = {"Old Manipuri"},
["omq"] = {"Oto-Manguean languages"},
["omr"] = {"Old Marathi"},
["omt"] = {"Omotik"},
["omu"] = {"Omurano"},
["omv"] = {"Omotic languages"},
["omw"] = {"South Tairora"},
["omx"] = {"Old Mon"},
["omy"] = {"Old Malay"},
["ona"] = {"Ona"},
["onb"] = {"Lingao"},
["one"] = {"Oneida"},
["ong"] = {"Olo"},
["oni"] = {"Onin"},
["onj"] = {"Onjob"},
["onk"] = {"Kabore One"},
["onn"] = {"Onobasulu"},
["ono"] = {"Onondaga"},
["onp"] = {"Sartang"},
["onr"] = {"Northern One"},
["ons"] = {"Ono"},
["ont"] = {"Ontenu"},
["onu"] = {"Unua"},
["onw"] = {"Old Nubian"},
["onx"] = {"Onin Based Pidgin"},
["ood"] = {"Tohono O'odham"},
["oog"] = {"Ong"},
["oon"] = {"Önge"},
["oor"] = {"Oorlams"},
["oos"] = {"Old Ossetic"},
["opa"] = {"Okpamheri"},
["opk"] = {"Kopkaka"},
["opm"] = {"Oksapmin"},
["opo"] = {"Opao"},
["opt"] = {"Opata"},
["opy"] = {"Ofayé"},
["ora"] = {"Oroha"},
["orc"] = {"Orma"},
["ore"] = {"Orejón"},
["org"] = {"Oring"},
["orh"] = {"Oroqen"},
["orn"] = {"Orang Kanaq"},
["oro"] = {"Orokolo"},
["orr"] = {"Oruma"},
["ors"] = {"Orang Seletar"},
["ort"] = {"Adivasi Oriya"},
["oru"] = {"Ormuri"},
["orv"] = {"Old Russian"},
["orw"] = {"Oro Win"},
["orx"] = {"Oro"},
["ory"] = {"Odia (individual language)", "Oriya (individual language)"},
["orz"] = {"Ormu"},
["osa"] = {"Osage"},
["osc"] = {"Oscan"},
["osi"] = {"Osing"},
["osn"] = {"Old Sundanese"},
["oso"] = {"Ososo"},
["osp"] = {"Old Spanish"},
["ost"] = {"Osatu"},
["osu"] = {"Southern One"},
["osx"] = {"Old Saxon"},
["ota"] = {"Ottoman Turkish (1500-1928)"},
["otb"] = {"Old Tibetan"},
["otd"] = {"Ot Danum"},
["ote"] = {"Mezquital Otomi"},
["oti"] = {"Oti"},
["otk"] = {"Old Turkish"},
["otl"] = {"Tilapa Otomi"},
["otm"] = {"Eastern Highland Otomi"},
["otn"] = {"Tenango Otomi"},
["oto"] = {"Otomian languages"},
["otq"] = {"Querétaro Otomi"},
["otr"] = {"Otoro"},
["ots"] = {"Estado de México Otomi"},
["ott"] = {"Temoaya Otomi"},
["otu"] = {"Otuke"},
["otw"] = {"Ottawa"},
["otx"] = {"Texcatepec Otomi"},
["oty"] = {"Old Tamil"},
["otz"] = {"Ixtenco Otomi"},
["oua"] = {"Tagargrent"},
["oub"] = {"Glio-Oubi"},
["oue"] = {"Oune"},
["oui"] = {"Old Uighur"},
["oum"] = {"Ouma"},
["ovd"] = {"Elfdalian", "Övdalian"},
["owi"] = {"Owiniga"},
["owl"] = {"Old Welsh"},
["oyb"] = {"Oy"},
["oyd"] = {"Oyda"},
["oym"] = {"Wayampi"},
["oyy"] = {"Oya'oya"},
["ozm"] = {"Koonzime"},
["paa"] = {"Papuan languages"},
["pab"] = {"Parecís"},
["pac"] = {"Pacoh"},
["pad"] = {"Paumarí"},
["pae"] = {"Pagibete"},
["paf"] = {"Paranawát"},
["pag"] = {"Pangasinan"},
["pah"] = {"Tenharim"},
["pai"] = {"Pe"},
["pak"] = {"Parakanã"},
["pal"] = {"Pahlavi"},
["pam"] = {"Pampanga", "Kapampangan"},
["pao"] = {"Northern Paiute"},
["pap"] = {"Papiamento"},
["paq"] = {"Parya"},
["par"] = {"Panamint", "Timbisha"},
["pas"] = {"Papasena"},
["pau"] = {"Palauan"},
["pav"] = {"Pakaásnovos"},
["paw"] = {"Pawnee"},
["pax"] = {"Pankararé"},
["pay"] = {"Pech"},
["paz"] = {"Pankararú"},
["pbb"] = {"Páez"},
["pbc"] = {"Patamona"},
["pbe"] = {"Mezontla Popoloca"},
["pbf"] = {"Coyotepec Popoloca"},
["pbg"] = {"Paraujano"},
["pbh"] = {"E'ñapa Woromaipu"},
["pbi"] = {"Parkwa"},
["pbl"] = {"Mak (Nigeria)"},
["pbm"] = {"Puebla Mazatec"},
["pbn"] = {"Kpasam"},
["pbo"] = {"Papel"},
["pbp"] = {"Badyara"},
["pbr"] = {"Pangwa"},
["pbs"] = {"Central Pame"},
["pbt"] = {"Southern Pashto"},
["pbu"] = {"Northern Pashto"},
["pbv"] = {"Pnar"},
["pby"] = {"Pyu (Papua New Guinea)"},
["pca"] = {"Santa Inés Ahuatempan Popoloca"},
["pcb"] = {"Pear"},
["pcc"] = {"Bouyei"},
["pcd"] = {"Picard"},
["pce"] = {"Ruching Palaung"},
["pcf"] = {"Paliyan"},
["pcg"] = {"Paniya"},
["pch"] = {"Pardhan"},
["pci"] = {"Duruwa"},
["pcj"] = {"Parenga"},
["pck"] = {"Paite Chin"},
["pcl"] = {"Pardhi"},
["pcm"] = {"Nigerian Pidgin"},
["pcn"] = {"Piti"},
["pcp"] = {"Pacahuara"},
["pcw"] = {"Pyapun"},
["pda"] = {"Anam"},
["pdc"] = {"Pennsylvania German"},
["pdi"] = {"Pa Di"},
["pdn"] = {"Podena", "Fedan"},
["pdo"] = {"Padoe"},
["pdt"] = {"Plautdietsch"},
["pdu"] = {"Kayan"},
["pea"] = {"Peranakan Indonesian"},
["peb"] = {"Eastern Pomo"},
["ped"] = {"Mala (Papua New Guinea)"},
["pee"] = {"Taje"},
["pef"] = {"Northeastern Pomo"},
["peg"] = {"Pengo"},
["peh"] = {"Bonan"},
["pei"] = {"Chichimeca-Jonaz"},
["pej"] = {"Northern Pomo"},
["pek"] = {"Penchal"},
["pel"] = {"Pekal"},
["pem"] = {"Phende"},
["peo"] = {"Old Persian (ca. 600-400 B.C.)"},
["pep"] = {"Kunja"},
["peq"] = {"Southern Pomo"},
["pes"] = {"Iranian Persian"},
["pev"] = {"Pémono"},
["pex"] = {"Petats"},
["pey"] = {"Petjo"},
["pez"] = {"Eastern Penan"},
["pfa"] = {"Pááfang"},
["pfe"] = {"Pere"},
["pfl"] = {"Pfaelzisch"},
["pga"] = {"Sudanese Creole Arabic"},
["pgd"] = {"Gāndhārī"},
["pgg"] = {"Pangwali"},
["pgi"] = {"Pagi"},
["pgk"] = {"Rerep"},
["pgl"] = {"Primitive Irish"},
["pgn"] = {"Paelignian"},
["pgs"] = {"Pangseng"},
["pgu"] = {"Pagu"},
["pgz"] = {"Papua New Guinean Sign Language"},
["pha"] = {"Pa-Hng"},
["phd"] = {"Phudagi"},
["phg"] = {"Phuong"},
["phh"] = {"Phukha"},
["phi"] = {"Philippine languages"},
["phj"] = {"Pahari"},
["phk"] = {"Phake"},
["phl"] = {"Phalura", "Palula"},
["phm"] = {"Phimbi"},
["phn"] = {"Phoenician"},
["pho"] = {"Phunoi"},
["phq"] = {"Phana'"},
["phr"] = {"Pahari-Potwari"},
["pht"] = {"Phu Thai"},
["phu"] = {"Phuan"},
["phv"] = {"Pahlavani"},
["phw"] = {"Phangduwali"},
["pia"] = {"Pima Bajo"},
["pib"] = {"Yine"},
["pic"] = {"Pinji"},
["pid"] = {"Piaroa"},
["pie"] = {"Piro"},
["pif"] = {"Pingelapese"},
["pig"] = {"Pisabo"},
["pih"] = {"Pitcairn-Norfolk"},
["pij"] = {"Pijao"},
["pil"] = {"Yom"},
["pim"] = {"Powhatan"},
["pin"] = {"Piame"},
["pio"] = {"Piapoco"},
["pip"] = {"Pero"},
["pir"] = {"Piratapuyo"},
["pis"] = {"Pijin"},
["pit"] = {"Pitta Pitta"},
["piu"] = {"Pintupi-Luritja"},
["piv"] = {"Pileni", "Vaeakau-Taumako"},
["piw"] = {"Pimbwe"},
["pix"] = {"Piu"},
["piy"] = {"Piya-Kwonci"},
["piz"] = {"Pije"},
["pjt"] = {"Pitjantjatjara"},
["pka"] = {"Ardhamāgadhī Prākrit"},
["pkb"] = {"Pokomo", "Kipfokomo"},
["pkc"] = {"Paekche"},
["pkg"] = {"Pak-Tong"},
["pkh"] = {"Pankhu"},
["pkn"] = {"Pakanha"},
["pko"] = {"Pökoot"},
["pkp"] = {"Pukapuka"},
["pkr"] = {"Attapady Kurumba"},
["pks"] = {"Pakistan Sign Language"},
["pkt"] = {"Maleng"},
["pku"] = {"Paku"},
["pla"] = {"Miani"},
["plb"] = {"Polonombauk"},
["plc"] = {"Central Palawano"},
["pld"] = {"Polari"},
["ple"] = {"Palu'e"},
["plf"] = {"Central Malayo-Polynesian languages"},
["plg"] = {"Pilagá"},
["plh"] = {"Paulohi"},
["plk"] = {"Kohistani Shina"},
["pll"] = {"Shwe Palaung"},
["pln"] = {"Palenquero"},
["plo"] = {"Oluta Popoluca"},
["plq"] = {"Palaic"},
["plr"] = {"Palaka Senoufo"},
["pls"] = {"San Marcos Tlacoyalco Popoloca", "San Marcos Tlalcoyalco Popoloca"},
["plt"] = {"Plateau Malagasy"},
["plu"] = {"Palikúr"},
["plv"] = {"Southwest Palawano"},
["plw"] = {"Brooke's Point Palawano"},
["ply"] = {"Bolyu"},
["plz"] = {"Paluan"},
["pma"] = {"Paama"},
["pmb"] = {"Pambia"},
["pmd"] = {"Pallanganmiddang"},
["pme"] = {"Pwaamei"},
["pmf"] = {"Pamona"},
["pmh"] = {"Māhārāṣṭri Prākrit"},
["pmi"] = {"Northern Pumi"},
["pmj"] = {"Southern Pumi"},
["pml"] = {"Lingua Franca"},
["pmm"] = {"Pomo"},
["pmn"] = {"Pam"},
["pmo"] = {"Pom"},
["pmq"] = {"Northern Pame"},
["pmr"] = {"Paynamar"},
["pms"] = {"Piemontese"},
["pmt"] = {"Tuamotuan"},
["pmw"] = {"Plains Miwok"},
["pmx"] = {"Poumei Naga"},
["pmy"] = {"Papuan Malay"},
["pmz"] = {"Southern Pame"},
["pna"] = {"Punan Bah-Biau"},
["pnb"] = {"Western Panjabi"},
["pnc"] = {"Pannei"},
["pnd"] = {"Mpinda"},
["pne"] = {"Western Penan"},
["png"] = {"Pangu", "Pongu"},
["pnh"] = {"Penrhyn"},
["pni"] = {"Aoheng"},
["pnj"] = {"Pinjarup"},
["pnk"] = {"Paunaka"},
["pnl"] = {"Paleni"},
["pnm"] = {"Punan Batu 1"},
["pnn"] = {"Pinai-Hagahai"},
["pno"] = {"Panobo"},
["pnp"] = {"Pancana"},
["pnq"] = {"Pana (Burkina Faso)"},
["pnr"] = {"Panim"},
["pns"] = {"Ponosakan"},
["pnt"] = {"Pontic"},
["pnu"] = {"Jiongnai Bunu"},
["pnv"] = {"Pinigura"},
["pnw"] = {"Banyjima", "Panytyima"},
["pnx"] = {"Phong-Kniang"},
["pny"] = {"Pinyin"},
["pnz"] = {"Pana (Central African Republic)"},
["poc"] = {"Poqomam"},
["poe"] = {"San Juan Atzingo Popoloca"},
["pof"] = {"Poke"},
["pog"] = {"Potiguára"},
["poh"] = {"Poqomchi'"},
["poi"] = {"Highland Popoluca"},
["pok"] = {"Pokangá"},
["pom"] = {"Southeastern Pomo"},
["pon"] = {"Pohnpeian"},
["poo"] = {"Central Pomo"},
["pop"] = {"Pwapwâ"},
["poq"] = {"Texistepec Popoluca"},
["pos"] = {"Sayula Popoluca"},
["pot"] = {"Potawatomi"},
["pov"] = {"Upper Guinea Crioulo"},
["pow"] = {"San Felipe Otlaltepec Popoloca"},
["pox"] = {"Polabian"},
["poy"] = {"Pogolo"},
["poz"] = {"Malayo-Polynesian languages"},
["ppe"] = {"Papi"},
["ppi"] = {"Paipai"},
["ppk"] = {"Uma"},
["ppl"] = {"Pipil", "Nicarao"},
["ppm"] = {"Papuma"},
["ppn"] = {"Papapana"},
["ppo"] = {"Folopa"},
["ppp"] = {"Pelende"},
["ppq"] = {"Pei"},
["pps"] = {"San Luís Temalacayuca Popoloca"},
["ppt"] = {"Pare"},
["ppu"] = {"Papora"},
["pqa"] = {"Pa'a"},
["pqe"] = {"Eastern Malayo-Polynesian languages"},
["pqm"] = {"Malecite-Passamaquoddy"},
["pqw"] = {"Western Malayo-Polynesian languages"},
["pra"] = {"Prakrit languages"},
["prc"] = {"Parachi"},
["prd"] = {"Parsi-Dari"},
["pre"] = {"Principense"},
["prf"] = {"Paranan"},
["prg"] = {"Prussian"},
["prh"] = {"Porohanon"},
["pri"] = {"Paicî"},
["prk"] = {"Parauk"},
["prl"] = {"Peruvian Sign Language"},
["prm"] = {"Kibiri"},
["prn"] = {"Prasuni"},
["pro"] = {"Old Provençal (to 1500)", "Old Occitan (to 1500)"},
["prq"] = {"Ashéninka Perené"},
["prr"] = {"Puri"},
["prs"] = {"Dari", "Afghan Persian"},
["prt"] = {"Phai"},
["pru"] = {"Puragi"},
["prw"] = {"Parawen"},
["prx"] = {"Purik"},
["prz"] = {"Providencia Sign Language"},
["psa"] = {"Asue Awyu"},
["psc"] = {"Iranian Sign Language", "Persian Sign Language"},
["psd"] = {"Plains Indian Sign Language"},
["pse"] = {"Central Malay"},
["psg"] = {"Penang Sign Language"},
["psh"] = {"Southwest Pashai", "Southwest Pashayi"},
["psi"] = {"Southeast Pashai", "Southeast Pashayi"},
["psl"] = {"Puerto Rican Sign Language"},
["psm"] = {"Pauserna"},
["psn"] = {"Panasuan"},
["pso"] = {"Polish Sign Language"},
["psp"] = {"Philippine Sign Language"},
["psq"] = {"Pasi"},
["psr"] = {"Portuguese Sign Language"},
["pss"] = {"Kaulong"},
["pst"] = {"Central Pashto"},
["psu"] = {"Sauraseni Prākrit"},
["psw"] = {"Port Sandwich"},
["psy"] = {"Piscataway"},
["pta"] = {"Pai Tavytera"},
["pth"] = {"Pataxó Hã-Ha-Hãe"},
["pti"] = {"Pindiini", "Wangkatha"},
["ptn"] = {"Patani"},
["pto"] = {"Zo'é"},
["ptp"] = {"Patep"},
["ptq"] = {"Pattapu"},
["ptr"] = {"Piamatsina"},
["ptt"] = {"Enrekang"},
["ptu"] = {"Bambam"},
["ptv"] = {"Port Vato"},
["ptw"] = {"Pentlatch"},
["pty"] = {"Pathiya"},
["pua"] = {"Western Highland Purepecha"},
["pub"] = {"Purum"},
["puc"] = {"Punan Merap"},
["pud"] = {"Punan Aput"},
["pue"] = {"Puelche"},
["puf"] = {"Punan Merah"},
["pug"] = {"Phuie"},
["pui"] = {"Puinave"},
["puj"] = {"Punan Tubu"},
["pum"] = {"Puma"},
["puo"] = {"Puoc"},
["pup"] = {"Pulabu"},
["puq"] = {"Puquina"},
["pur"] = {"Puruborá"},
["put"] = {"Putoh"},
["puu"] = {"Punu"},
["puw"] = {"Puluwatese"},
["pux"] = {"Puare"},
["puy"] = {"Purisimeño"},
["pwa"] = {"Pawaia"},
["pwb"] = {"Panawa"},
["pwg"] = {"Gapapaiwa"},
["pwi"] = {"Patwin"},
["pwm"] = {"Molbog"},
["pwn"] = {"Paiwan"},
["pwo"] = {"Pwo Western Karen"},
["pwr"] = {"Powari"},
["pww"] = {"Pwo Northern Karen"},
["pxm"] = {"Quetzaltepec Mixe"},
["pye"] = {"Pye Krumen"},
["pym"] = {"Fyam"},
["pyn"] = {"Poyanáwa"},
["pys"] = {"Paraguayan Sign Language", "Lengua de Señas del Paraguay"},
["pyu"] = {"Puyuma"},
["pyx"] = {"Pyu (Myanmar)"},
["pyy"] = {"Pyen"},
["pze"] = {"Pesse"},
["pzh"] = {"Pazeh"},
["pzn"] = {"Jejara Naga", "Para Naga"},
["qua"] = {"Quapaw"},
["qub"] = {"Huallaga Huánuco Quechua"},
["quc"] = {"K'iche'", "Quiché"},
["qud"] = {"Calderón Highland Quichua"},
["quf"] = {"Lambayeque Quechua"},
["qug"] = {"Chimborazo Highland Quichua"},
["quh"] = {"South Bolivian Quechua"},
["qui"] = {"Quileute"},
["quk"] = {"Chachapoyas Quechua"},
["qul"] = {"North Bolivian Quechua"},
["qum"] = {"Sipacapense"},
["qun"] = {"Quinault"},
["qup"] = {"Southern Pastaza Quechua"},
["quq"] = {"Quinqui"},
["qur"] = {"Yanahuanca Pasco Quechua"},
["qus"] = {"Santiago del Estero Quichua"},
["quv"] = {"Sacapulteco"},
["quw"] = {"Tena Lowland Quichua"},
["qux"] = {"Yauyos Quechua"},
["quy"] = {"Ayacucho Quechua"},
["quz"] = {"Cusco Quechua"},
["qva"] = {"Ambo-Pasco Quechua"},
["qvc"] = {"Cajamarca Quechua"},
["qve"] = {"Eastern Apurímac Quechua"},
["qvh"] = {"Huamalíes-Dos de Mayo Huánuco Quechua"},
["qvi"] = {"Imbabura Highland Quichua"},
["qvj"] = {"Loja Highland Quichua"},
["qvl"] = {"Cajatambo North Lima Quechua"},
["qvm"] = {"Margos-Yarowilca-Lauricocha Quechua"},
["qvn"] = {"North Junín Quechua"},
["qvo"] = {"Napo Lowland Quechua"},
["qvp"] = {"Pacaraos Quechua"},
["qvs"] = {"San Martín Quechua"},
["qvw"] = {"Huaylla Wanca Quechua"},
["qvy"] = {"Queyu"},
["qvz"] = {"Northern Pastaza Quichua"},
["qwa"] = {"Corongo Ancash Quechua"},
["qwc"] = {"Classical Quechua"},
["qwe"] = {"Quechuan (family)"},
["qwh"] = {"Huaylas Ancash Quechua"},
["qwm"] = {"Kuman (Russia)"},
["qws"] = {"Sihuas Ancash Quechua"},
["qwt"] = {"Kwalhioqua-Tlatskanai"},
["qxa"] = {"Chiquián Ancash Quechua"},
["qxc"] = {"Chincha Quechua"},
["qxh"] = {"Panao Huánuco Quechua"},
["qxl"] = {"Salasaca Highland Quichua"},
["qxn"] = {"Northern Conchucos Ancash Quechua"},
["qxo"] = {"Southern Conchucos Ancash Quechua"},
["qxp"] = {"Puno Quechua"},
["qxq"] = {"Qashqa'i"},
["qxr"] = {"Cañar Highland Quichua"},
["qxs"] = {"Southern Qiang"},
["qxt"] = {"Santa Ana de Tusi Pasco Quechua"},
["qxu"] = {"Arequipa-La Unión Quechua"},
["qxw"] = {"Jauja Wanca Quechua"},
["qya"] = {"Quenya"},
["qyp"] = {"Quiripi"},
["raa"] = {"Dungmali"},
["rab"] = {"Camling"},
["rac"] = {"Rasawa"},
["rad"] = {"Rade"},
["raf"] = {"Western Meohang"},
["rag"] = {"Logooli", "Lulogooli"},
["rah"] = {"Rabha"},
["rai"] = {"Ramoaaina"},
["raj"] = {"Rajasthani"},
["rak"] = {"Tulu-Bohuai"},
["ral"] = {"Ralte"},
["ram"] = {"Canela"},
["ran"] = {"Riantana"},
["rao"] = {"Rao"},
["rap"] = {"Rapanui"},
["raq"] = {"Saam"},
["rar"] = {"Rarotongan", "Cook Islands Maori"},
["ras"] = {"Tegali"},
["rat"] = {"Razajerdi"},
["rau"] = {"Raute"},
["rav"] = {"Sampang"},
["raw"] = {"Rawang"},
["rax"] = {"Rang"},
["ray"] = {"Rapa"},
["raz"] = {"Rahambuu"},
["rbb"] = {"Rumai Palaung"},
["rbk"] = {"Northern Bontok"},
["rbl"] = {"Miraya Bikol"},
["rbp"] = {"Barababaraba"},
["rcf"] = {"Réunion Creole French"},
["rdb"] = {"Rudbari"},
["rea"] = {"Rerau"},
["reb"] = {"Rembong"},
["ree"] = {"Rejang Kayan"},
["reg"] = {"Kara (Tanzania)"},
["rei"] = {"Reli"},
["rej"] = {"Rejang"},
["rel"] = {"Rendille"},
["rem"] = {"Remo"},
["ren"] = {"Rengao"},
["rer"] = {"Rer Bare"},
["res"] = {"Reshe"},
["ret"] = {"Retta"},
["rey"] = {"Reyesano"},
["rga"] = {"Roria"},
["rge"] = {"Romano-Greek"},
["rgk"] = {"Rangkas"},
["rgn"] = {"Romagnol"},
["rgr"] = {"Resígaro"},
["rgs"] = {"Southern Roglai"},
["rgu"] = {"Ringgou"},
["rhg"] = {"Rohingya"},
["rhp"] = {"Yahang"},
["ria"] = {"Riang (India)"},
["rib"] = {"Bribri Sign Language"},
["rif"] = {"Tarifit"},
["ril"] = {"Riang Lang", "Riang (Myanmar)"},
["rim"] = {"Nyaturu"},
["rin"] = {"Nungu"},
["rir"] = {"Ribun"},
["rit"] = {"Ritharrngu"},
["riu"] = {"Riung"},
["rjg"] = {"Rajong"},
["rji"] = {"Raji"},
["rjs"] = {"Rajbanshi"},
["rka"] = {"Kraol"},
["rkb"] = {"Rikbaktsa"},
["rkh"] = {"Rakahanga-Manihiki"},
["rki"] = {"Rakhine"},
["rkm"] = {"Marka"},
["rkt"] = {"Rangpuri", "Kamta"},
["rkw"] = {"Arakwal"},
["rma"] = {"Rama"},
["rmb"] = {"Rembarrnga"},
["rmc"] = {"Carpathian Romani"},
["rmd"] = {"Traveller Danish"},
["rme"] = {"Angloromani"},
["rmf"] = {"Kalo Finnish Romani"},
["rmg"] = {"Traveller Norwegian"},
["rmh"] = {"Murkim"},
["rmi"] = {"Lomavren"},
["rmk"] = {"Romkun"},
["rml"] = {"Baltic Romani"},
["rmm"] = {"Roma"},
["rmn"] = {"Balkan Romani"},
["rmo"] = {"Sinte Romani"},
["rmp"] = {"Rempi"},
["rmq"] = {"Caló"},
["rms"] = {"Romanian Sign Language"},
["rmt"] = {"Domari"},
["rmu"] = {"Tavringer Romani"},
["rmv"] = {"Romanova"},
["rmw"] = {"Welsh Romani"},
["rmx"] = {"Romam"},
["rmy"] = {"Vlax Romani"},
["rmz"] = {"Marma"},
["rnb"] = {"Brunca Sign Language"},
["rnd"] = {"Ruund"},
["rng"] = {"Ronga"},
["rnl"] = {"Ranglong"},
["rnn"] = {"Roon"},
["rnp"] = {"Rongpo"},
["rnr"] = {"Nari Nari"},
["rnw"] = {"Rungwa"},
["roa"] = {"Romance languages"},
["rob"] = {"Tae'"},
["roc"] = {"Cacgia Roglai"},
["rod"] = {"Rogo"},
["roe"] = {"Ronji"},
["rof"] = {"Rombo"},
["rog"] = {"Northern Roglai"},
["rol"] = {"Romblomanon"},
["rom"] = {"Romany"},
["roo"] = {"Rotokas"},
["rop"] = {"Kriol"},
["ror"] = {"Rongga"},
["rou"] = {"Runga"},
["row"] = {"Dela-Oenale"},
["rpn"] = {"Repanbitip"},
["rpt"] = {"Rapting"},
["rri"] = {"Ririo"},
["rro"] = {"Waima"},
["rrt"] = {"Arritinngithigh"},
["rsb"] = {"Romano-Serbian"},
["rsk"] = {"Ruthenian", "Rusnak"},
["rsl"] = {"Russian Sign Language"},
["rsm"] = {"Miriwoong Sign Language"},
["rsn"] = {"Rwandan Sign Language"},
["rsw"] = {"Rishiwa"},
["rtc"] = {"Rungtu Chin"},
["rth"] = {"Ratahan"},
["rtm"] = {"Rotuman"},
["rts"] = {"Yurats"},
["rtw"] = {"Rathawi"},
["rub"] = {"Gungu"},
["ruc"] = {"Ruuli"},
["rue"] = {"Rusyn"},
["ruf"] = {"Luguru"},
["rug"] = {"Roviana"},
["ruh"] = {"Ruga"},
["rui"] = {"Rufiji"},
["ruk"] = {"Che"},
["ruo"] = {"Istro Romanian"},
["rup"] = {"Macedo-Romanian", "Aromanian", "Arumanian"},
["ruq"] = {"Megleno Romanian"},
["rut"] = {"Rutul"},
["ruu"] = {"Lanas Lobu"},
["ruy"] = {"Mala (Nigeria)"},
["ruz"] = {"Ruma"},
["rwa"] = {"Rawo"},
["rwk"] = {"Rwa"},
["rwl"] = {"Ruwila"},
["rwm"] = {"Amba (Uganda)"},
["rwo"] = {"Rawa"},
["rwr"] = {"Marwari (India)"},
["rxd"] = {"Ngardi"},
["rxw"] = {"Karuwali", "Garuwali"},
["ryn"] = {"Northern Amami-Oshima"},
["rys"] = {"Yaeyama"},
["ryu"] = {"Central Okinawan"},
["rzh"] = {"Rāziḥī"},
["saa"] = {"Saba"},
["sab"] = {"Buglere"},
["sac"] = {"Meskwaki"},
["sad"] = {"Sandawe"},
["sae"] = {"Sabanê"},
["saf"] = {"Safaliba"},
["sah"] = {"Yakut"},
["sai"] = {"South American Indian languages"},
["saj"] = {"Sahu"},
["sak"] = {"Sake"},
["sal"] = {"Salishan languages"},
["sam"] = {"Samaritan Aramaic"},
["sao"] = {"Sause"},
["saq"] = {"Samburu"},
["sar"] = {"Saraveca"},
["sas"] = {"Sasak"},
["sat"] = {"Santali"},
["sau"] = {"Saleman"},
["sav"] = {"Saafi-Saafi"},
["saw"] = {"Sawi"},
["sax"] = {"Sa"},
["say"] = {"Saya"},
["saz"] = {"Saurashtra"},
["sba"] = {"Ngambay"},
["sbb"] = {"Simbo"},
["sbc"] = {"Kele (Papua New Guinea)"},
["sbd"] = {"Southern Samo"},
["sbe"] = {"Saliba"},
["sbf"] = {"Chabu", "Shabo"},
["sbg"] = {"Seget"},
["sbh"] = {"Sori-Harengan"},
["sbi"] = {"Seti"},
["sbj"] = {"Surbakhal"},
["sbk"] = {"Safwa"},
["sbl"] = {"Botolan Sambal"},
["sbm"] = {"Sagala"},
["sbn"] = {"Sindhi Bhil"},
["sbo"] = {"Sabüm"},
["sbp"] = {"Sangu (Tanzania)"},
["sbq"] = {"Sileibi"},
["sbr"] = {"Sembakung Murut"},
["sbs"] = {"Subiya"},
["sbt"] = {"Kimki"},
["sbu"] = {"Stod Bhoti"},
["sbv"] = {"Sabine"},
["sbw"] = {"Simba"},
["sbx"] = {"Seberuang"},
["sby"] = {"Soli"},
["sbz"] = {"Sara Kaba"},
["scb"] = {"Chut"},
["sce"] = {"Dongxiang"},
["scf"] = {"San Miguel Creole French"},
["scg"] = {"Sanggau"},
["sch"] = {"Sakachep"},
["sci"] = {"Sri Lankan Creole Malay"},
["sck"] = {"Sadri"},
["scl"] = {"Shina"},
["scn"] = {"Sicilian"},
["sco"] = {"Scots"},
["scp"] = {"Hyolmo", "Helambu Sherpa"},
["scq"] = {"Sa'och"},
["scs"] = {"North Slavey"},
["sct"] = {"Southern Katang"},
["scu"] = {"Shumcho"},
["scv"] = {"Sheni"},
["scw"] = {"Sha"},
["scx"] = {"Sicel"},
["sda"] = {"Toraja-Sa'dan"},
["sdb"] = {"Shabak"},
["sdc"] = {"Sassarese Sardinian"},
["sde"] = {"Surubu"},
["sdf"] = {"Sarli"},
["sdg"] = {"Savi"},
["sdh"] = {"Southern Kurdish"},
["sdj"] = {"Suundi"},
["sdk"] = {"Sos Kundi"},
["sdl"] = {"Saudi Arabian Sign Language"},
["sdn"] = {"Gallurese Sardinian"},
["sdo"] = {"Bukar-Sadung Bidayuh"},
["sdp"] = {"Sherdukpen"},
["sdq"] = {"Semandang"},
["sdr"] = {"Oraon Sadri"},
["sds"] = {"Sened"},
["sdt"] = {"Shuadit"},
["sdu"] = {"Sarudu"},
["sdv"] = {"Eastern Sudanic languages"},
["sdx"] = {"Sibu Melanau"},
["sdz"] = {"Sallands"},
["sea"] = {"Semai"},
["seb"] = {"Shempire Senoufo"},
["sec"] = {"Sechelt"},
["sed"] = {"Sedang"},
["see"] = {"Seneca"},
["sef"] = {"Cebaara Senoufo"},
["seg"] = {"Segeju"},
["seh"] = {"Sena"},
["sei"] = {"Seri"},
["sej"] = {"Sene"},
["sek"] = {"Sekani"},
["sel"] = {"Selkup"},
["sem"] = {"Semitic languages"},
["sen"] = {"Nanerigé Sénoufo"},
["seo"] = {"Suarmin"},
["sep"] = {"Sìcìté Sénoufo"},
["seq"] = {"Senara Sénoufo"},
["ser"] = {"Serrano"},
["ses"] = {"Koyraboro Senni Songhai"},
["set"] = {"Sentani"},
["seu"] = {"Serui-Laut"},
["sev"] = {"Nyarafolo Senoufo"},
["sew"] = {"Sewa Bay"},
["sey"] = {"Secoya"},
["sez"] = {"Senthang Chin"},
["sfb"] = {"Langue des signes de Belgique Francophone", "French Belgian Sign Language"},
["sfe"] = {"Eastern Subanen"},
["sfm"] = {"Small Flowery Miao"},
["sfs"] = {"South African Sign Language"},
["sfw"] = {"Sehwi"},
["sga"] = {"Old Irish (to 900)"},
["sgb"] = {"Mag-antsi Ayta"},
["sgc"] = {"Kipsigis"},
["sgd"] = {"Surigaonon"},
["sge"] = {"Segai"},
["sgg"] = {"Swiss-German Sign Language"},
["sgh"] = {"Shughni"},
["sgi"] = {"Suga"},
["sgj"] = {"Surgujia"},
["sgk"] = {"Sangkong"},
["sgm"] = {"Singa"},
["sgn"] = {"Sign languages"},
["sgp"] = {"Singpho"},
["sgr"] = {"Sangisari"},
["sgs"] = {"Samogitian"},
["sgt"] = {"Brokpake"},
["sgu"] = {"Salas"},
["sgw"] = {"Sebat Bet Gurage"},
["sgx"] = {"Sierra Leone Sign Language"},
["sgy"] = {"Sanglechi"},
["sgz"] = {"Sursurunga"},
["sha"] = {"Shall-Zwall"},
["shb"] = {"Ninam"},
["shc"] = {"Sonde"},
["shd"] = {"Kundal Shahi"},
["she"] = {"Sheko"},
["shg"] = {"Shua"},
["shh"] = {"Shoshoni"},
["shi"] = {"Tachelhit"},
["shj"] = {"Shatt"},
["shk"] = {"Shilluk"},
["shl"] = {"Shendu"},
["shm"] = {"Shahrudi"},
["shn"] = {"Shan"},
["sho"] = {"Shanga"},
["shp"] = {"Shipibo-Conibo"},
["shq"] = {"Sala"},
["shr"] = {"Shi"},
["shs"] = {"Shuswap"},
["sht"] = {"Shasta"},
["shu"] = {"Chadian Arabic"},
["shv"] = {"Shehri"},
["shw"] = {"Shwai"},
["shx"] = {"She"},
["shy"] = {"Tachawit"},
["shz"] = {"Syenara Senoufo"},
["sia"] = {"Akkala Sami"},
["sib"] = {"Sebop"},
["sid"] = {"Sidamo"},
["sie"] = {"Simaa"},
["sif"] = {"Siamou"},
["sig"] = {"Paasaal"},
["sih"] = {"Zire", "Sîshëë"},
["sii"] = {"Shom Peng"},
["sij"] = {"Numbami"},
["sik"] = {"Sikiana"},
["sil"] = {"Tumulung Sisaala"},
["sim"] = {"Mende (Papua New Guinea)"},
["sio"] = {"Siouan languages"},
["sip"] = {"Sikkimese"},
["siq"] = {"Sonia"},
["sir"] = {"Siri"},
["sis"] = {"Siuslaw"},
["sit"] = {"Sino-Tibetan languages"},
["siu"] = {"Sinagen"},
["siv"] = {"Sumariup"},
["siw"] = {"Siwai"},
["six"] = {"Sumau"},
["siy"] = {"Sivandi"},
["siz"] = {"Siwi"},
["sja"] = {"Epena"},
["sjb"] = {"Sajau Basap"},
["sjd"] = {"Kildin Sami"},
["sje"] = {"Pite Sami"},
["sjg"] = {"Assangori"},
["sjk"] = {"Kemi Sami"},
["sjl"] = {"Sajalong", "Miji"},
["sjm"] = {"Mapun"},
["sjn"] = {"Sindarin"},
["sjo"] = {"Xibe"},
["sjp"] = {"Surjapuri"},
["sjr"] = {"Siar-Lak"},
["sjs"] = {"Senhaja De Srair"},
["sjt"] = {"Ter Sami"},
["sju"] = {"Ume Sami"},
["sjw"] = {"Shawnee"},
["ska"] = {"Skagit"},
["skb"] = {"Saek"},
["skc"] = {"Ma Manda"},
["skd"] = {"Southern Sierra Miwok"},
["ske"] = {"Seke (Vanuatu)"},
["skf"] = {"Sakirabiá"},
["skg"] = {"Sakalava Malagasy"},
["skh"] = {"Sikule"},
["ski"] = {"Sika"},
["skj"] = {"Seke (Nepal)"},
["skm"] = {"Kutong"},
["skn"] = {"Kolibugan Subanon"},
["sko"] = {"Seko Tengah"},
["skp"] = {"Sekapan"},
["skq"] = {"Sininkere"},
["skr"] = {"Saraiki", "Seraiki"},
["sks"] = {"Maia"},
["skt"] = {"Sakata"},
["sku"] = {"Sakao"},
["skv"] = {"Skou"},
["skw"] = {"Skepi Creole Dutch"},
["skx"] = {"Seko Padang"},
["sky"] = {"Sikaiana"},
["skz"] = {"Sekar"},
["sla"] = {"Slavic languages"},
["slc"] = {"Sáliba"},
["sld"] = {"Sissala"},
["sle"] = {"Sholaga"},
["slf"] = {"Swiss-Italian Sign Language"},
["slg"] = {"Selungai Murut"},
["slh"] = {"Southern Puget Sound Salish"},
["sli"] = {"Lower Silesian"},
["slj"] = {"Salumá"},
["sll"] = {"Salt-Yui"},
["slm"] = {"Pangutaran Sama"},
["sln"] = {"Salinan"},
["slp"] = {"Lamaholot"},
["slr"] = {"Salar"},
["sls"] = {"Singapore Sign Language"},
["slt"] = {"Sila"},
["slu"] = {"Selaru"},
["slw"] = {"Sialum"},
["slx"] = {"Salampasu"},
["sly"] = {"Selayar"},
["slz"] = {"Ma'ya"},
["sma"] = {"Southern Sami"},
["smb"] = {"Simbari"},
["smc"] = {"Som"},
["smf"] = {"Auwe"},
["smg"] = {"Simbali"},
["smh"] = {"Samei"},
["smi"] = {"Sami languages"},
["smj"] = {"Lule Sami"},
["smk"] = {"Bolinao"},
["sml"] = {"Central Sama"},
["smm"] = {"Musasa"},
["smn"] = {"Inari Sami"},
["smp"] = {"Samaritan"},
["smq"] = {"Samo"},
["smr"] = {"Simeulue"},
["sms"] = {"Skolt Sami"},
["smt"] = {"Simte"},
["smu"] = {"Somray"},
["smv"] = {"Samvedi"},
["smw"] = {"Sumbawa"},
["smx"] = {"Samba"},
["smy"] = {"Semnani"},
["smz"] = {"Simeku"},
["snc"] = {"Sinaugoro"},
["sne"] = {"Bau Bidayuh"},
["snf"] = {"Noon"},
["sng"] = {"Sanga (Democratic Republic of Congo)"},
["sni"] = {"Sensi"},
["snj"] = {"Riverain Sango"},
["snk"] = {"Soninke"},
["snl"] = {"Sangil"},
["snm"] = {"Southern Ma'di"},
["snn"] = {"Siona"},
["sno"] = {"Snohomish"},
["snp"] = {"Siane"},
["snq"] = {"Sangu (Gabon)"},
["snr"] = {"Sihan"},
["sns"] = {"South West Bay", "Nahavaq"},
["snu"] = {"Senggi", "Viid"},
["snv"] = {"Sa'ban"},
["snw"] = {"Selee"},
["snx"] = {"Sam"},
["sny"] = {"Saniyo-Hiyewe"},
["snz"] = {"Kou"},
["soa"] = {"Thai Song"},
["sob"] = {"Sobei"},
["soc"] = {"So (Democratic Republic of Congo)"},
["sod"] = {"Songoora"},
["soe"] = {"Songomeno"},
["sog"] = {"Sogdian"},
["soh"] = {"Aka"},
["soi"] = {"Sonha"},
["soj"] = {"Soi"},
["sok"] = {"Sokoro"},
["sol"] = {"Solos"},
["son"] = {"Songhai languages"},
["soo"] = {"Songo"},
["sop"] = {"Songe"},
["soq"] = {"Kanasi"},
["sor"] = {"Somrai"},
["sos"] = {"Seeku"},
["sou"] = {"Southern Thai"},
["sov"] = {"Sonsorol"},
["sow"] = {"Sowanda"},
["sox"] = {"Swo"},
["soy"] = {"Miyobe"},
["soz"] = {"Temi"},
["spb"] = {"Sepa (Indonesia)"},
["spc"] = {"Sapé"},
["spd"] = {"Saep"},
["spe"] = {"Sepa (Papua New Guinea)"},
["spg"] = {"Sian"},
["spi"] = {"Saponi"},
["spk"] = {"Sengo"},
["spl"] = {"Selepet"},
["spm"] = {"Akukem"},
["spn"] = {"Sanapaná"},
["spo"] = {"Spokane"},
["spp"] = {"Supyire Senoufo"},
["spq"] = {"Loreto-Ucayali Spanish"},
["spr"] = {"Saparua"},
["sps"] = {"Saposa"},
["spt"] = {"Spiti Bhoti"},
["spu"] = {"Sapuan"},
["spv"] = {"Sambalpuri", "Kosli"},
["spx"] = {"South Picene"},
["spy"] = {"Sabaot"},
["sqa"] = {"Shama-Sambuga"},
["sqh"] = {"Shau"},
["sqj"] = {"Albanian languages"},
["sqk"] = {"Albanian Sign Language"},
["sqm"] = {"Suma"},
["sqn"] = {"Susquehannock"},
["sqo"] = {"Sorkhei"},
["sqq"] = {"Sou"},
["sqr"] = {"Siculo Arabic"},
["sqs"] = {"Sri Lankan Sign Language"},
["sqt"] = {"Soqotri"},
["squ"] = {"Squamish"},
["sqx"] = {"Kufr Qassem Sign Language (KQSL)"},
["sra"] = {"Saruga"},
["srb"] = {"Sora"},
["src"] = {"Logudorese Sardinian"},
["sre"] = {"Sara"},
["srf"] = {"Nafi"},
["srg"] = {"Sulod"},
["srh"] = {"Sarikoli"},
["sri"] = {"Siriano"},
["srk"] = {"Serudung Murut"},
["srl"] = {"Isirawa"},
["srm"] = {"Saramaccan"},
["srn"] = {"Sranan Tongo"},
["sro"] = {"Campidanese Sardinian"},
["srq"] = {"Sirionó"},
["srr"] = {"Serer"},
["srs"] = {"Sarsi"},
["srt"] = {"Sauri"},
["sru"] = {"Suruí"},
["srv"] = {"Southern Sorsoganon"},
["srw"] = {"Serua"},
["srx"] = {"Sirmauri"},
["sry"] = {"Sera"},
["srz"] = {"Shahmirzadi"},
["ssa"] = {"Nilo-Saharan languages"},
["ssb"] = {"Southern Sama"},
["ssc"] = {"Suba-Simbiti"},
["ssd"] = {"Siroi"},
["sse"] = {"Balangingi", "Bangingih Sama"},
["ssf"] = {"Thao"},
["ssg"] = {"Seimat"},
["ssh"] = {"Shihhi Arabic"},
["ssi"] = {"Sansi"},
["ssj"] = {"Sausi"},
["ssk"] = {"Sunam"},
["ssl"] = {"Western Sisaala"},
["ssm"] = {"Semnam"},
["ssn"] = {"Waata"},
["sso"] = {"Sissano"},
["ssp"] = {"Spanish Sign Language"},
["ssq"] = {"So'a"},
["ssr"] = {"Swiss-French Sign Language"},
["sss"] = {"Sô"},
["sst"] = {"Sinasina"},
["ssu"] = {"Susuami"},
["ssv"] = {"Shark Bay"},
["ssx"] = {"Samberigi"},
["ssy"] = {"Saho"},
["ssz"] = {"Sengseng"},
["sta"] = {"Settla"},
["stb"] = {"Northern Subanen"},
["std"] = {"Sentinel"},
["ste"] = {"Liana-Seti"},
["stf"] = {"Seta"},
["stg"] = {"Trieng"},
["sth"] = {"Shelta"},
["sti"] = {"Bulo Stieng"},
["stj"] = {"Matya Samo"},
["stk"] = {"Arammba"},
["stl"] = {"Stellingwerfs"},
["stm"] = {"Setaman"},
["stn"] = {"Owa"},
["sto"] = {"Stoney"},
["stp"] = {"Southeastern Tepehuan"},
["stq"] = {"Saterfriesisch"},
["str"] = {"Straits Salish"},
["sts"] = {"Shumashti"},
["stt"] = {"Budeh Stieng"},
["stu"] = {"Samtao"},
["stv"] = {"Silt'e"},
["stw"] = {"Satawalese"},
["sty"] = {"Siberian Tatar"},
["sua"] = {"Sulka"},
["sub"] = {"Suku"},
["suc"] = {"Western Subanon"},
["sue"] = {"Suena"},
["sug"] = {"Suganga"},
["sui"] = {"Suki"},
["suj"] = {"Shubi"},
["suk"] = {"Sukuma"},
["suo"] = {"Bouni"},
["suq"] = {"Tirmaga-Chai Suri", "Suri"},
["sur"] = {"Mwaghavul"},
["sus"] = {"Susu"},
["sut"] = {"Subtiaba"},
["suv"] = {"Puroik"},
["suw"] = {"Sumbwa"},
["sux"] = {"Sumerian"},
["suy"] = {"Suyá"},
["suz"] = {"Sunwar"},
["sva"] = {"Svan"},
["svb"] = {"Ulau-Suain"},
["svc"] = {"Vincentian Creole English"},
["sve"] = {"Serili"},
["svk"] = {"Slovakian Sign Language"},
["svm"] = {"Slavomolisano"},
["svs"] = {"Savosavo"},
["svx"] = {"Skalvian"},
["swb"] = {"Maore Comorian"},
["swc"] = {"Congo Swahili"},
["swf"] = {"Sere"},
["swg"] = {"Swabian"},
["swh"] = {"Swahili (individual language)", "Kiswahili"},
["swi"] = {"Sui"},
["swj"] = {"Sira"},
["swk"] = {"Malawi Sena"},
["swl"] = {"Swedish Sign Language"},
["swm"] = {"Samosa"},
["swn"] = {"Sawknah"},
["swo"] = {"Shanenawa"},
["swp"] = {"Suau"},
["swq"] = {"Sharwa"},
["swr"] = {"Saweru"},
["sws"] = {"Seluwasan"},
["swt"] = {"Sawila"},
["swu"] = {"Suwawa"},
["swv"] = {"Shekhawati"},
["sww"] = {"Sowa"},
["swx"] = {"Suruahá"},
["swy"] = {"Sarua"},
["sxb"] = {"Suba"},
["sxc"] = {"Sicanian"},
["sxe"] = {"Sighu"},
["sxg"] = {"Shuhi", "Shixing"},
["sxk"] = {"Southern Kalapuya"},
["sxl"] = {"Selian"},
["sxm"] = {"Samre"},
["sxn"] = {"Sangir"},
["sxo"] = {"Sorothaptic"},
["sxr"] = {"Saaroa"},
["sxs"] = {"Sasaru"},
["sxu"] = {"Upper Saxon"},
["sxw"] = {"Saxwe Gbe"},
["sya"] = {"Siang"},
["syb"] = {"Central Subanen"},
["syc"] = {"Classical Syriac"},
["syd"] = {"Samoyedic languages"},
["syi"] = {"Seki"},
["syk"] = {"Sukur"},
["syl"] = {"Sylheti"},
["sym"] = {"Maya Samo"},
["syn"] = {"Senaya"},
["syo"] = {"Suoy"},
["syr"] = {"Syriac"},
["sys"] = {"Sinyar"},
["syw"] = {"Kagate"},
["syx"] = {"Samay"},
["syy"] = {"Al-Sayyid Bedouin Sign Language"},
["sza"] = {"Semelai"},
["szb"] = {"Ngalum"},
["szc"] = {"Semaq Beri"},
["sze"] = {"Seze"},
["szg"] = {"Sengele"},
["szl"] = {"Silesian"},
["szn"] = {"Sula"},
["szp"] = {"Suabo"},
["szs"] = {"Solomon Islands Sign Language"},
["szv"] = {"Isu (Fako Division)"},
["szw"] = {"Sawai"},
["szy"] = {"Sakizaya"},
["taa"] = {"Lower Tanana"},
["tab"] = {"Tabassaran"},
["tac"] = {"Lowland Tarahumara"},
["tad"] = {"Tause"},
["tae"] = {"Tariana"},
["taf"] = {"Tapirapé"},
["tag"] = {"Tagoi"},
["tai"] = {"Tai languages"},
["taj"] = {"Eastern Tamang"},
["tak"] = {"Tala"},
["tal"] = {"Tal"},
["tan"] = {"Tangale"},
["tao"] = {"Yami"},
["tap"] = {"Taabwa"},
["taq"] = {"Tamasheq"},
["tar"] = {"Central Tarahumara"},
["tas"] = {"Tay Boi"},
["tau"] = {"Upper Tanana"},
["tav"] = {"Tatuyo"},
["taw"] = {"Tai"},
["tax"] = {"Tamki"},
["tay"] = {"Atayal"},
["taz"] = {"Tocho"},
["tba"] = {"Aikanã"},
["tbc"] = {"Takia"},
["tbd"] = {"Kaki Ae"},
["tbe"] = {"Tanimbili"},
["tbf"] = {"Mandara"},
["tbg"] = {"North Tairora"},
["tbh"] = {"Dharawal", "Thurawal"},
["tbi"] = {"Gaam"},
["tbj"] = {"Tiang"},
["tbk"] = {"Calamian Tagbanwa"},
["tbl"] = {"Tboli"},
["tbm"] = {"Tagbu"},
["tbn"] = {"Barro Negro Tunebo"},
["tbo"] = {"Tawala"},
["tbp"] = {"Taworta", "Diebroud"},
["tbq"] = {"Tibeto-Burman languages"},
["tbr"] = {"Tumtum"},
["tbs"] = {"Tanguat"},
["tbt"] = {"Tembo (Kitembo)"},
["tbu"] = {"Tubar"},
["tbv"] = {"Tobo"},
["tbw"] = {"Tagbanwa"},
["tbx"] = {"Kapin"},
["tby"] = {"Tabaru"},
["tbz"] = {"Ditammari"},
["tca"] = {"Ticuna"},
["tcb"] = {"Tanacross"},
["tcc"] = {"Datooga"},
["tcd"] = {"Tafi"},
["tce"] = {"Southern Tutchone"},
["tcf"] = {"Malinaltepec Me'phaa", "Malinaltepec Tlapanec"},
["tcg"] = {"Tamagario"},
["tch"] = {"Turks And Caicos Creole English"},
["tci"] = {"Wára"},
["tck"] = {"Tchitchege"},
["tcl"] = {"Taman (Myanmar)"},
["tcm"] = {"Tanahmerah"},
["tcn"] = {"Tichurong"},
["tco"] = {"Taungyo"},
["tcp"] = {"Tawr Chin"},
["tcq"] = {"Kaiy"},
["tcs"] = {"Torres Strait Creole", "Yumplatok"},
["tct"] = {"T'en"},
["tcu"] = {"Southeastern Tarahumara"},
["tcw"] = {"Tecpatlán Totonac"},
["tcx"] = {"Toda"},
["tcy"] = {"Tulu"},
["tcz"] = {"Thado Chin"},
["tda"] = {"Tagdal"},
["tdb"] = {"Panchpargania"},
["tdc"] = {"Emberá-Tadó"},
["tdd"] = {"Tai Nüa"},
["tde"] = {"Tiranige Diga Dogon"},
["tdf"] = {"Talieng"},
["tdg"] = {"Western Tamang"},
["tdh"] = {"Thulung"},
["tdi"] = {"Tomadino"},
["tdj"] = {"Tajio"},
["tdk"] = {"Tambas"},
["tdl"] = {"Sur"},
["tdm"] = {"Taruma"},
["tdn"] = {"Tondano"},
["tdo"] = {"Teme"},
["tdq"] = {"Tita"},
["tdr"] = {"Todrah"},
["tds"] = {"Doutai"},
["tdt"] = {"Tetun Dili"},
["tdv"] = {"Toro"},
["tdx"] = {"Tandroy-Mahafaly Malagasy"},
["tdy"] = {"Tadyawan"},
["tea"] = {"Temiar"},
["teb"] = {"Tetete"},
["tec"] = {"Terik"},
["ted"] = {"Tepo Krumen"},
["tee"] = {"Huehuetla Tepehua"},
["tef"] = {"Teressa"},
["teg"] = {"Teke-Tege"},
["teh"] = {"Tehuelche"},
["tei"] = {"Torricelli"},
["tek"] = {"Ibali Teke"},
["tem"] = {"Timne"},
["ten"] = {"Tama (Colombia)"},
["teo"] = {"Teso"},
["tep"] = {"Tepecano"},
["teq"] = {"Temein"},
["ter"] = {"Tereno"},
["tes"] = {"Tengger"},
["tet"] = {"Tetum"},
["teu"] = {"Soo"},
["tev"] = {"Teor"},
["tew"] = {"Tewa (USA)"},
["tex"] = {"Tennet"},
["tey"] = {"Tulishi"},
["tez"] = {"Tetserret"},
["tfi"] = {"Tofin Gbe"},
["tfn"] = {"Tanaina"},
["tfo"] = {"Tefaro"},
["tfr"] = {"Teribe"},
["tft"] = {"Ternate"},
["tga"] = {"Sagalla"},
["tgb"] = {"Tobilung"},
["tgc"] = {"Tigak"},
["tgd"] = {"Ciwogai"},
["tge"] = {"Eastern Gorkha Tamang"},
["tgf"] = {"Chalikha"},
["tgh"] = {"Tobagonian Creole English"},
["tgi"] = {"Lawunuia"},
["tgj"] = {"Tagin"},
["tgn"] = {"Tandaganon"},
["tgo"] = {"Sudest"},
["tgp"] = {"Tangoa"},
["tgq"] = {"Tring"},
["tgr"] = {"Tareng"},
["tgs"] = {"Nume"},
["tgt"] = {"Central Tagbanwa"},
["tgu"] = {"Tanggu"},
["tgv"] = {"Tingui-Boto"},
["tgw"] = {"Tagwana Senoufo"},
["tgx"] = {"Tagish"},
["tgy"] = {"Togoyo"},
["tgz"] = {"Tagalaka"},
["thd"] = {"Kuuk Thaayorre", "Thayore"},
["the"] = {"Chitwania Tharu"},
["thf"] = {"Thangmi"},
["thh"] = {"Northern Tarahumara"},
["thi"] = {"Tai Long"},
["thk"] = {"Tharaka", "Kitharaka"},
["thl"] = {"Dangaura Tharu"},
["thm"] = {"Aheu"},
["thn"] = {"Thachanadan"},
["thp"] = {"Thompson"},
["thq"] = {"Kochila Tharu"},
["thr"] = {"Rana Tharu"},
["ths"] = {"Thakali"},
["tht"] = {"Tahltan"},
["thu"] = {"Thuri"},
["thv"] = {"Tahaggart Tamahaq"},
["thy"] = {"Tha"},
["thz"] = {"Tayart Tamajeq"},
["tia"] = {"Tidikelt Tamazight"},
["tic"] = {"Tira"},
["tif"] = {"Tifal"},
["tig"] = {"Tigre"},
["tih"] = {"Timugon Murut"},
["tii"] = {"Tiene"},
["tij"] = {"Tilung"},
["tik"] = {"Tikar"},
["til"] = {"Tillamook"},
["tim"] = {"Timbe"},
["tin"] = {"Tindi"},
["tio"] = {"Teop"},
["tip"] = {"Trimuris"},
["tiq"] = {"Tiéfo"},
["tis"] = {"Masadiit Itneg"},
["tit"] = {"Tinigua"},
["tiu"] = {"Adasen"},
["tiv"] = {"Tiv"},
["tiw"] = {"Tiwi"},
["tix"] = {"Southern Tiwa"},
["tiy"] = {"Tiruray"},
["tiz"] = {"Tai Hongjin"},
["tja"] = {"Tajuasohn"},
["tjg"] = {"Tunjung"},
["tji"] = {"Northern Tujia"},
["tjj"] = {"Tjungundji"},
["tjl"] = {"Tai Laing"},
["tjm"] = {"Timucua"},
["tjn"] = {"Tonjon"},
["tjo"] = {"Temacine Tamazight"},
["tjp"] = {"Tjupany"},
["tjs"] = {"Southern Tujia"},
["tju"] = {"Tjurruru"},
["tjw"] = {"Djabwurrung"},
["tka"] = {"Truká"},
["tkb"] = {"Buksa"},
["tkd"] = {"Tukudede"},
["tke"] = {"Takwane"},
["tkf"] = {"Tukumanféd"},
["tkg"] = {"Tesaka Malagasy"},
["tkl"] = {"Tokelau"},
["tkm"] = {"Takelma"},
["tkn"] = {"Toku-No-Shima"},
["tkp"] = {"Tikopia"},
["tkq"] = {"Tee"},
["tkr"] = {"Tsakhur"},
["tks"] = {"Takestani"},
["tkt"] = {"Kathoriya Tharu"},
["tku"] = {"Upper Necaxa Totonac"},
["tkv"] = {"Mur Pano"},
["tkw"] = {"Teanu"},
["tkx"] = {"Tangko"},
["tkz"] = {"Takua"},
["tla"] = {"Southwestern Tepehuan"},
["tlb"] = {"Tobelo"},
["tlc"] = {"Yecuatla Totonac"},
["tld"] = {"Talaud"},
["tlf"] = {"Telefol"},
["tlg"] = {"Tofanma"},
["tlh"] = {"Klingon", "tlhIngan Hol"},
["tli"] = {"Tlingit"},
["tlj"] = {"Talinga-Bwisi"},
["tlk"] = {"Taloki"},
["tll"] = {"Tetela"},
["tlm"] = {"Tolomako"},
["tln"] = {"Talondo'"},
["tlo"] = {"Talodi"},
["tlp"] = {"Filomena Mata-Coahuitlán Totonac"},
["tlq"] = {"Tai Loi"},
["tlr"] = {"Talise"},
["tls"] = {"Tambotalo"},
["tlt"] = {"Sou Nama", "Teluti"},
["tlu"] = {"Tulehu"},
["tlv"] = {"Taliabu"},
["tlx"] = {"Khehek"},
["tly"] = {"Talysh"},
["tma"] = {"Tama (Chad)"},
["tmb"] = {"Katbol", "Avava"},
["tmc"] = {"Tumak"},
["tmd"] = {"Haruai"},
["tme"] = {"Tremembé"},
["tmf"] = {"Toba-Maskoy"},
["tmg"] = {"Ternateño"},
["tmh"] = {"Tamashek"},
["tmi"] = {"Tutuba"},
["tmj"] = {"Samarokena"},
["tml"] = {"Tamnim Citak"},
["tmm"] = {"Tai Thanh"},
["tmn"] = {"Taman (Indonesia)"},
["tmo"] = {"Temoq"},
["tmq"] = {"Tumleo"},
["tmr"] = {"Jewish Babylonian Aramaic (ca. 200-1200 CE)"},
["tms"] = {"Tima"},
["tmt"] = {"Tasmate"},
["tmu"] = {"Iau"},
["tmv"] = {"Tembo (Motembo)"},
["tmw"] = {"Temuan"},
["tmy"] = {"Tami"},
["tmz"] = {"Tamanaku"},
["tna"] = {"Tacana"},
["tnb"] = {"Western Tunebo"},
["tnc"] = {"Tanimuca-Retuarã"},
["tnd"] = {"Angosturas Tunebo"},
["tng"] = {"Tobanga"},
["tnh"] = {"Maiani"},
["tni"] = {"Tandia"},
["tnk"] = {"Kwamera"},
["tnl"] = {"Lenakel"},
["tnm"] = {"Tabla"},
["tnn"] = {"North Tanna"},
["tno"] = {"Toromono"},
["tnp"] = {"Whitesands"},
["tnq"] = {"Taino"},
["tnr"] = {"Ménik"},
["tns"] = {"Tenis"},
["tnt"] = {"Tontemboan"},
["tnu"] = {"Tay Khang"},
["tnv"] = {"Tangchangya"},
["tnw"] = {"Tonsawang"},
["tnx"] = {"Tanema"},
["tny"] = {"Tongwe"},
["tnz"] = {"Ten'edn"},
["tob"] = {"Toba"},
["toc"] = {"Coyutla Totonac"},
["tod"] = {"Toma"},
["tof"] = {"Gizrra"},
["tog"] = {"Tonga (Nyasa)"},
["toh"] = {"Gitonga"},
["toi"] = {"Tonga (Zambia)"},
["toj"] = {"Tojolabal"},
["tok"] = {"Toki Pona"},
["tol"] = {"Tolowa"},
["tom"] = {"Tombulu"},
["too"] = {"Xicotepec De Juárez Totonac"},
["top"] = {"Papantla Totonac"},
["toq"] = {"Toposa"},
["tor"] = {"Togbo-Vara Banda"},
["tos"] = {"Highland Totonac"},
["tou"] = {"Tho"},
["tov"] = {"Upper Taromi"},
["tow"] = {"Jemez"},
["tox"] = {"Tobian"},
["toy"] = {"Topoiyo"},
["toz"] = {"To"},
["tpa"] = {"Taupota"},
["tpc"] = {"Azoyú Me'phaa", "Azoyú Tlapanec"},
["tpe"] = {"Tippera"},
["tpf"] = {"Tarpia"},
["tpg"] = {"Kula"},
["tpi"] = {"Tok Pisin"},
["tpj"] = {"Tapieté"},
["tpk"] = {"Tupinikin"},
["tpl"] = {"Tlacoapa Me'phaa", "Tlacoapa Tlapanec"},
["tpm"] = {"Tampulma"},
["tpn"] = {"Tupinambá"},
["tpo"] = {"Tai Pao"},
["tpp"] = {"Pisaflores Tepehua"},
["tpq"] = {"Tukpa"},
["tpr"] = {"Tuparí"},
["tpt"] = {"Tlachichilco Tepehua"},
["tpu"] = {"Tampuan"},
["tpv"] = {"Tanapag"},
["tpx"] = {"Acatepec Me'phaa", "Acatepec Tlapanec"},
["tpy"] = {"Trumai"},
["tpz"] = {"Tinputz"},
["tqb"] = {"Tembé"},
["tql"] = {"Lehali"},
["tqm"] = {"Turumsa"},
["tqn"] = {"Tenino"},
["tqo"] = {"Toaripi"},
["tqp"] = {"Tomoip"},
["tqq"] = {"Tunni"},
["tqr"] = {"Torona"},
["tqt"] = {"Western Totonac"},
["tqu"] = {"Touo"},
["tqw"] = {"Tonkawa"},
["tra"] = {"Tirahi"},
["trb"] = {"Terebu"},
["trc"] = {"Copala Triqui"},
["trd"] = {"Turi"},
["tre"] = {"East Tarangan"},
["trf"] = {"Trinidadian Creole English"},
["trg"] = {"Lishán Didán"},
["trh"] = {"Turaka"},
["tri"] = {"Trió"},
["trj"] = {"Toram"},
["trk"] = {"Turkic languages"},
["trl"] = {"Traveller Scottish"},
["trm"] = {"Tregami"},
["trn"] = {"Trinitario"},
["tro"] = {"Tarao Naga"},
["trp"] = {"Kok Borok"},
["trq"] = {"San Martín Itunyoso Triqui"},
["trr"] = {"Taushiro"},
["trs"] = {"Chicahuaxtla Triqui"},
["trt"] = {"Tunggare"},
["tru"] = {"Turoyo", "Surayt"},
["trv"] = {"Sediq", "Seediq", "Taroko"},
["trw"] = {"Torwali"},
["trx"] = {"Tringgus-Sembaan Bidayuh"},
["try"] = {"Turung"},
["trz"] = {"Torá"},
["tsa"] = {"Tsaangi"},
["tsb"] = {"Tsamai"},
["tsc"] = {"Tswa"},
["tsd"] = {"Tsakonian"},
["tse"] = {"Tunisian Sign Language"},
["tsg"] = {"Tausug"},
["tsh"] = {"Tsuvan"},
["tsi"] = {"Tsimshian"},
["tsj"] = {"Tshangla"},
["tsk"] = {"Tseku"},
["tsl"] = {"Ts'ün-Lao"},
["tsm"] = {"Turkish Sign Language", "Türk İşaret Dili"},
["tsp"] = {"Northern Toussian"},
["tsq"] = {"Thai Sign Language"},
["tsr"] = {"Akei"},
["tss"] = {"Taiwan Sign Language"},
["tst"] = {"Tondi Songway Kiini"},
["tsu"] = {"Tsou"},
["tsv"] = {"Tsogo"},
["tsw"] = {"Tsishingini"},
["tsx"] = {"Mubami"},
["tsy"] = {"Tebul Sign Language"},
["tsz"] = {"Purepecha"},
["tta"] = {"Tutelo"},
["ttb"] = {"Gaa"},
["ttc"] = {"Tektiteko"},
["ttd"] = {"Tauade"},
["tte"] = {"Bwanabwana"},
["ttf"] = {"Tuotomb"},
["ttg"] = {"Tutong"},
["tth"] = {"Upper Ta'oih"},
["tti"] = {"Tobati"},
["ttj"] = {"Tooro"},
["ttk"] = {"Totoro"},
["ttl"] = {"Totela"},
["ttm"] = {"Northern Tutchone"},
["ttn"] = {"Towei"},
["tto"] = {"Lower Ta'oih"},
["ttp"] = {"Tombelala"},
["ttq"] = {"Tawallammat Tamajaq"},
["ttr"] = {"Tera"},
["tts"] = {"Northeastern Thai"},
["ttt"] = {"Muslim Tat"},
["ttu"] = {"Torau"},
["ttv"] = {"Titan"},
["ttw"] = {"Long Wat"},
["tty"] = {"Sikaritai"},
["ttz"] = {"Tsum"},
["tua"] = {"Wiarumus"},
["tub"] = {"Tübatulabal"},
["tuc"] = {"Mutu"},
["tud"] = {"Tuxá"},
["tue"] = {"Tuyuca"},
["tuf"] = {"Central Tunebo"},
["tug"] = {"Tunia"},
["tuh"] = {"Taulil"},
["tui"] = {"Tupuri"},
["tuj"] = {"Tugutil"},
["tul"] = {"Tula"},
["tum"] = {"Tumbuka"},
["tun"] = {"Tunica"},
["tuo"] = {"Tucano"},
["tup"] = {"Tupi languages"},
["tuq"] = {"Tedaga"},
["tus"] = {"Tuscarora"},
["tut"] = {"Altaic languages"},
["tuu"] = {"Tututni"},
["tuv"] = {"Turkana"},
["tuw"] = {"Tungus languages"},
["tux"] = {"Tuxináwa"},
["tuy"] = {"Tugen"},
["tuz"] = {"Turka"},
["tva"] = {"Vaghua"},
["tvd"] = {"Tsuvadi"},
["tve"] = {"Te'un"},
["tvi"] = {"Tulai"},
["tvk"] = {"Southeast Ambrym"},
["tvl"] = {"Tuvalu"},
["tvm"] = {"Tela-Masbuar"},
["tvn"] = {"Tavoyan"},
["tvo"] = {"Tidore"},
["tvs"] = {"Taveta"},
["tvt"] = {"Tutsa Naga"},
["tvu"] = {"Tunen"},
["tvw"] = {"Sedoa"},
["tvx"] = {"Taivoan"},
["tvy"] = {"Timor Pidgin"},
["twa"] = {"Twana"},
["twb"] = {"Western Tawbuid"},
["twc"] = {"Teshenawa"},
["twd"] = {"Twents"},
["twe"] = {"Tewa (Indonesia)"},
["twf"] = {"Northern Tiwa"},
["twg"] = {"Tereweng"},
["twh"] = {"Tai Dón"},
["twl"] = {"Tawara"},
["twm"] = {"Tawang Monpa"},
["twn"] = {"Twendi"},
["two"] = {"Tswapong"},
["twp"] = {"Ere"},
["twq"] = {"Tasawaq"},
["twr"] = {"Southwestern Tarahumara"},
["twt"] = {"Turiwára"},
["twu"] = {"Termanu"},
["tww"] = {"Tuwari"},
["twx"] = {"Tewe"},
["twy"] = {"Tawoyan"},
["txa"] = {"Tombonuo"},
["txb"] = {"Tokharian B"},
["txc"] = {"Tsetsaut"},
["txe"] = {"Totoli"},
["txg"] = {"Tangut"},
["txh"] = {"Thracian"},
["txi"] = {"Ikpeng"},
["txj"] = {"Tarjumo"},
["txm"] = {"Tomini"},
["txn"] = {"West Tarangan"},
["txo"] = {"Toto"},
["txq"] = {"Tii"},
["txr"] = {"Tartessian"},
["txs"] = {"Tonsea"},
["txt"] = {"Citak"},
["txu"] = {"Kayapó"},
["txx"] = {"Tatana"},
["txy"] = {"Tanosy Malagasy"},
["tya"] = {"Tauya"},
["tye"] = {"Kyanga"},
["tyh"] = {"O'du"},
["tyi"] = {"Teke-Tsaayi"},
["tyj"] = {"Tai Do", "Tai Yo"},
["tyl"] = {"Thu Lao"},
["tyn"] = {"Kombai"},
["typ"] = {"Thaypan"},
["tyr"] = {"Tai Daeng"},
["tys"] = {"Tày Sa Pa"},
["tyt"] = {"Tày Tac"},
["tyu"] = {"Kua"},
["tyv"] = {"Tuvinian"},
["tyx"] = {"Teke-Tyee"},
["tyy"] = {"Tiyaa"},
["tyz"] = {"Tày"},
["tza"] = {"Tanzanian Sign Language"},
["tzh"] = {"Tzeltal"},
["tzj"] = {"Tz'utujil"},
["tzl"] = {"Talossan"},
["tzm"] = {"Central Atlas Tamazight"},
["tzn"] = {"Tugun"},
["tzo"] = {"Tzotzil"},
["tzx"] = {"Tabriak"},
["uam"] = {"Uamué"},
["uan"] = {"Kuan"},
["uar"] = {"Tairuma"},
["uba"] = {"Ubang"},
["ubi"] = {"Ubi"},
["ubl"] = {"Buhi'non Bikol"},
["ubr"] = {"Ubir"},
["ubu"] = {"Umbu-Ungu"},
["uby"] = {"Ubykh"},
["uda"] = {"Uda"},
["ude"] = {"Udihe"},
["udg"] = {"Muduga"},
["udi"] = {"Udi"},
["udj"] = {"Ujir"},
["udl"] = {"Wuzlam"},
["udm"] = {"Udmurt"},
["udu"] = {"Uduk"},
["ues"] = {"Kioko"},
["ufi"] = {"Ufim"},
["uga"] = {"Ugaritic"},
["ugb"] = {"Kuku-Ugbanh"},
["uge"] = {"Ughele"},
["ugh"] = {"Kubachi"},
["ugn"] = {"Ugandan Sign Language"},
["ugo"] = {"Ugong"},
["ugy"] = {"Uruguayan Sign Language"},
["uha"] = {"Uhami"},
["uhn"] = {"Damal"},
["uis"] = {"Uisai"},
["uiv"] = {"Iyive"},
["uji"] = {"Tanjijili"},
["uka"] = {"Kaburi"},
["ukg"] = {"Ukuriguma"},
["ukh"] = {"Ukhwejo"},
["uki"] = {"Kui (India)"},
["ukk"] = {"Muak Sa-aak"},
["ukl"] = {"Ukrainian Sign Language"},
["ukp"] = {"Ukpe-Bayobiri"},
["ukq"] = {"Ukwa"},
["uks"] = {"Urubú-Kaapor Sign Language", "Kaapor Sign Language"},
["uku"] = {"Ukue"},
["ukv"] = {"Kuku"},
["ukw"] = {"Ukwuani-Aboh-Ndoni"},
["uky"] = {"Kuuk-Yak"},
["ula"] = {"Fungwa"},
["ulb"] = {"Ulukwumi"},
["ulc"] = {"Ulch"},
["ule"] = {"Lule"},
["ulf"] = {"Usku", "Afra"},
["uli"] = {"Ulithian"},
["ulk"] = {"Meriam Mir"},
["ull"] = {"Ullatan"},
["ulm"] = {"Ulumanda'"},
["uln"] = {"Unserdeutsch"},
["ulu"] = {"Uma' Lung"},
["ulw"] = {"Ulwa"},
["uly"] = {"Buli"},
["uma"] = {"Umatilla"},
["umb"] = {"Umbundu"},
["umc"] = {"Marrucinian"},
["umd"] = {"Umbindhamu"},
["umg"] = {"Morrobalama", "Umbuygamu"},
["umi"] = {"Ukit"},
["umm"] = {"Umon"},
["umn"] = {"Makyan Naga"},
["umo"] = {"Umotína"},
["ump"] = {"Umpila"},
["umr"] = {"Umbugarla"},
["ums"] = {"Pendau"},
["umu"] = {"Munsee"},
["una"] = {"North Watut"},
["und"] = {"Undetermined"},
["une"] = {"Uneme"},
["ung"] = {"Ngarinyin"},
["uni"] = {"Uni"},
["unk"] = {"Enawené-Nawé"},
["unm"] = {"Unami"},
["unn"] = {"Kurnai"},
["unr"] = {"Mundari"},
["unu"] = {"Unubahe"},
["unx"] = {"Munda"},
["unz"] = {"Unde Kaili"},
["uon"] = {"Kulon"},
["upi"] = {"Umeda"},
["upv"] = {"Uripiv-Wala-Rano-Atchin"},
["ura"] = {"Urarina"},
["urb"] = {"Urubú-Kaapor", "Kaapor"},
["urc"] = {"Urningangg"},
["ure"] = {"Uru"},
["urf"] = {"Uradhi"},
["urg"] = {"Urigina"},
["urh"] = {"Urhobo"},
["uri"] = {"Urim"},
["urj"] = {"Uralic languages"},
["urk"] = {"Urak Lawoi'"},
["url"] = {"Urali"},
["urm"] = {"Urapmin"},
["urn"] = {"Uruangnirin"},
["uro"] = {"Ura (Papua New Guinea)"},
["urp"] = {"Uru-Pa-In"},
["urr"] = {"Lehalurup", "Löyöp"},
["urt"] = {"Urat"},
["uru"] = {"Urumi"},
["urv"] = {"Uruava"},
["urw"] = {"Sop"},
["urx"] = {"Urimo"},
["ury"] = {"Orya"},
["urz"] = {"Uru-Eu-Wau-Wau"},
["usa"] = {"Usarufa"},
["ush"] = {"Ushojo"},
["usi"] = {"Usui"},
["usk"] = {"Usaghade"},
["usp"] = {"Uspanteco"},
["uss"] = {"us-Saare"},
["usu"] = {"Uya"},
["uta"] = {"Otank"},
["ute"] = {"Ute-Southern Paiute"},
["uth"] = {"ut-Hun"},
["utp"] = {"Amba (Solomon Islands)"},
["utr"] = {"Etulo"},
["utu"] = {"Utu"},
["uum"] = {"Urum"},
["uur"] = {"Ura (Vanuatu)"},
["uuu"] = {"U"},
["uve"] = {"West Uvean", "Fagauvea"},
["uvh"] = {"Uri"},
["uvl"] = {"Lote"},
["uwa"] = {"Kuku-Uwanh"},
["uya"] = {"Doko-Uyanga"},
["uzn"] = {"Northern Uzbek"},
["uzs"] = {"Southern Uzbek"},
["vaa"] = {"Vaagri Booli"},
["vae"] = {"Vale"},
["vaf"] = {"Vafsi"},
["vag"] = {"Vagla"},
["vah"] = {"Varhadi-Nagpuri"},
["vai"] = {"Vai"},
["vaj"] = {"Sekele", "Northwestern ǃKung", "Vasekele"},
["val"] = {"Vehes"},
["vam"] = {"Vanimo"},
["van"] = {"Valman"},
["vao"] = {"Vao"},
["vap"] = {"Vaiphei"},
["var"] = {"Huarijio"},
["vas"] = {"Vasavi"},
["vau"] = {"Vanuma"},
["vav"] = {"Varli"},
["vay"] = {"Wayu"},
["vbb"] = {"Southeast Babar"},
["vbk"] = {"Southwestern Bontok"},
["vec"] = {"Venetian"},
["ved"] = {"Veddah"},
["vel"] = {"Veluws"},
["vem"] = {"Vemgo-Mabas"},
["veo"] = {"Ventureño"},
["vep"] = {"Veps"},
["ver"] = {"Mom Jango"},
["vgr"] = {"Vaghri"},
["vgt"] = {"Vlaamse Gebarentaal", "Flemish Sign Language"},
["vic"] = {"Virgin Islands Creole English"},
["vid"] = {"Vidunda"},
["vif"] = {"Vili"},
["vig"] = {"Viemo"},
["vil"] = {"Vilela"},
["vin"] = {"Vinza"},
["vis"] = {"Vishavan"},
["vit"] = {"Viti"},
["viv"] = {"Iduna"},
["vjk"] = {"Bajjika"},
["vka"] = {"Kariyarra"},
["vkj"] = {"Kujarge"},
["vkk"] = {"Kaur"},
["vkl"] = {"Kulisusu"},
["vkm"] = {"Kamakan"},
["vkn"] = {"Koro Nulu"},
["vko"] = {"Kodeoha"},
["vkp"] = {"Korlai Creole Portuguese"},
["vkt"] = {"Tenggarong Kutai Malay"},
["vku"] = {"Kurrama"},
["vkz"] = {"Koro Zuba"},
["vlp"] = {"Valpei"},
["vls"] = {"Vlaams"},
["vma"] = {"Martuyhunira"},
["vmb"] = {"Barbaram"},
["vmc"] = {"Juxtlahuaca Mixtec"},
["vmd"] = {"Mudu Koraga"},
["vme"] = {"East Masela"},
["vmf"] = {"Mainfränkisch"},
["vmg"] = {"Lungalunga"},
["vmh"] = {"Maraghei"},
["vmi"] = {"Miwa"},
["vmj"] = {"Ixtayutla Mixtec"},
["vmk"] = {"Makhuwa-Shirima"},
["vml"] = {"Malgana"},
["vmm"] = {"Mitlatongo Mixtec"},
["vmp"] = {"Soyaltepec Mazatec"},
["vmq"] = {"Soyaltepec Mixtec"},
["vmr"] = {"Marenje"},
["vms"] = {"Moksela"},
["vmu"] = {"Muluridyi"},
["vmv"] = {"Valley Maidu"},
["vmw"] = {"Makhuwa"},
["vmx"] = {"Tamazola Mixtec"},
["vmy"] = {"Ayautla Mazatec"},
["vmz"] = {"Mazatlán Mazatec"},
["vnk"] = {"Vano", "Lovono"},
["vnm"] = {"Vinmavis", "Neve'ei"},
["vnp"] = {"Vunapu"},
["vor"] = {"Voro"},
["vot"] = {"Votic"},
["vra"] = {"Vera'a"},
["vro"] = {"Võro"},
["vrs"] = {"Varisi"},
["vrt"] = {"Burmbar", "Banam Bay"},
["vsi"] = {"Moldova Sign Language"},
["vsl"] = {"Venezuelan Sign Language"},
["vsv"] = {"Valencian Sign Language", "Llengua de signes valenciana"},
["vto"] = {"Vitou"},
["vum"] = {"Vumbu"},
["vun"] = {"Vunjo"},
["vut"] = {"Vute"},
["vwa"] = {"Awa (China)"},
["waa"] = {"Walla Walla"},
["wab"] = {"Wab"},
["wac"] = {"Wasco-Wishram"},
["wad"] = {"Wamesa", "Wondama"},
["wae"] = {"Walser"},
["waf"] = {"Wakoná"},
["wag"] = {"Wa'ema"},
["wah"] = {"Watubela"},
["wai"] = {"Wares"},
["waj"] = {"Waffa"},
["wak"] = {"Wakashan languages"},
["wal"] = {"Wolaytta", "Wolaitta"},
["wam"] = {"Wampanoag"},
["wan"] = {"Wan"},
["wao"] = {"Wappo"},
["wap"] = {"Wapishana"},
["waq"] = {"Wagiman"},
["war"] = {"Waray (Philippines)"},
["was"] = {"Washo"},
["wat"] = {"Kaninuwa"},
["wau"] = {"Waurá"},
["wav"] = {"Waka"},
["waw"] = {"Waiwai"},
["wax"] = {"Watam", "Marangis"},
["way"] = {"Wayana"},
["waz"] = {"Wampur"},
["wba"] = {"Warao"},
["wbb"] = {"Wabo"},
["wbe"] = {"Waritai"},
["wbf"] = {"Wara"},
["wbh"] = {"Wanda"},
["wbi"] = {"Vwanji"},
["wbj"] = {"Alagwa"},
["wbk"] = {"Waigali"},
["wbl"] = {"Wakhi"},
["wbm"] = {"Wa"},
["wbp"] = {"Warlpiri"},
["wbq"] = {"Waddar"},
["wbr"] = {"Wagdi"},
["wbs"] = {"West Bengal Sign Language"},
["wbt"] = {"Warnman"},
["wbv"] = {"Wajarri"},
["wbw"] = {"Woi"},
["wca"] = {"Yanomámi"},
["wci"] = {"Waci Gbe"},
["wdd"] = {"Wandji"},
["wdg"] = {"Wadaginam"},
["wdj"] = {"Wadjiginy"},
["wdk"] = {"Wadikali"},
["wdt"] = {"Wendat"},
["wdu"] = {"Wadjigu"},
["wdy"] = {"Wadjabangayi"},
["wea"] = {"Wewaw"},
["wec"] = {"Wè Western"},
["wed"] = {"Wedau"},
["weg"] = {"Wergaia"},
["weh"] = {"Weh"},
["wei"] = {"Kiunum"},
["wem"] = {"Weme Gbe"},
["wen"] = {"Sorbian languages"},
["weo"] = {"Wemale"},
["wep"] = {"Westphalien"},
["wer"] = {"Weri"},
["wes"] = {"Cameroon Pidgin"},
["wet"] = {"Perai"},
["weu"] = {"Rawngtu Chin"},
["wew"] = {"Wejewa"},
["wfg"] = {"Yafi", "Zorop"},
["wga"] = {"Wagaya"},
["wgb"] = {"Wagawaga"},
["wgg"] = {"Wangkangurru", "Wangganguru"},
["wgi"] = {"Wahgi"},
["wgo"] = {"Waigeo"},
["wgu"] = {"Wirangu"},
["wgy"] = {"Warrgamay"},
["wha"] = {"Sou Upaa", "Manusela"},
["whg"] = {"North Wahgi"},
["whk"] = {"Wahau Kenyah"},
["whu"] = {"Wahau Kayan"},
["wib"] = {"Southern Toussian"},
["wic"] = {"Wichita"},
["wie"] = {"Wik-Epa"},
["wif"] = {"Wik-Keyangan"},
["wig"] = {"Wik Ngathan"},
["wih"] = {"Wik-Me'anha"},
["wii"] = {"Minidien"},
["wij"] = {"Wik-Iiyanh"},
["wik"] = {"Wikalkan"},
["wil"] = {"Wilawila"},
["wim"] = {"Wik-Mungkan"},
["win"] = {"Ho-Chunk"},
["wir"] = {"Wiraféd"},
["wiu"] = {"Wiru"},
["wiv"] = {"Vitu"},
["wiy"] = {"Wiyot"},
["wja"] = {"Waja"},
["wji"] = {"Warji"},
["wka"] = {"Kw'adza"},
["wkb"] = {"Kumbaran"},
["wkd"] = {"Wakde", "Mo"},
["wkl"] = {"Kalanadi"},
["wkr"] = {"Keerray-Woorroong"},
["wku"] = {"Kunduvadi"},
["wkw"] = {"Wakawaka"},
["wky"] = {"Wangkayutyuru"},
["wla"] = {"Walio"},
["wlc"] = {"Mwali Comorian"},
["wle"] = {"Wolane"},
["wlg"] = {"Kunbarlang"},
["wlh"] = {"Welaun"},
["wli"] = {"Waioli"},
["wlk"] = {"Wailaki"},
["wll"] = {"Wali (Sudan)"},
["wlm"] = {"Middle Welsh"},
["wlo"] = {"Wolio"},
["wlr"] = {"Wailapa"},
["wls"] = {"Wallisian"},
["wlu"] = {"Wuliwuli"},
["wlv"] = {"Wichí Lhamtés Vejoz"},
["wlw"] = {"Walak"},
["wlx"] = {"Wali (Ghana)"},
["wly"] = {"Waling"},
["wma"] = {"Mawa (Nigeria)"},
["wmb"] = {"Wambaya"},
["wmc"] = {"Wamas"},
["wmd"] = {"Mamaindé"},
["wme"] = {"Wambule"},
["wmg"] = {"Western Minyag"},
["wmh"] = {"Waima'a"},
["wmi"] = {"Wamin"},
["wmm"] = {"Maiwa (Indonesia)"},
["wmn"] = {"Waamwang"},
["wmo"] = {"Wom (Papua New Guinea)"},
["wms"] = {"Wambon"},
["wmt"] = {"Walmajarri"},
["wmw"] = {"Mwani"},
["wmx"] = {"Womo"},
["wnb"] = {"Mokati"},
["wnc"] = {"Wantoat"},
["wnd"] = {"Wandarang"},
["wne"] = {"Waneci"},
["wng"] = {"Wanggom"},
["wni"] = {"Ndzwani Comorian"},
["wnk"] = {"Wanukaka"},
["wnm"] = {"Wanggamala"},
["wnn"] = {"Wunumara"},
["wno"] = {"Wano"},
["wnp"] = {"Wanap"},
["wnu"] = {"Usan"},
["wnw"] = {"Wintu"},
["wny"] = {"Wanyi", "Waanyi"},
["woa"] = {"Kuwema", "Tyaraity"},
["wob"] = {"Wè Northern"},
["woc"] = {"Wogeo"},
["wod"] = {"Wolani"},
["woe"] = {"Woleaian"},
["wof"] = {"Gambian Wolof"},
["wog"] = {"Wogamusin"},
["woi"] = {"Kamang"},
["wok"] = {"Longto"},
["wom"] = {"Wom (Nigeria)"},
["won"] = {"Wongo"},
["woo"] = {"Manombai"},
["wor"] = {"Woria"},
["wos"] = {"Hanga Hundi"},
["wow"] = {"Wawonii"},
["woy"] = {"Weyto"},
["wpc"] = {"Maco"},
["wrb"] = {"Waluwarra", "Warluwara"},
["wrg"] = {"Warungu", "Gudjal"},
["wrh"] = {"Wiradjuri"},
["wri"] = {"Wariyangga"},
["wrk"] = {"Garrwa"},
["wrl"] = {"Warlmanpa"},
["wrm"] = {"Warumungu"},
["wrn"] = {"Warnang"},
["wro"] = {"Worrorra"},
["wrp"] = {"Waropen"},
["wrr"] = {"Wardaman"},
["wrs"] = {"Waris"},
["wru"] = {"Waru"},
["wrv"] = {"Waruna"},
["wrw"] = {"Gugu Warra"},
["wrx"] = {"Wae Rana"},
["wry"] = {"Merwari"},
["wrz"] = {"Waray (Australia)"},
["wsa"] = {"Warembori"},
["wsg"] = {"Adilabad Gondi"},
["wsi"] = {"Wusi"},
["wsk"] = {"Waskia"},
["wsr"] = {"Owenia"},
["wss"] = {"Wasa"},
["wsu"] = {"Wasu"},
["wsv"] = {"Wotapuri-Katarqalai"},
["wtb"] = {"Matambwe"},
["wtf"] = {"Watiwa"},
["wth"] = {"Wathawurrung"},
["wti"] = {"Berta"},
["wtk"] = {"Watakataui"},
["wtm"] = {"Mewati"},
["wtw"] = {"Wotu"},
["wua"] = {"Wikngenchera"},
["wub"] = {"Wunambal"},
["wud"] = {"Wudu"},
["wuh"] = {"Wutunhua"},
["wul"] = {"Silimo"},
["wum"] = {"Wumbvu"},
["wun"] = {"Bungu"},
["wur"] = {"Wurrugu"},
["wut"] = {"Wutung"},
["wuu"] = {"Wu Chinese"},
["wuv"] = {"Wuvulu-Aua"},
["wux"] = {"Wulna"},
["wuy"] = {"Wauyai"},
["wwa"] = {"Waama"},
["wwb"] = {"Wakabunga"},
["wwo"] = {"Wetamut", "Dorig"},
["wwr"] = {"Warrwa"},
["www"] = {"Wawa"},
["wxa"] = {"Waxianghua"},
["wxw"] = {"Wardandi"},
["wyb"] = {"Wangaaybuwan-Ngiyambaa"},
["wyi"] = {"Woiwurrung"},
["wym"] = {"Wymysorys"},
["wyn"] = {"Wyandot"},
["wyr"] = {"Wayoró"},
["wyy"] = {"Western Fijian"},
["xaa"] = {"Andalusian Arabic"},
["xab"] = {"Sambe"},
["xac"] = {"Kachari"},
["xad"] = {"Adai"},
["xae"] = {"Aequian"},
["xag"] = {"Aghwan"},
["xai"] = {"Kaimbé"},
["xaj"] = {"Ararandewára"},
["xak"] = {"Máku"},
["xal"] = {"Kalmyk", "Oirat"},
["xam"] = {"ǀXam"},
["xan"] = {"Xamtanga"},
["xao"] = {"Khao"},
["xap"] = {"Apalachee"},
["xaq"] = {"Aquitanian"},
["xar"] = {"Karami"},
["xas"] = {"Kamas"},
["xat"] = {"Katawixi"},
["xau"] = {"Kauwera"},
["xav"] = {"Xavánte"},
["xaw"] = {"Kawaiisu"},
["xay"] = {"Kayan Mahakam"},
["xbb"] = {"Lower Burdekin"},
["xbc"] = {"Bactrian"},
["xbd"] = {"Bindal"},
["xbe"] = {"Bigambal"},
["xbg"] = {"Bunganditj"},
["xbi"] = {"Kombio"},
["xbj"] = {"Birrpayi"},
["xbm"] = {"Middle Breton"},
["xbn"] = {"Kenaboi"},
["xbo"] = {"Bolgarian"},
["xbp"] = {"Bibbulman"},
["xbr"] = {"Kambera"},
["xbw"] = {"Kambiwá"},
["xby"] = {"Batjala", "Batyala"},
["xcb"] = {"Cumbric"},
["xcc"] = {"Camunic"},
["xce"] = {"Celtiberian"},
["xcg"] = {"Cisalpine Gaulish"},
["xch"] = {"Chemakum", "Chimakum"},
["xcl"] = {"Classical Armenian"},
["xcm"] = {"Comecrudo"},
["xcn"] = {"Cotoname"},
["xco"] = {"Chorasmian"},
["xcr"] = {"Carian"},
["xct"] = {"Classical Tibetan"},
["xcu"] = {"Curonian"},
["xcv"] = {"Chuvantsy"},
["xcw"] = {"Coahuilteco"},
["xcy"] = {"Cayuse"},
["xda"] = {"Darkinyung"},
["xdc"] = {"Dacian"},
["xdk"] = {"Dharuk"},
["xdm"] = {"Edomite"},
["xdo"] = {"Kwandu"},
["xdq"] = {"Kaitag"},
["xdy"] = {"Malayic Dayak"},
["xeb"] = {"Eblan"},
["xed"] = {"Hdi"},
["xeg"] = {"ǁXegwi"},
["xel"] = {"Kelo"},
["xem"] = {"Kembayan"},
["xep"] = {"Epi-Olmec"},
["xer"] = {"Xerénte"},
["xes"] = {"Kesawai"},
["xet"] = {"Xetá"},
["xeu"] = {"Keoru-Ahia"},
["xfa"] = {"Faliscan"},
["xga"] = {"Galatian"},
["xgb"] = {"Gbin"},
["xgd"] = {"Gudang"},
["xgf"] = {"Gabrielino-Fernandeño"},
["xgg"] = {"Goreng"},
["xgi"] = {"Garingbal"},
["xgl"] = {"Galindan"},
["xgm"] = {"Dharumbal", "Guwinmal"},
["xgn"] = {"Mongolian languages"},
["xgr"] = {"Garza"},
["xgu"] = {"Unggumi"},
["xgw"] = {"Guwa"},
["xha"] = {"Harami"},
["xhc"] = {"Hunnic"},
["xhd"] = {"Hadrami"},
["xhe"] = {"Khetrani"},
["xhm"] = {"Middle Khmer (1400 to 1850 CE)"},
["xhr"] = {"Hernican"},
["xht"] = {"Hattic"},
["xhu"] = {"Hurrian"},
["xhv"] = {"Khua"},
["xib"] = {"Iberian"},
["xii"] = {"Xiri"},
["xil"] = {"Illyrian"},
["xin"] = {"Xinca"},
["xir"] = {"Xiriâna"},
["xis"] = {"Kisan"},
["xiv"] = {"Indus Valley Language"},
["xiy"] = {"Xipaya"},
["xjb"] = {"Minjungbal"},
["xjt"] = {"Jaitmatang"},
["xka"] = {"Kalkoti"},
["xkb"] = {"Northern Nago"},
["xkc"] = {"Kho'ini"},
["xkd"] = {"Mendalam Kayan"},
["xke"] = {"Kereho"},
["xkf"] = {"Khengkha"},
["xkg"] = {"Kagoro"},
["xki"] = {"Kenyan Sign Language"},
["xkj"] = {"Kajali"},
["xkk"] = {"Kachok", "Kaco'"},
["xkl"] = {"Mainstream Kenyah"},
["xkn"] = {"Kayan River Kayan"},
["xko"] = {"Kiorr"},
["xkp"] = {"Kabatei"},
["xkq"] = {"Koroni"},
["xkr"] = {"Xakriabá"},
["xks"] = {"Kumbewaha"},
["xkt"] = {"Kantosi"},
["xku"] = {"Kaamba"},
["xkv"] = {"Kgalagadi"},
["xkw"] = {"Kembra"},
["xkx"] = {"Karore"},
["xky"] = {"Uma' Lasan"},
["xkz"] = {"Kurtokha"},
["xla"] = {"Kamula"},
["xlb"] = {"Loup B"},
["xlc"] = {"Lycian"},
["xld"] = {"Lydian"},
["xle"] = {"Lemnian"},
["xlg"] = {"Ligurian (Ancient)"},
["xli"] = {"Liburnian"},
["xln"] = {"Alanic"},
["xlo"] = {"Loup A"},
["xlp"] = {"Lepontic"},
["xls"] = {"Lusitanian"},
["xlu"] = {"Cuneiform Luwian"},
["xly"] = {"Elymian"},
["xma"] = {"Mushungulu"},
["xmb"] = {"Mbonga"},
["xmc"] = {"Makhuwa-Marrevone"},
["xmd"] = {"Mbudum"},
["xme"] = {"Median"},
["xmf"] = {"Mingrelian"},
["xmg"] = {"Mengaka"},
["xmh"] = {"Kugu-Muminh"},
["xmj"] = {"Majera"},
["xmk"] = {"Ancient Macedonian"},
["xml"] = {"Malaysian Sign Language"},
["xmm"] = {"Manado Malay"},
["xmn"] = {"Manichaean Middle Persian"},
["xmo"] = {"Morerebi"},
["xmp"] = {"Kuku-Mu'inh"},
["xmq"] = {"Kuku-Mangk"},
["xmr"] = {"Meroitic"},
["xms"] = {"Moroccan Sign Language"},
["xmt"] = {"Matbat"},
["xmu"] = {"Kamu"},
["xmv"] = {"Antankarana Malagasy", "Tankarana Malagasy"},
["xmw"] = {"Tsimihety Malagasy"},
["xmx"] = {"Salawati", "Maden"},
["xmy"] = {"Mayaguduna"},
["xmz"] = {"Mori Bawah"},
["xna"] = {"Ancient North Arabian"},
["xnb"] = {"Kanakanabu"},
["xnd"] = {"Na-Dene languages"},
["xng"] = {"Middle Mongolian"},
["xnh"] = {"Kuanhua"},
["xni"] = {"Ngarigu"},
["xnj"] = {"Ngoni (Tanzania)"},
["xnk"] = {"Nganakarti"},
["xnm"] = {"Ngumbarl"},
["xnn"] = {"Northern Kankanay"},
["xno"] = {"Anglo-Norman"},
["xnq"] = {"Ngoni (Mozambique)"},
["xnr"] = {"Kangri"},
["xns"] = {"Kanashi"},
["xnt"] = {"Narragansett"},
["xnu"] = {"Nukunul"},
["xny"] = {"Nyiyaparli"},
["xnz"] = {"Kenzi", "Mattoki"},
["xoc"] = {"O'chi'chi'"},
["xod"] = {"Kokoda"},
["xog"] = {"Soga"},
["xoi"] = {"Kominimung"},
["xok"] = {"Xokleng"},
["xom"] = {"Komo (Sudan)"},
["xon"] = {"Konkomba"},
["xoo"] = {"Xukurú"},
["xop"] = {"Kopar"},
["xor"] = {"Korubo"},
["xow"] = {"Kowaki"},
["xpa"] = {"Pirriya"},
["xpb"] = {"Northeastern Tasmanian", "Pyemmairrener"},
["xpc"] = {"Pecheneg"},
["xpd"] = {"Oyster Bay Tasmanian"},
["xpe"] = {"Liberia Kpelle"},
["xpf"] = {"Southeast Tasmanian", "Nuenonne"},
["xpg"] = {"Phrygian"},
["xph"] = {"North Midlands Tasmanian", "Tyerrenoterpanner"},
["xpi"] = {"Pictish"},
["xpj"] = {"Mpalitjanh"},
["xpk"] = {"Kulina Pano"},
["xpl"] = {"Port Sorell Tasmanian"},
["xpm"] = {"Pumpokol"},
["xpn"] = {"Kapinawá"},
["xpo"] = {"Pochutec"},
["xpp"] = {"Puyo-Paekche"},
["xpq"] = {"Mohegan-Pequot"},
["xpr"] = {"Parthian"},
["xps"] = {"Pisidian"},
["xpt"] = {"Punthamara"},
["xpu"] = {"Punic"},
["xpv"] = {"Northern Tasmanian", "Tommeginne"},
["xpw"] = {"Northwestern Tasmanian", "Peerapper"},
["xpx"] = {"Southwestern Tasmanian", "Toogee"},
["xpy"] = {"Puyo"},
["xpz"] = {"Bruny Island Tasmanian"},
["xqa"] = {"Karakhanid"},
["xqt"] = {"Qatabanian"},
["xra"] = {"Krahô"},
["xrb"] = {"Eastern Karaboro"},
["xrd"] = {"Gundungurra"},
["xre"] = {"Kreye"},
["xrg"] = {"Minang"},
["xri"] = {"Krikati-Timbira"},
["xrm"] = {"Armazic"},
["xrn"] = {"Arin"},
["xrr"] = {"Raetic"},
["xrt"] = {"Aranama-Tamique"},
["xru"] = {"Marriammu"},
["xrw"] = {"Karawa"},
["xsa"] = {"Sabaean"},
["xsb"] = {"Sambal"},
["xsc"] = {"Scythian"},
["xsd"] = {"Sidetic"},
["xse"] = {"Sempan"},
["xsh"] = {"Shamang"},
["xsi"] = {"Sio"},
["xsj"] = {"Subi"},
["xsl"] = {"South Slavey"},
["xsm"] = {"Kasem"},
["xsn"] = {"Sanga (Nigeria)"},
["xso"] = {"Solano"},
["xsp"] = {"Silopi"},
["xsq"] = {"Makhuwa-Saka"},
["xsr"] = {"Sherpa"},
["xsu"] = {"Sanumá"},
["xsv"] = {"Sudovian"},
["xsy"] = {"Saisiyat"},
["xta"] = {"Alcozauca Mixtec"},
["xtb"] = {"Chazumba Mixtec"},
["xtc"] = {"Katcha-Kadugli-Miri"},
["xtd"] = {"Diuxi-Tilantongo Mixtec"},
["xte"] = {"Ketengban"},
["xtg"] = {"Transalpine Gaulish"},
["xth"] = {"Yitha Yitha"},
["xti"] = {"Sinicahua Mixtec"},
["xtj"] = {"San Juan Teita Mixtec"},
["xtl"] = {"Tijaltepec Mixtec"},
["xtm"] = {"Magdalena Peñasco Mixtec"},
["xtn"] = {"Northern Tlaxiaco Mixtec"},
["xto"] = {"Tokharian A"},
["xtp"] = {"San Miguel Piedras Mixtec"},
["xtq"] = {"Tumshuqese"},
["xtr"] = {"Early Tripuri"},
["xts"] = {"Sindihui Mixtec"},
["xtt"] = {"Tacahua Mixtec"},
["xtu"] = {"Cuyamecalco Mixtec"},
["xtv"] = {"Thawa"},
["xtw"] = {"Tawandê"},
["xty"] = {"Yoloxochitl Mixtec"},
["xua"] = {"Alu Kurumba"},
["xub"] = {"Betta Kurumba"},
["xud"] = {"Umiida"},
["xug"] = {"Kunigami"},
["xuj"] = {"Jennu Kurumba"},
["xul"] = {"Ngunawal", "Nunukul"},
["xum"] = {"Umbrian"},
["xun"] = {"Unggaranggu"},
["xuo"] = {"Kuo"},
["xup"] = {"Upper Umpqua"},
["xur"] = {"Urartian"},
["xut"] = {"Kuthant"},
["xuu"] = {"Kxoe", "Khwedam"},
["xve"] = {"Venetic"},
["xvi"] = {"Kamviri"},
["xvn"] = {"Vandalic"},
["xvo"] = {"Volscian"},
["xvs"] = {"Vestinian"},
["xwa"] = {"Kwaza"},
["xwc"] = {"Woccon"},
["xwd"] = {"Wadi Wadi"},
["xwe"] = {"Xwela Gbe"},
["xwg"] = {"Kwegu"},
["xwj"] = {"Wajuk"},
["xwk"] = {"Wangkumara"},
["xwl"] = {"Western Xwla Gbe"},
["xwo"] = {"Written Oirat"},
["xwr"] = {"Kwerba Mamberamo"},
["xwt"] = {"Wotjobaluk"},
["xww"] = {"Wemba Wemba"},
["xxb"] = {"Boro (Ghana)"},
["xxk"] = {"Ke'o"},
["xxm"] = {"Minkin"},
["xxr"] = {"Koropó"},
["xxt"] = {"Tambora"},
["xya"] = {"Yaygir"},
["xyb"] = {"Yandjibara"},
["xyj"] = {"Mayi-Yapi"},
["xyk"] = {"Mayi-Kulan"},
["xyl"] = {"Yalakalore"},
["xyt"] = {"Mayi-Thakurti"},
["xyy"] = {"Yorta Yorta"},
["xzh"] = {"Zhang-Zhung"},
["xzm"] = {"Zemgalian"},
["xzp"] = {"Ancient Zapotec"},
["yaa"] = {"Yaminahua"},
["yab"] = {"Yuhup"},
["yac"] = {"Pass Valley Yali"},
["yad"] = {"Yagua"},
["yae"] = {"Pumé"},
["yaf"] = {"Yaka (Democratic Republic of Congo)"},
["yag"] = {"Yámana"},
["yah"] = {"Yazgulyam"},
["yai"] = {"Yagnobi"},
["yaj"] = {"Banda-Yangere"},
["yak"] = {"Yakama"},
["yal"] = {"Yalunka"},
["yam"] = {"Yamba"},
["yan"] = {"Mayangna"},
["yao"] = {"Yao"},
["yap"] = {"Yapese"},
["yaq"] = {"Yaqui"},
["yar"] = {"Yabarana"},
["yas"] = {"Nugunu (Cameroon)"},
["yat"] = {"Yambeta"},
["yau"] = {"Yuwana"},
["yav"] = {"Yangben"},
["yaw"] = {"Yawalapití"},
["yax"] = {"Yauma"},
["yay"] = {"Agwagwune"},
["yaz"] = {"Lokaa"},
["yba"] = {"Yala"},
["ybb"] = {"Yemba"},
["ybe"] = {"West Yugur"},
["ybh"] = {"Yakha"},
["ybi"] = {"Yamphu"},
["ybj"] = {"Hasha"},
["ybk"] = {"Bokha"},
["ybl"] = {"Yukuben"},
["ybm"] = {"Yaben"},
["ybn"] = {"Yabaâna"},
["ybo"] = {"Yabong"},
["ybx"] = {"Yawiyo"},
["yby"] = {"Yaweyuha"},
["ych"] = {"Chesu"},
["ycl"] = {"Lolopo"},
["ycn"] = {"Yucuna"},
["ycp"] = {"Chepya"},
["ycr"] = {"Yilan Creole"},
["yda"] = {"Yanda"},
["ydd"] = {"Eastern Yiddish"},
["yde"] = {"Yangum Dey"},
["ydg"] = {"Yidgha"},
["ydk"] = {"Yoidik"},
["yea"] = {"Ravula"},
["yec"] = {"Yeniche"},
["yee"] = {"Yimas"},
["yei"] = {"Yeni"},
["yej"] = {"Yevanic"},
["yel"] = {"Yela"},
["yer"] = {"Tarok"},
["yes"] = {"Nyankpa"},
["yet"] = {"Yetfa"},
["yeu"] = {"Yerukula"},
["yev"] = {"Yapunda"},
["yey"] = {"Yeyi"},
["yga"] = {"Malyangapa"},
["ygi"] = {"Yiningayi"},
["ygl"] = {"Yangum Gel"},
["ygm"] = {"Yagomi"},
["ygp"] = {"Gepo"},
["ygr"] = {"Yagaria"},
["ygs"] = {"Yolŋu Sign Language"},
["ygu"] = {"Yugul"},
["ygw"] = {"Yagwoia"},
["yha"] = {"Baha Buyang"},
["yhd"] = {"Judeo-Iraqi Arabic"},
["yhl"] = {"Hlepho Phowa"},
["yhs"] = {"Yan-nhaŋu Sign Language"},
["yia"] = {"Yinggarda"},
["yif"] = {"Ache"},
["yig"] = {"Wusa Nasu"},
["yih"] = {"Western Yiddish"},
["yii"] = {"Yidiny"},
["yij"] = {"Yindjibarndi"},
["yik"] = {"Dongshanba Lalo"},
["yil"] = {"Yindjilandji"},
["yim"] = {"Yimchungru Naga"},
["yin"] = {"Riang Lai", "Yinchia"},
["yip"] = {"Pholo"},
["yiq"] = {"Miqie"},
["yir"] = {"North Awyu"},
["yis"] = {"Yis"},
["yit"] = {"Eastern Lalu"},
["yiu"] = {"Awu"},
["yiv"] = {"Northern Nisu"},
["yix"] = {"Axi Yi"},
["yiz"] = {"Azhe"},
["yka"] = {"Yakan"},
["ykg"] = {"Northern Yukaghir"},
["ykh"] = {"Khamnigan Mongol"},
["yki"] = {"Yoke"},
["ykk"] = {"Yakaikeke"},
["ykl"] = {"Khlula"},
["ykm"] = {"Kap"},
["ykn"] = {"Kua-nsi"},
["yko"] = {"Yasa"},
["ykr"] = {"Yekora"},
["ykt"] = {"Kathu"},
["yku"] = {"Kuamasi"},
["yky"] = {"Yakoma"},
["yla"] = {"Yaul"},
["ylb"] = {"Yaleba"},
["yle"] = {"Yele"},
["ylg"] = {"Yelogu"},
["yli"] = {"Angguruk Yali"},
["yll"] = {"Yil"},
["ylm"] = {"Limi"},
["yln"] = {"Langnian Buyang"},
["ylo"] = {"Naluo Yi"},
["ylr"] = {"Yalarnnga"},
["ylu"] = {"Aribwaung"},
["yly"] = {"Nyâlayu", "Nyelâyu"},
["ymb"] = {"Yambes"},
["ymc"] = {"Southern Muji"},
["ymd"] = {"Muda"},
["yme"] = {"Yameo"},
["ymg"] = {"Yamongeri"},
["ymh"] = {"Mili"},
["ymi"] = {"Moji"},
["ymk"] = {"Makwe"},
["yml"] = {"Iamalele"},
["ymm"] = {"Maay"},
["ymn"] = {"Yamna", "Sunum"},
["ymo"] = {"Yangum Mon"},
["ymp"] = {"Yamap"},
["ymq"] = {"Qila Muji"},
["ymr"] = {"Malasar"},
["yms"] = {"Mysian"},
["ymx"] = {"Northern Muji"},
["ymz"] = {"Muzi"},
["yna"] = {"Aluo"},
["ynd"] = {"Yandruwandha"},
["yne"] = {"Lang'e"},
["yng"] = {"Yango"},
["ynk"] = {"Naukan Yupik"},
["ynl"] = {"Yangulam"},
["ynn"] = {"Yana"},
["yno"] = {"Yong"},
["ynq"] = {"Yendang"},
["yns"] = {"Yansi"},
["ynu"] = {"Yahuna"},
["yob"] = {"Yoba"},
["yog"] = {"Yogad"},
["yoi"] = {"Yonaguni"},
["yok"] = {"Yokuts"},
["yol"] = {"Yola"},
["yom"] = {"Yombe"},
["yon"] = {"Yongkom"},
["yot"] = {"Yotti"},
["yox"] = {"Yoron"},
["yoy"] = {"Yoy"},
["ypa"] = {"Phala"},
["ypb"] = {"Labo Phowa"},
["ypg"] = {"Phola"},
["yph"] = {"Phupha"},
["ypk"] = {"Yupik languages"},
["ypm"] = {"Phuma"},
["ypn"] = {"Ani Phowa"},
["ypo"] = {"Alo Phola"},
["ypp"] = {"Phupa"},
["ypz"] = {"Phuza"},
["yra"] = {"Yerakai"},
["yrb"] = {"Yareba"},
["yre"] = {"Yaouré"},
["yrk"] = {"Nenets"},
["yrl"] = {"Nhengatu"},
["yrm"] = {"Yirrk-Mel"},
["yrn"] = {"Yerong"},
["yro"] = {"Yaroamë"},
["yrs"] = {"Yarsun"},
["yrw"] = {"Yarawata"},
["yry"] = {"Yarluyandi"},
["ysc"] = {"Yassic"},
["ysd"] = {"Samatao"},
["ysg"] = {"Sonaga"},
["ysl"] = {"Yugoslavian Sign Language"},
["ysm"] = {"Myanmar Sign Language"},
["ysn"] = {"Sani"},
["yso"] = {"Nisi (China)"},
["ysp"] = {"Southern Lolopo"},
["ysr"] = {"Sirenik Yupik"},
["yss"] = {"Yessan-Mayo"},
["ysy"] = {"Sanie"},
["yta"] = {"Talu"},
["ytl"] = {"Tanglang"},
["ytp"] = {"Thopho"},
["ytw"] = {"Yout Wam"},
["yty"] = {"Yatay"},
["yua"] = {"Yucateco", "Yucatec Maya"},
["yub"] = {"Yugambal"},
["yuc"] = {"Yuchi"},
["yud"] = {"Judeo-Tripolitanian Arabic"},
["yue"] = {"Yue Chinese", "Cantonese"},
["yuf"] = {"Havasupai-Walapai-Yavapai"},
["yug"] = {"Yug"},
["yui"] = {"Yurutí"},
["yuj"] = {"Karkar-Yuri"},
["yuk"] = {"Yuki"},
["yul"] = {"Yulu"},
["yum"] = {"Quechan"},
["yun"] = {"Bena (Nigeria)"},
["yup"] = {"Yukpa"},
["yuq"] = {"Yuqui"},
["yur"] = {"Yurok"},
["yut"] = {"Yopno"},
["yuw"] = {"Yau (Morobe Province)"},
["yux"] = {"Southern Yukaghir"},
["yuy"] = {"East Yugur"},
["yuz"] = {"Yuracare"},
["yva"] = {"Yawa"},
["yvt"] = {"Yavitero"},
["ywa"] = {"Kalou"},
["ywg"] = {"Yinhawangka"},
["ywl"] = {"Western Lalu"},
["ywn"] = {"Yawanawa"},
["ywq"] = {"Wuding-Luquan Yi"},
["ywr"] = {"Yawuru"},
["ywt"] = {"Xishanba Lalo", "Central Lalo"},
["ywu"] = {"Wumeng Nasu"},
["yww"] = {"Yawarawarga"},
["yxa"] = {"Mayawali"},
["yxg"] = {"Yagara"},
["yxl"] = {"Yardliyawarra"},
["yxm"] = {"Yinwum"},
["yxu"] = {"Yuyu"},
["yxy"] = {"Yabula Yabula"},
["yyr"] = {"Yir Yoront"},
["yyu"] = {"Yau (Sandaun Province)"},
["yyz"] = {"Ayizi"},
["yzg"] = {"E'ma Buyang"},
["yzk"] = {"Zokhuo"},
["zaa"] = {"Sierra de Juárez Zapotec"},
["zab"] = {"Western Tlacolula Valley Zapotec", "San Juan Guelavía Zapotec"},
["zac"] = {"Ocotlán Zapotec"},
["zad"] = {"Cajonos Zapotec"},
["zae"] = {"Yareni Zapotec"},
["zaf"] = {"Ayoquesco Zapotec"},
["zag"] = {"Zaghawa"},
["zah"] = {"Zangwal"},
["zai"] = {"Isthmus Zapotec"},
["zaj"] = {"Zaramo"},
["zak"] = {"Zanaki"},
["zal"] = {"Zauzou"},
["zam"] = {"Miahuatlán Zapotec"},
["zao"] = {"Ozolotepec Zapotec"},
["zap"] = {"Zapotec"},
["zaq"] = {"Aloápam Zapotec"},
["zar"] = {"Rincón Zapotec"},
["zas"] = {"Santo Domingo Albarradas Zapotec"},
["zat"] = {"Tabaa Zapotec"},
["zau"] = {"Zangskari"},
["zav"] = {"Yatzachi Zapotec"},
["zaw"] = {"Mitla Zapotec"},
["zax"] = {"Xadani Zapotec"},
["zay"] = {"Zayse-Zergulla", "Zaysete"},
["zaz"] = {"Zari"},
["zba"] = {"Balaibalan"},
["zbc"] = {"Central Berawan"},
["zbe"] = {"East Berawan"},
["zbl"] = {"Blissymbols", "Bliss", "Blissymbolics"},
["zbt"] = {"Batui"},
["zbu"] = {"Bu (Bauchi State)"},
["zbw"] = {"West Berawan"},
["zca"] = {"Coatecas Altas Zapotec"},
["zcd"] = {"Las Delicias Zapotec"},
["zch"] = {"Central Hongshuihe Zhuang"},
["zdj"] = {"Ngazidja Comorian"},
["zea"] = {"Zeeuws"},
["zeg"] = {"Zenag"},
["zeh"] = {"Eastern Hongshuihe Zhuang"},
["zem"] = {"Zeem"},
["zen"] = {"Zenaga"},
["zga"] = {"Kinga"},
["zgb"] = {"Guibei Zhuang"},
["zgh"] = {"Standard Moroccan Tamazight"},
["zgm"] = {"Minz Zhuang"},
["zgn"] = {"Guibian Zhuang"},
["zgr"] = {"Magori"},
["zhb"] = {"Zhaba"},
["zhd"] = {"Dai Zhuang"},
["zhi"] = {"Zhire"},
["zhn"] = {"Nong Zhuang"},
["zhw"] = {"Zhoa"},
["zhx"] = {"Chinese (family)"},
["zia"] = {"Zia"},
["zib"] = {"Zimbabwe Sign Language"},
["zik"] = {"Zimakani"},
["zil"] = {"Zialo"},
["zim"] = {"Mesme"},
["zin"] = {"Zinza"},
["ziw"] = {"Zigula"},
["ziz"] = {"Zizilivakan"},
["zka"] = {"Kaimbulawa"},
["zkd"] = {"Kadu"},
["zkg"] = {"Koguryo"},
["zkh"] = {"Khorezmian"},
["zkk"] = {"Karankawa"},
["zkn"] = {"Kanan"},
["zko"] = {"Kott"},
["zkp"] = {"São Paulo Kaingáng"},
["zkr"] = {"Zakhring"},
["zkt"] = {"Kitan"},
["zku"] = {"Kaurna"},
["zkv"] = {"Krevinian"},
["zkz"] = {"Khazar"},
["zla"] = {"Zula"},
["zle"] = {"East Slavic languages"},
["zlj"] = {"Liujiang Zhuang"},
["zlm"] = {"Malay (individual language)"},
["zln"] = {"Lianshan Zhuang"},
["zlq"] = {"Liuqian Zhuang"},
["zls"] = {"South Slavic languages"},
["zlu"] = {"Zul"},
["zlw"] = {"West Slavic languages"},
["zma"] = {"Manda (Australia)"},
["zmb"] = {"Zimba"},
["zmc"] = {"Margany"},
["zmd"] = {"Maridan"},
["zme"] = {"Mangerr"},
["zmf"] = {"Mfinu"},
["zmg"] = {"Marti Ke"},
["zmh"] = {"Makolkol"},
["zmi"] = {"Negeri Sembilan Malay"},
["zmj"] = {"Maridjabin"},
["zmk"] = {"Mandandanyi"},
["zml"] = {"Matngala"},
["zmm"] = {"Marimanindji", "Marramaninyshi"},
["zmn"] = {"Mbangwe"},
["zmo"] = {"Molo"},
["zmp"] = {"Mpuono"},
["zmq"] = {"Mituku"},
["zmr"] = {"Maranunggu"},
["zms"] = {"Mbesa"},
["zmt"] = {"Maringarr"},
["zmu"] = {"Muruwari"},
["zmv"] = {"Mbariman-Gudhinma"},
["zmw"] = {"Mbo (Democratic Republic of Congo)"},
["zmx"] = {"Bomitaba"},
["zmy"] = {"Mariyedi"},
["zmz"] = {"Mbandja"},
["zna"] = {"Zan Gula"},
["znd"] = {"Zande languages"},
["zne"] = {"Zande (individual language)"},
["zng"] = {"Mang"},
["znk"] = {"Manangkari"},
["zns"] = {"Mangas"},
["zoc"] = {"Copainalá Zoque"},
["zoh"] = {"Chimalapa Zoque"},
["zom"] = {"Zou"},
["zoo"] = {"Asunción Mixtepec Zapotec"},
["zoq"] = {"Tabasco Zoque"},
["zor"] = {"Rayón Zoque"},
["zos"] = {"Francisco León Zoque"},
["zpa"] = {"Lachiguiri Zapotec"},
["zpb"] = {"Yautepec Zapotec"},
["zpc"] = {"Choapan Zapotec"},
["zpd"] = {"Southeastern Ixtlán Zapotec"},
["zpe"] = {"Petapa Zapotec"},
["zpf"] = {"San Pedro Quiatoni Zapotec"},
["zpg"] = {"Guevea De Humboldt Zapotec"},
["zph"] = {"Totomachapan Zapotec"},
["zpi"] = {"Santa María Quiegolani Zapotec"},
["zpj"] = {"Quiavicuzas Zapotec"},
["zpk"] = {"Tlacolulita Zapotec"},
["zpl"] = {"Lachixío Zapotec"},
["zpm"] = {"Mixtepec Zapotec"},
["zpn"] = {"Santa Inés Yatzechi Zapotec"},
["zpo"] = {"Amatlán Zapotec"},
["zpp"] = {"El Alto Zapotec"},
["zpq"] = {"Zoogocho Zapotec"},
["zpr"] = {"Santiago Xanica Zapotec"},
["zps"] = {"Coatlán Zapotec"},
["zpt"] = {"San Vicente Coatlán Zapotec"},
["zpu"] = {"Yalálag Zapotec"},
["zpv"] = {"Chichicapan Zapotec"},
["zpw"] = {"Zaniza Zapotec"},
["zpx"] = {"San Baltazar Loxicha Zapotec"},
["zpy"] = {"Mazaltepec Zapotec"},
["zpz"] = {"Texmelucan Zapotec"},
["zqe"] = {"Qiubei Zhuang"},
["zra"] = {"Kara (Korea)"},
["zrg"] = {"Mirgan"},
["zrn"] = {"Zerenkel"},
["zro"] = {"Záparo"},
["zrp"] = {"Zarphatic"},
["zrs"] = {"Mairasi"},
["zsa"] = {"Sarasira"},
["zsk"] = {"Kaskean"},
["zsl"] = {"Zambian Sign Language"},
["zsm"] = {"Standard Malay"},
["zsr"] = {"Southern Rincon Zapotec"},
["zsu"] = {"Sukurum"},
["zte"] = {"Elotepec Zapotec"},
["ztg"] = {"Xanaguía Zapotec"},
["ztl"] = {"Lapaguía-Guivini Zapotec"},
["ztm"] = {"San Agustín Mixtepec Zapotec"},
["ztn"] = {"Santa Catarina Albarradas Zapotec"},
["ztp"] = {"Loxicha Zapotec"},
["ztq"] = {"Quioquitani-Quierí Zapotec"},
["zts"] = {"Tilquiapan Zapotec"},
["ztt"] = {"Tejalapan Zapotec"},
["ztu"] = {"Güilá Zapotec"},
["ztx"] = {"Zaachila Zapotec"},
["zty"] = {"Yatee Zapotec"},
["zuh"] = {"Tokano"},
["zum"] = {"Kumzari"},
["zun"] = {"Zuni"},
["zuy"] = {"Zumaya"},
["zwa"] = {"Zay"},
["zxx"] = {"No linguistic content", "Not applicable"},
["zyb"] = {"Yongbei Zhuang"},
["zyg"] = {"Yang Zhuang"},
["zyj"] = {"Youjiang Zhuang"},
["zyn"] = {"Yongnan Zhuang"},
["zyp"] = {"Zyphe Chin"},
["zza"] = {"Zaza", "Dimili", "Dimli (macrolanguage)", "Kirdki", "Kirmanjki (macrolanguage)", "Zazaki"},
["zzj"] = {"Zuojiang Zhuang"}
}
local deprecated = {
["in"] = {"Indonesian"},
["iw"] = {"Hebrew"},
["ji"] = {"Yiddish"},
["jw"] = {"Javanese"},
["mo"] = {"Moldavian", "Moldovan"},
["aam"] = {"Aramanik"},
["adp"] = {"Adap"},
["agp"] = {"Paranan"},
["ais"] = {"Nataoran Amis"},
["ajp"] = {"South Levantine Arabic"},
["ajt"] = {"Judeo-Tunisian Arabic"},
["aoh"] = {"Arma"},
["asd"] = {"Asas"},
["aue"] = {"ǂKxʼauǁʼein"},
["ayx"] = {"Ayi (China)"},
["ayy"] = {"Tayabas Ayta"},
["baz"] = {"Tunen"},
["bbz"] = {"Babalia Creole Arabic"},
["bgm"] = {"Baga Mboteni"},
["bhk"] = {"Albay Bicolano"},
["bic"] = {"Bikaru"},
["bij"] = {"Vaghat-Ya-Bijim-Legeri"},
["bjd"] = {"Bandjigali"},
["bjq"] = {"Southern Betsimisaraka Malagasy"},
["bkb"] = {"Finallig"},
["blg"] = {"Balau"},
["bmy"] = {"Bemba (Democratic Republic of Congo)"},
["bpb"] = {"Barbacoas"},
["btb"] = {"Beti (Cameroon)"},
["btl"] = {"Bhatola"},
["bxx"] = {"Borna (Democratic Republic of Congo)"},
["byy"] = {"Buya"},
["cbe"] = {"Chipiajes"},
["cbh"] = {"Cagua"},
["cca"] = {"Cauca"},
["ccq"] = {"Chaungtha"},
["cdg"] = {"Chamari"},
["cjr"] = {"Chorotega"},
["cka"] = {"Khumi Awa Chin"},
["cmk"] = {"Chimakum"},
["coy"] = {"Coyaima"},
["cqu"] = {"Chilean Quechua"},
["cug"] = {"Chungmboko", "Cung"},
["cum"] = {"Cumeral"},
["daf"] = {"Dan"},
["dap"] = {"Nisi (India)"},
["dgu"] = {"Degaru"},
["dha"] = {"Dhanwar (India)"},
["dit"] = {"Dirari"},
["djl"] = {"Djiwarli"},
["dkl"] = {"Kolum So Dogon"},
["drh"] = {"Darkhat"},
["drr"] = {"Dororo"},
["drw"] = {"Darwazi"},
["dud"] = {"Hun-Saare"},
["duj"] = {"Dhuwal"},
["dwl"] = {"Walo Kumbe Dogon"},
["ekc"] = {"Eastern Karnic"},
["elp"] = {"Elpaputih"},
["emo"] = {"Emok"},
["gav"] = {"Gabutamon"},
["gbc"] = {"Garawa"},
["gfx"] = {"Mangetti Dune ǃXung"},
["ggn"] = {"Eastern Gurung"},
["ggo"] = {"Southern Gondi"},
["ggr"] = {"Aghu Tharnggalu"},
["gio"] = {"Gelao"},
["gji"] = {"Geji"},
["gli"] = {"Guliguli"},
["gti"] = {"Gbati-ri"},
["guv"] = {"Gey"},
["hrr"] = {"Horuru"},
["iap"] = {"Iapama"},
["ibi"] = {"Ibilo"},
["ill"] = {"Iranun"},
["ilw"] = {"Talur"},
["ime"] = {"Imeraguen"},
["izi"] = {"Izi-Ezaa-Ikwo-Mgbo"},
["jar"] = {"Jarawa (Nigeria)"},
["jeg"] = {"Jeng"},
["kbf"] = {"Kakauhua"},
["kdv"] = {"Kado"},
["kgc"] = {"Kasseng"},
["kgd"] = {"Kataang"},
["kgh"] = {"Upper Tanudan Kalinga"},
["kgm"] = {"Karipúna"},
["kjf"] = {"Khalaj [Indo-Iranian]"},
["koj"] = {"Sara Dunjo"},
["kox"] = {"Coxima"},
["kpp"] = {"Paku Karen"},
["krm"] = {"Krim"},
["ksa"] = {"Shuwa-Zamani"},
["ktr"] = {"Kota Marudu Tinagas"},
["kvs"] = {"Kunggara"},
["kwq"] = {"Kwak"},
["kxe"] = {"Kakihum"},
["kxl"] = {"Nepali Kurux"},
["kxu"] = {"Kui (India)"},
["kzh"] = {"Kenuzi-Dongola"},
["kzj"] = {"Coastal Kadazan"},
["kzt"] = {"Tambunan Dusun"},
["lak"] = {"Laka (Nigeria)"},
["lba"] = {"Lui"},
["leg"] = {"Lengua"},
["lii"] = {"Lingkhim"},
["llo"] = {"Khlor"},
["lmm"] = {"Lamam"},
["lmz"] = {"Lumbee"},
["lno"] = {"Lango (South Sudan)"},
["lsg"] = {"Lyons Sign Language"},
["meg"] = {"Mea"},
["mgx"] = {"Omati"},
["mhh"] = {"Maskoy Pidgin"},
["mja"] = {"Mahei"},
["mld"] = {"Malakhel"},
["mnt"] = {"Maykulan"},
["mof"] = {"Mohegan-Montauk-Narragansett"},
["mst"] = {"Cataelano Mandaya"},
["mvm"] = {"Muya"},
["mwd"] = {"Mudbura"},
["mwj"] = {"Maligo"},
["mwx"] = {"Mediak"},
["mwy"] = {"Mosiro"},
["myd"] = {"Maramba"},
["myi"] = {"Mina (India)"},
["myq"] = {"Forest Maninka"},
["myt"] = {"Sangab Mandaya"},
["nad"] = {"Nijadali"},
["nbf"] = {"Naxi"},
["nbx"] = {"Ngura"},
["ncp"] = {"Ndaktup"},
["ngo"] = {"Ngoni"},
["nln"] = {"Durango Nahuatl"},
["nlr"] = {"Ngarla"},
["nns"] = {"Ningye"},
["nnx"] = {"Ngong"},
["nom"] = {"Nocamán"},
["noo"] = {"Nootka"},
["nts"] = {"Natagaimas"},
["nxu"] = {"Narau"},
["ome"] = {"Omejes"},
["oun"] = {"ǃOǃung"},
["pat"] = {"Papitalai"},
["pbz"] = {"Palu"},
["pcr"] = {"Panang"},
["pgy"] = {"Pongyong"},
["pii"] = {"Pini"},
["plj"] = {"Polci"},
["plp"] = {"Palpa"},
["pmc"] = {"Palumata"},
["pmk"] = {"Pamlico"},
["pmu"] = {"Mirpur Panjabi"},
["pod"] = {"Ponares"},
["ppa"] = {"Pao"},
["ppr"] = {"Piru"},
["prb"] = {"Lua'"},
["prp"] = {"Parsi"},
["pry"] = {"Pray 3"},
["puk"] = {"Pu Ko"},
["puz"] = {"Purum Naga"},
["rie"] = {"Rien"},
["rmr"] = {"Caló"},
["rna"] = {"Runa"},
["rsi"] = {"Rennellese Sign Language"},
["sap"] = {"Sanapaná"},
["sca"] = {"Sansu"},
["sdm"] = {"Semandang"},
["sgl"] = {"Sanglechi-Ishkashimi"},
["sgo"] = {"Songa"},
["skk"] = {"Sok"},
["slq"] = {"Salchuq"},
["smd"] = {"Sama"},
["snb"] = {"Sebuyau"},
["snh"] = {"Shinabo"},
["sul"] = {"Surigaonon"},
["sum"] = {"Sumo-Mayangna"},
["svr"] = {"Savara"},
["szd"] = {"Seru"},
["tbb"] = {"Tapeba"},
["tdu"] = {"Tempasuk Dusun"},
["tgg"] = {"Tangga"},
["thc"] = {"Tai Hang Tong"},
["thw"] = {"Thudam"},
["thx"] = {"The"},
["tid"] = {"Tidong"},
["tie"] = {"Tingal"},
["tkk"] = {"Takpa"},
["tlw"] = {"South Wemale"},
["tmk"] = {"Northwestern Tamang"},
["tmp"] = {"Tai Mène"},
["tne"] = {"Tinoc Kallahan"},
["tnf"] = {"Tangshewi"},
["toe"] = {"Tomedes"},
["tpw"] = {"Tupí"},
["tsf"] = {"Southwestern Tamang"},
["unp"] = {"Worora"},
["uok"] = {"Uokha"},
["uun"] = {"Kulon-Pazeh"},
["vki"] = {"Ija-Zuba"},
["wgw"] = {"Wagawaga"},
["wit"] = {"Wintu"},
["wiw"] = {"Wirangu"},
["wra"] = {"Warapu"},
["wrd"] = {"Warduji"},
["wya"] = {"Wyandot"},
["xba"] = {"Kamba (Brazil)"},
["xbx"] = {"Kabixí"},
["xia"] = {"Xiandao"},
["xip"] = {"Xipináwa"},
["xkh"] = {"Karahawyana"},
["xrq"] = {"Karranga"},
["xss"] = {"Assan"},
["xtz"] = {"Tasmanian"},
["ybd"] = {"Yangbye"},
["yds"] = {"Yiddish Sign Language"},
["yen"] = {"Yendang"},
["yiy"] = {"Yir Yoront"},
["yma"] = {"Yamphe"},
["ymt"] = {"Mator-Taygi-Karagas"},
["ynh"] = {"Yangho"},
["yos"] = {"Yos"},
["yri"] = {"Yarí"},
["yuu"] = {"Yugh"},
["zir"] = {"Ziriya"},
["zkb"] = {"Koibal"},
["zua"] = {"Zeem"}
}
return {
active = active,
deprecated = deprecated,
}
d2b8387b798a45d93230d1c1b7b22a80714751a1
Module:Language/data/iana scripts
828
185
376
375
2023-09-14T01:14:50Z
Ilovethehitgameomori
2
1 revision imported
Scribunto
text/plain
-- File-Date: 2023-08-02
return {
["Adlm"] = {"Adlam"},
["Afak"] = {"Afaka"},
["Aghb"] = {"Caucasian Albanian"},
["Ahom"] = {"Ahom", "Tai Ahom"},
["Arab"] = {"Arabic"},
["Aran"] = {"Arabic (Nastaliq variant)"},
["Armi"] = {"Imperial Aramaic"},
["Armn"] = {"Armenian"},
["Avst"] = {"Avestan"},
["Bali"] = {"Balinese"},
["Bamu"] = {"Bamum"},
["Bass"] = {"Bassa Vah"},
["Batk"] = {"Batak"},
["Beng"] = {"Bengali", "Bangla"},
["Bhks"] = {"Bhaiksuki"},
["Blis"] = {"Blissymbols"},
["Bopo"] = {"Bopomofo"},
["Brah"] = {"Brahmi"},
["Brai"] = {"Braille"},
["Bugi"] = {"Buginese"},
["Buhd"] = {"Buhid"},
["Cakm"] = {"Chakma"},
["Cans"] = {"Unified Canadian Aboriginal Syllabics"},
["Cari"] = {"Carian"},
["Cham"] = {"Cham"},
["Cher"] = {"Cherokee"},
["Chrs"] = {"Chorasmian"},
["Cirt"] = {"Cirth"},
["Copt"] = {"Coptic"},
["Cpmn"] = {"Cypro-Minoan"},
["Cprt"] = {"Cypriot syllabary"},
["Cyrl"] = {"Cyrillic"},
["Cyrs"] = {"Cyrillic (Old Church Slavonic variant)"},
["Deva"] = {"Devanagari", "Nagari"},
["Diak"] = {"Dives Akuru"},
["Dogr"] = {"Dogra"},
["Dsrt"] = {"Deseret", "Mormon"},
["Dupl"] = {"Duployan shorthand", "Duployan stenography"},
["Egyd"] = {"Egyptian demotic"},
["Egyh"] = {"Egyptian hieratic"},
["Egyp"] = {"Egyptian hieroglyphs"},
["Elba"] = {"Elbasan"},
["Elym"] = {"Elymaic"},
["Ethi"] = {"Ethiopic", "Geʻez", "Ge'ez"},
["Geok"] = {"Khutsuri (Asomtavruli and Nuskhuri)"},
["Geor"] = {"Georgian (Mkhedruli and Mtavruli)"},
["Glag"] = {"Glagolitic"},
["Gong"] = {"Gunjala Gondi"},
["Gonm"] = {"Masaram Gondi"},
["Goth"] = {"Gothic"},
["Gran"] = {"Grantha"},
["Grek"] = {"Greek"},
["Gujr"] = {"Gujarati"},
["Guru"] = {"Gurmukhi"},
["Hanb"] = {"Han with Bopomofo (alias for Han + Bopomofo)"},
["Hang"] = {"Hangul", "Hangŭl", "Hangeul"},
["Hani"] = {"Han", "Hanzi", "Kanji", "Hanja"},
["Hano"] = {"Hanunoo", "Hanunóo"},
["Hans"] = {"Han (Simplified variant)"},
["Hant"] = {"Han (Traditional variant)"},
["Hatr"] = {"Hatran"},
["Hebr"] = {"Hebrew"},
["Hira"] = {"Hiragana"},
["Hluw"] = {"Anatolian Hieroglyphs", "Luwian Hieroglyphs", "Hittite Hieroglyphs"},
["Hmng"] = {"Pahawh Hmong"},
["Hmnp"] = {"Nyiakeng Puachue Hmong"},
["Hrkt"] = {"Japanese syllabaries (alias for Hiragana + Katakana)"},
["Hung"] = {"Old Hungarian", "Hungarian Runic"},
["Inds"] = {"Indus", "Harappan"},
["Ital"] = {"Old Italic (Etruscan, Oscan, etc.)"},
["Jamo"] = {"Jamo (alias for Jamo subset of Hangul)"},
["Java"] = {"Javanese"},
["Jpan"] = {"Japanese (alias for Han + Hiragana + Katakana)"},
["Jurc"] = {"Jurchen"},
["Kali"] = {"Kayah Li"},
["Kana"] = {"Katakana"},
["Kawi"] = {"Kawi"},
["Khar"] = {"Kharoshthi"},
["Khmr"] = {"Khmer"},
["Khoj"] = {"Khojki"},
["Kitl"] = {"Khitan large script"},
["Kits"] = {"Khitan small script"},
["Knda"] = {"Kannada"},
["Kore"] = {"Korean (alias for Hangul + Han)"},
["Kpel"] = {"Kpelle"},
["Kthi"] = {"Kaithi"},
["Lana"] = {"Tai Tham", "Lanna"},
["Laoo"] = {"Lao"},
["Latf"] = {"Latin (Fraktur variant)"},
["Latg"] = {"Latin (Gaelic variant)"},
["Latn"] = {"Latin"},
["Leke"] = {"Leke"},
["Lepc"] = {"Lepcha", "Róng"},
["Limb"] = {"Limbu"},
["Lina"] = {"Linear A"},
["Linb"] = {"Linear B"},
["Lisu"] = {"Lisu", "Fraser"},
["Loma"] = {"Loma"},
["Lyci"] = {"Lycian"},
["Lydi"] = {"Lydian"},
["Mahj"] = {"Mahajani"},
["Maka"] = {"Makasar"},
["Mand"] = {"Mandaic", "Mandaean"},
["Mani"] = {"Manichaean"},
["Marc"] = {"Marchen"},
["Maya"] = {"Mayan hieroglyphs"},
["Medf"] = {"Medefaidrin", "Oberi Okaime", "Oberi Ɔkaimɛ"},
["Mend"] = {"Mende Kikakui"},
["Merc"] = {"Meroitic Cursive"},
["Mero"] = {"Meroitic Hieroglyphs"},
["Mlym"] = {"Malayalam"},
["Modi"] = {"Modi", "Moḍī"},
["Mong"] = {"Mongolian"},
["Moon"] = {"Moon", "Moon code", "Moon script", "Moon type"},
["Mroo"] = {"Mro", "Mru"},
["Mtei"] = {"Meitei Mayek", "Meithei", "Meetei"},
["Mult"] = {"Multani"},
["Mymr"] = {"Myanmar", "Burmese"},
["Nagm"] = {"Nag Mundari"},
["Nand"] = {"Nandinagari"},
["Narb"] = {"Old North Arabian", "Ancient North Arabian"},
["Nbat"] = {"Nabataean"},
["Newa"] = {"Newa", "Newar", "Newari", "Nepāla lipi"},
["Nkdb"] = {"Naxi Dongba", "na²¹ɕi³³ to³³ba²¹", "Nakhi Tomba"},
["Nkgb"] = {"Naxi Geba", "na²¹ɕi³³ gʌ²¹ba²¹", "'Na-'Khi ²Ggŏ-¹baw", "Nakhi Geba"},
["Nkoo"] = {"N’Ko", "N'Ko"},
["Nshu"] = {"Nüshu"},
["Ogam"] = {"Ogham"},
["Olck"] = {"Ol Chiki", "Ol Cemet'", "Ol", "Santali"},
["Orkh"] = {"Old Turkic", "Orkhon Runic"},
["Orya"] = {"Oriya", "Odia"},
["Osge"] = {"Osage"},
["Osma"] = {"Osmanya"},
["Ougr"] = {"Old Uyghur"},
["Palm"] = {"Palmyrene"},
["Pauc"] = {"Pau Cin Hau"},
["Pcun"] = {"Proto-Cuneiform"},
["Pelm"] = {"Proto-Elamite"},
["Perm"] = {"Old Permic"},
["Phag"] = {"Phags-pa"},
["Phli"] = {"Inscriptional Pahlavi"},
["Phlp"] = {"Psalter Pahlavi"},
["Phlv"] = {"Book Pahlavi"},
["Phnx"] = {"Phoenician"},
["Piqd"] = {"Klingon (KLI pIqaD)"},
["Plrd"] = {"Miao", "Pollard"},
["Prti"] = {"Inscriptional Parthian"},
["Psin"] = {"Proto-Sinaitic"},
["Ranj"] = {"Ranjana"},
["Rjng"] = {"Rejang", "Redjang", "Kaganga"},
["Rohg"] = {"Hanifi Rohingya"},
["Roro"] = {"Rongorongo"},
["Runr"] = {"Runic"},
["Samr"] = {"Samaritan"},
["Sara"] = {"Sarati"},
["Sarb"] = {"Old South Arabian"},
["Saur"] = {"Saurashtra"},
["Sgnw"] = {"SignWriting"},
["Shaw"] = {"Shavian", "Shaw"},
["Shrd"] = {"Sharada", "Śāradā"},
["Shui"] = {"Shuishu"},
["Sidd"] = {"Siddham", "Siddhaṃ", "Siddhamātṛkā"},
["Sind"] = {"Khudawadi", "Sindhi"},
["Sinh"] = {"Sinhala"},
["Sogd"] = {"Sogdian"},
["Sogo"] = {"Old Sogdian"},
["Sora"] = {"Sora Sompeng"},
["Soyo"] = {"Soyombo"},
["Sund"] = {"Sundanese"},
["Sunu"] = {"Sunuwar"},
["Sylo"] = {"Syloti Nagri"},
["Syrc"] = {"Syriac"},
["Syre"] = {"Syriac (Estrangelo variant)"},
["Syrj"] = {"Syriac (Western variant)"},
["Syrn"] = {"Syriac (Eastern variant)"},
["Tagb"] = {"Tagbanwa"},
["Takr"] = {"Takri", "Ṭākrī", "Ṭāṅkrī"},
["Tale"] = {"Tai Le"},
["Talu"] = {"New Tai Lue"},
["Taml"] = {"Tamil"},
["Tang"] = {"Tangut"},
["Tavt"] = {"Tai Viet"},
["Telu"] = {"Telugu"},
["Teng"] = {"Tengwar"},
["Tfng"] = {"Tifinagh", "Berber"},
["Tglg"] = {"Tagalog", "Baybayin", "Alibata"},
["Thaa"] = {"Thaana"},
["Thai"] = {"Thai"},
["Tibt"] = {"Tibetan"},
["Tirh"] = {"Tirhuta"},
["Tnsa"] = {"Tangsa"},
["Toto"] = {"Toto"},
["Ugar"] = {"Ugaritic"},
["Vaii"] = {"Vai"},
["Visp"] = {"Visible Speech"},
["Vith"] = {"Vithkuqi"},
["Wara"] = {"Warang Citi", "Varang Kshiti"},
["Wcho"] = {"Wancho"},
["Wole"] = {"Woleai"},
["Xpeo"] = {"Old Persian"},
["Xsux"] = {"Sumero-Akkadian cuneiform"},
["Yezi"] = {"Yezidi"},
["Yiii"] = {"Yi"},
["Zanb"] = {"Zanabazar Square", "Zanabazarin Dörböljin Useg", "Xewtee Dörböljin Bicig", "Horizontal Square Script"},
["Zinh"] = {"Code for inherited script"},
["Zmth"] = {"Mathematical notation"},
["Zsye"] = {"Symbols (Emoji variant)"},
["Zsym"] = {"Symbols"},
["Zxxx"] = {"Code for unwritten documents"},
["Zyyy"] = {"Code for undetermined script"},
["Zzzz"] = {"Code for uncoded script"}
}
441e9d6e54b88bea137b8945819732a90106bd4d
Module:Language/data/iana regions
828
186
378
377
2023-09-14T01:14:51Z
Ilovethehitgameomori
2
1 revision imported
Scribunto
text/plain
-- File-Date: 2023-08-02
return {
["AC"] = {"Ascension Island"},
["AD"] = {"Andorra"},
["AE"] = {"United Arab Emirates"},
["AF"] = {"Afghanistan"},
["AG"] = {"Antigua and Barbuda"},
["AI"] = {"Anguilla"},
["AL"] = {"Albania"},
["AM"] = {"Armenia"},
["AO"] = {"Angola"},
["AQ"] = {"Antarctica"},
["AR"] = {"Argentina"},
["AS"] = {"American Samoa"},
["AT"] = {"Austria"},
["AU"] = {"Australia"},
["AW"] = {"Aruba"},
["AX"] = {"Åland Islands"},
["AZ"] = {"Azerbaijan"},
["BA"] = {"Bosnia and Herzegovina"},
["BB"] = {"Barbados"},
["BD"] = {"Bangladesh"},
["BE"] = {"Belgium"},
["BF"] = {"Burkina Faso"},
["BG"] = {"Bulgaria"},
["BH"] = {"Bahrain"},
["BI"] = {"Burundi"},
["BJ"] = {"Benin"},
["BL"] = {"Saint Barthélemy"},
["BM"] = {"Bermuda"},
["BN"] = {"Brunei Darussalam"},
["BO"] = {"Bolivia"},
["BQ"] = {"Bonaire, Sint Eustatius and Saba"},
["BR"] = {"Brazil"},
["BS"] = {"Bahamas"},
["BT"] = {"Bhutan"},
["BV"] = {"Bouvet Island"},
["BW"] = {"Botswana"},
["BY"] = {"Belarus"},
["BZ"] = {"Belize"},
["CA"] = {"Canada"},
["CC"] = {"Cocos (Keeling) Islands"},
["CD"] = {"The Democratic Republic of the Congo"},
["CF"] = {"Central African Republic"},
["CG"] = {"Congo"},
["CH"] = {"Switzerland"},
["CI"] = {"Côte d'Ivoire"},
["CK"] = {"Cook Islands"},
["CL"] = {"Chile"},
["CM"] = {"Cameroon"},
["CN"] = {"China"},
["CO"] = {"Colombia"},
["CP"] = {"Clipperton Island"},
["CQ"] = {"Sark"},
["CR"] = {"Costa Rica"},
["CU"] = {"Cuba"},
["CV"] = {"Cabo Verde", "Cape Verde"},
["CW"] = {"Curaçao"},
["CX"] = {"Christmas Island"},
["CY"] = {"Cyprus"},
["CZ"] = {"Czechia", "Czech Republic"},
["DE"] = {"Germany"},
["DG"] = {"Diego Garcia"},
["DJ"] = {"Djibouti"},
["DK"] = {"Denmark"},
["DM"] = {"Dominica"},
["DO"] = {"Dominican Republic"},
["DZ"] = {"Algeria"},
["EA"] = {"Ceuta, Melilla"},
["EC"] = {"Ecuador"},
["EE"] = {"Estonia"},
["EG"] = {"Egypt"},
["EH"] = {"Western Sahara"},
["ER"] = {"Eritrea"},
["ES"] = {"Spain"},
["ET"] = {"Ethiopia"},
["EU"] = {"European Union"},
["EZ"] = {"Eurozone"},
["FI"] = {"Finland"},
["FJ"] = {"Fiji"},
["FK"] = {"Falkland Islands (Malvinas)"},
["FM"] = {"Federated States of Micronesia"},
["FO"] = {"Faroe Islands"},
["FR"] = {"France"},
["GA"] = {"Gabon"},
["GB"] = {"United Kingdom"},
["GD"] = {"Grenada"},
["GE"] = {"Georgia"},
["GF"] = {"French Guiana"},
["GG"] = {"Guernsey"},
["GH"] = {"Ghana"},
["GI"] = {"Gibraltar"},
["GL"] = {"Greenland"},
["GM"] = {"Gambia"},
["GN"] = {"Guinea"},
["GP"] = {"Guadeloupe"},
["GQ"] = {"Equatorial Guinea"},
["GR"] = {"Greece"},
["GS"] = {"South Georgia and the South Sandwich Islands"},
["GT"] = {"Guatemala"},
["GU"] = {"Guam"},
["GW"] = {"Guinea-Bissau"},
["GY"] = {"Guyana"},
["HK"] = {"Hong Kong"},
["HM"] = {"Heard Island and McDonald Islands"},
["HN"] = {"Honduras"},
["HR"] = {"Croatia"},
["HT"] = {"Haiti"},
["HU"] = {"Hungary"},
["IC"] = {"Canary Islands"},
["ID"] = {"Indonesia"},
["IE"] = {"Ireland"},
["IL"] = {"Israel"},
["IM"] = {"Isle of Man"},
["IN"] = {"India"},
["IO"] = {"British Indian Ocean Territory"},
["IQ"] = {"Iraq"},
["IR"] = {"Islamic Republic of Iran"},
["IS"] = {"Iceland"},
["IT"] = {"Italy"},
["JE"] = {"Jersey"},
["JM"] = {"Jamaica"},
["JO"] = {"Jordan"},
["JP"] = {"Japan"},
["KE"] = {"Kenya"},
["KG"] = {"Kyrgyzstan"},
["KH"] = {"Cambodia"},
["KI"] = {"Kiribati"},
["KM"] = {"Comoros"},
["KN"] = {"Saint Kitts and Nevis"},
["KP"] = {"Democratic People's Republic of Korea"},
["KR"] = {"Republic of Korea"},
["KW"] = {"Kuwait"},
["KY"] = {"Cayman Islands"},
["KZ"] = {"Kazakhstan"},
["LA"] = {"Lao People's Democratic Republic"},
["LB"] = {"Lebanon"},
["LC"] = {"Saint Lucia"},
["LI"] = {"Liechtenstein"},
["LK"] = {"Sri Lanka"},
["LR"] = {"Liberia"},
["LS"] = {"Lesotho"},
["LT"] = {"Lithuania"},
["LU"] = {"Luxembourg"},
["LV"] = {"Latvia"},
["LY"] = {"Libya"},
["MA"] = {"Morocco"},
["MC"] = {"Monaco"},
["MD"] = {"Moldova"},
["ME"] = {"Montenegro"},
["MF"] = {"Saint Martin (French part)"},
["MG"] = {"Madagascar"},
["MH"] = {"Marshall Islands"},
["MK"] = {"North Macedonia"},
["ML"] = {"Mali"},
["MM"] = {"Myanmar"},
["MN"] = {"Mongolia"},
["MO"] = {"Macao"},
["MP"] = {"Northern Mariana Islands"},
["MQ"] = {"Martinique"},
["MR"] = {"Mauritania"},
["MS"] = {"Montserrat"},
["MT"] = {"Malta"},
["MU"] = {"Mauritius"},
["MV"] = {"Maldives"},
["MW"] = {"Malawi"},
["MX"] = {"Mexico"},
["MY"] = {"Malaysia"},
["MZ"] = {"Mozambique"},
["NA"] = {"Namibia"},
["NC"] = {"New Caledonia"},
["NE"] = {"Niger"},
["NF"] = {"Norfolk Island"},
["NG"] = {"Nigeria"},
["NI"] = {"Nicaragua"},
["NL"] = {"Netherlands"},
["NO"] = {"Norway"},
["NP"] = {"Nepal"},
["NR"] = {"Nauru"},
["NU"] = {"Niue"},
["NZ"] = {"New Zealand"},
["OM"] = {"Oman"},
["PA"] = {"Panama"},
["PE"] = {"Peru"},
["PF"] = {"French Polynesia"},
["PG"] = {"Papua New Guinea"},
["PH"] = {"Philippines"},
["PK"] = {"Pakistan"},
["PL"] = {"Poland"},
["PM"] = {"Saint Pierre and Miquelon"},
["PN"] = {"Pitcairn"},
["PR"] = {"Puerto Rico"},
["PS"] = {"State of Palestine"},
["PT"] = {"Portugal"},
["PW"] = {"Palau"},
["PY"] = {"Paraguay"},
["QA"] = {"Qatar"},
["RE"] = {"Réunion"},
["RO"] = {"Romania"},
["RS"] = {"Serbia"},
["RU"] = {"Russian Federation"},
["RW"] = {"Rwanda"},
["SA"] = {"Saudi Arabia"},
["SB"] = {"Solomon Islands"},
["SC"] = {"Seychelles"},
["SD"] = {"Sudan"},
["SE"] = {"Sweden"},
["SG"] = {"Singapore"},
["SH"] = {"Saint Helena, Ascension and Tristan da Cunha"},
["SI"] = {"Slovenia"},
["SJ"] = {"Svalbard and Jan Mayen"},
["SK"] = {"Slovakia"},
["SL"] = {"Sierra Leone"},
["SM"] = {"San Marino"},
["SN"] = {"Senegal"},
["SO"] = {"Somalia"},
["SR"] = {"Suriname"},
["SS"] = {"South Sudan"},
["ST"] = {"Sao Tome and Principe"},
["SV"] = {"El Salvador"},
["SX"] = {"Sint Maarten (Dutch part)"},
["SY"] = {"Syrian Arab Republic"},
["SZ"] = {"Eswatini", "eSwatini", "Swaziland"},
["TA"] = {"Tristan da Cunha"},
["TC"] = {"Turks and Caicos Islands"},
["TD"] = {"Chad"},
["TF"] = {"French Southern Territories"},
["TG"] = {"Togo"},
["TH"] = {"Thailand"},
["TJ"] = {"Tajikistan"},
["TK"] = {"Tokelau"},
["TL"] = {"Timor-Leste"},
["TM"] = {"Turkmenistan"},
["TN"] = {"Tunisia"},
["TO"] = {"Tonga"},
["TR"] = {"Türkiye", "Turkey"},
["TT"] = {"Trinidad and Tobago"},
["TV"] = {"Tuvalu"},
["TW"] = {"Taiwan, Province of China"},
["TZ"] = {"United Republic of Tanzania"},
["UA"] = {"Ukraine"},
["UG"] = {"Uganda"},
["UM"] = {"United States Minor Outlying Islands"},
["UN"] = {"United Nations"},
["US"] = {"United States"},
["UY"] = {"Uruguay"},
["UZ"] = {"Uzbekistan"},
["VA"] = {"Holy See (Vatican City State)"},
["VC"] = {"Saint Vincent and the Grenadines"},
["VE"] = {"Venezuela"},
["VG"] = {"British Virgin Islands"},
["VI"] = {"U.S. Virgin Islands"},
["VN"] = {"Viet Nam"},
["VU"] = {"Vanuatu"},
["WF"] = {"Wallis and Futuna"},
["WS"] = {"Samoa"},
["YE"] = {"Yemen"},
["YT"] = {"Mayotte"},
["ZA"] = {"South Africa"},
["ZM"] = {"Zambia"},
["ZW"] = {"Zimbabwe"},
["001"] = {"World"},
["002"] = {"Africa"},
["003"] = {"North America"},
["005"] = {"South America"},
["009"] = {"Oceania"},
["011"] = {"Western Africa"},
["013"] = {"Central America"},
["014"] = {"Eastern Africa"},
["015"] = {"Northern Africa"},
["017"] = {"Middle Africa"},
["018"] = {"Southern Africa"},
["019"] = {"Americas"},
["021"] = {"Northern America"},
["029"] = {"Caribbean"},
["030"] = {"Eastern Asia"},
["034"] = {"Southern Asia"},
["035"] = {"South-Eastern Asia"},
["039"] = {"Southern Europe"},
["053"] = {"Australia and New Zealand"},
["054"] = {"Melanesia"},
["057"] = {"Micronesia"},
["061"] = {"Polynesia"},
["142"] = {"Asia"},
["143"] = {"Central Asia"},
["145"] = {"Western Asia"},
["150"] = {"Europe"},
["151"] = {"Eastern Europe"},
["154"] = {"Northern Europe"},
["155"] = {"Western Europe"},
["202"] = {"Sub-Saharan Africa"},
["419"] = {"Latin America and the Caribbean"}
}
08de6963e81994fd00a9f7b5a76b5ed63c543989
Module:Language/data/iana variants
828
187
380
379
2023-09-14T01:14:51Z
Ilovethehitgameomori
2
1 revision imported
Scribunto
text/plain
-- File-Date: 2023-08-02
return {
["1606nict"] = {
["descriptions"] = {"Late Middle French (to 1606)"},
["prefixes"] = {"frm"},
},
["1694acad"] = {
["descriptions"] = {"Early Modern French"},
["prefixes"] = {"fr"},
},
["1901"] = {
["descriptions"] = {"Traditional German orthography"},
["prefixes"] = {"de"},
},
["1959acad"] = {
["descriptions"] = {"\"Academic\" (\"governmental\") variant of Belarusian as codified in 1959"},
["prefixes"] = {"be"},
},
["1994"] = {
["descriptions"] = {"Standardized Resian orthography"},
["prefixes"] = {"sl-rozaj", "sl-rozaj-biske", "sl-rozaj-njiva", "sl-rozaj-osojs", "sl-rozaj-solba"},
},
["1996"] = {
["descriptions"] = {"German orthography of 1996"},
["prefixes"] = {"de"},
},
["abl1943"] = {
["descriptions"] = {"Orthographic formulation of 1943 - Official in Brazil (Formulário Ortográfico de 1943 - Oficial no Brasil)"},
["prefixes"] = {"pt-br"},
},
["akuapem"] = {
["descriptions"] = {"Akuapem Twi"},
["prefixes"] = {"tw"},
},
["alalc97"] = {
["descriptions"] = {"ALA-LC Romanization, 1997 edition"},
["prefixes"] = {},
},
["aluku"] = {
["descriptions"] = {"Aluku dialect", "Boni dialect"},
["prefixes"] = {"djk"},
},
["ao1990"] = {
["descriptions"] = {"Portuguese Language Orthographic Agreement of 1990 (Acordo Ortográfico da Língua Portuguesa de 1990)"},
["prefixes"] = {"pt", "gl"},
},
["aranes"] = {
["descriptions"] = {"Aranese"},
["prefixes"] = {"oc"},
},
["arkaika"] = {
["descriptions"] = {"Arcaicam Esperantom", "Arkaika Esperanto"},
["prefixes"] = {"eo"},
},
["asante"] = {
["descriptions"] = {"Asante Twi", "Ashanti Twi"},
["prefixes"] = {"tw"},
},
["auvern"] = {
["descriptions"] = {"Auvergnat"},
["prefixes"] = {"oc"},
},
["baku1926"] = {
["descriptions"] = {"Unified Turkic Latin Alphabet (Historical)"},
["prefixes"] = {"az", "ba", "crh", "kk", "krc", "ky", "sah", "tk", "tt", "uz"},
},
["balanka"] = {
["descriptions"] = {"The Balanka dialect of Anii"},
["prefixes"] = {"blo"},
},
["barla"] = {
["descriptions"] = {"The Barlavento dialect group of Kabuverdianu"},
["prefixes"] = {"kea"},
},
["basiceng"] = {
["descriptions"] = {"Basic English"},
["prefixes"] = {"en"},
},
["bauddha"] = {
["descriptions"] = {"Buddhist Hybrid Sanskrit"},
["prefixes"] = {"sa"},
},
["bciav"] = {
["descriptions"] = {"BCI Blissymbolics AV"},
["prefixes"] = {"zbl"},
},
["bcizbl"] = {
["descriptions"] = {"BCI Blissymbolics"},
["prefixes"] = {"zbl"},
},
["biscayan"] = {
["descriptions"] = {"Biscayan dialect of Basque"},
["prefixes"] = {"eu"},
},
["biske"] = {
["descriptions"] = {"The San Giorgio dialect of Resian", "The Bila dialect of Resian"},
["prefixes"] = {"sl-rozaj"},
},
["blasl"] = {
["descriptions"] = {"Black American Sign Language dialect"},
["prefixes"] = {"ase", "sgn-ase"},
},
["bohoric"] = {
["descriptions"] = {"Slovene in Bohorič alphabet"},
["prefixes"] = {"sl"},
},
["boont"] = {
["descriptions"] = {"Boontling"},
["prefixes"] = {"en"},
},
["bornholm"] = {
["descriptions"] = {"Bornholmsk"},
["prefixes"] = {"da"},
},
["cisaup"] = {
["descriptions"] = {"Cisalpine"},
["prefixes"] = {"oc"},
},
["colb1945"] = {
["descriptions"] = {"Portuguese-Brazilian Orthographic Convention of 1945 (Convenção Ortográfica Luso-Brasileira de 1945)"},
["prefixes"] = {"pt"},
},
["cornu"] = {
["descriptions"] = {"Cornu-English", "Cornish English", "Anglo-Cornish"},
["prefixes"] = {"en"},
},
["creiss"] = {
["descriptions"] = {"Occitan variants of the Croissant area"},
["prefixes"] = {"oc"},
},
["dajnko"] = {
["descriptions"] = {"Slovene in Dajnko alphabet"},
["prefixes"] = {"sl"},
},
["ekavsk"] = {
["descriptions"] = {"Serbian with Ekavian pronunciation"},
["prefixes"] = {"sr", "sr-latn", "sr-cyrl"},
},
["emodeng"] = {
["descriptions"] = {"Early Modern English (1500-1700)"},
["prefixes"] = {"en"},
},
["fonipa"] = {
["descriptions"] = {"International Phonetic Alphabet"},
["prefixes"] = {},
},
["fonkirsh"] = {
["descriptions"] = {"Kirshenbaum Phonetic Alphabet"},
["prefixes"] = {},
},
["fonnapa"] = {
["descriptions"] = {"North American Phonetic Alphabet", "Americanist Phonetic Notation"},
["prefixes"] = {},
},
["fonupa"] = {
["descriptions"] = {"Uralic Phonetic Alphabet"},
["prefixes"] = {},
},
["fonxsamp"] = {
["descriptions"] = {"X-SAMPA transcription"},
["prefixes"] = {},
},
["gallo"] = {
["descriptions"] = {"Gallo"},
["prefixes"] = {"fr"},
},
["gascon"] = {
["descriptions"] = {"Gascon"},
["prefixes"] = {"oc"},
},
["grclass"] = {
["descriptions"] = {"Classical Occitan orthography"},
["prefixes"] = {"oc", "oc-aranes", "oc-auvern", "oc-cisaup", "oc-creiss", "oc-gascon", "oc-lemosin", "oc-lengadoc", "oc-nicard", "oc-provenc", "oc-vivaraup"},
},
["grital"] = {
["descriptions"] = {"Italian-inspired Occitan orthography"},
["prefixes"] = {"oc", "oc-cisaup", "oc-nicard", "oc-provenc"},
},
["grmistr"] = {
["descriptions"] = {"Mistralian or Mistralian-inspired Occitan orthography"},
["prefixes"] = {"oc", "oc-aranes", "oc-auvern", "oc-cisaup", "oc-creiss", "oc-gascon", "oc-lemosin", "oc-lengadoc", "oc-nicard", "oc-provenc", "oc-vivaraup"},
},
["hepburn"] = {
["descriptions"] = {"Hepburn romanization"},
["prefixes"] = {"ja-latn"},
},
["hognorsk"] = {
["descriptions"] = {"Norwegian in Høgnorsk (High Norwegian) orthography"},
["prefixes"] = {"nn"},
},
["hsistemo"] = {
["descriptions"] = {"Standard H-system orthographic fallback for spelling Esperanto"},
["prefixes"] = {"eo"},
},
["ijekavsk"] = {
["descriptions"] = {"Serbian with Ijekavian pronunciation"},
["prefixes"] = {"sr", "sr-latn", "sr-cyrl"},
},
["itihasa"] = {
["descriptions"] = {"Epic Sanskrit"},
["prefixes"] = {"sa"},
},
["ivanchov"] = {
["descriptions"] = {"Bulgarian in 1899 orthography"},
["prefixes"] = {"bg"},
},
["jauer"] = {
["descriptions"] = {"Jauer dialect of Romansh"},
["prefixes"] = {"rm"},
},
["jyutping"] = {
["descriptions"] = {"Jyutping Cantonese Romanization"},
["prefixes"] = {"yue"},
},
["kkcor"] = {
["descriptions"] = {"Common Cornish orthography of Revived Cornish"},
["prefixes"] = {"kw"},
},
["kociewie"] = {
["descriptions"] = {"The Kociewie dialect of Polish"},
["prefixes"] = {"pl"},
},
["kscor"] = {
["descriptions"] = {"Standard Cornish orthography of Revived Cornish", "Kernowek Standard"},
["prefixes"] = {"kw"},
},
["laukika"] = {
["descriptions"] = {"Classical Sanskrit"},
["prefixes"] = {"sa"},
},
["lemosin"] = {
["descriptions"] = {"Limousin"},
["prefixes"] = {"oc"},
},
["lengadoc"] = {
["descriptions"] = {"Languedocien"},
["prefixes"] = {"oc"},
},
["lipaw"] = {
["descriptions"] = {"The Lipovaz dialect of Resian", "The Lipovec dialect of Resian"},
["prefixes"] = {"sl-rozaj"},
},
["ltg1929"] = {
["descriptions"] = {"The Latgalian language orthography codified in 1929"},
["prefixes"] = {"ltg"},
},
["ltg2007"] = {
["descriptions"] = {"The Latgalian language orthography codified in the language law in 2007"},
["prefixes"] = {"ltg"},
},
["luna1918"] = {
["descriptions"] = {"Post-1917 Russian orthography"},
["prefixes"] = {"ru"},
},
["metelko"] = {
["descriptions"] = {"Slovene in Metelko alphabet"},
["prefixes"] = {"sl"},
},
["monoton"] = {
["descriptions"] = {"Monotonic Greek"},
["prefixes"] = {"el"},
},
["ndyuka"] = {
["descriptions"] = {"Ndyuka dialect", "Aukan dialect"},
["prefixes"] = {"djk"},
},
["nedis"] = {
["descriptions"] = {"Natisone dialect", "Nadiza dialect"},
["prefixes"] = {"sl"},
},
["newfound"] = {
["descriptions"] = {"Newfoundland English"},
["prefixes"] = {"en-ca"},
},
["nicard"] = {
["descriptions"] = {"Niçard"},
["prefixes"] = {"oc"},
},
["njiva"] = {
["descriptions"] = {"The Gniva dialect of Resian", "The Njiva dialect of Resian"},
["prefixes"] = {"sl-rozaj"},
},
["nulik"] = {
["descriptions"] = {"Volapük nulik", "Volapük perevidöl", "Volapük nulädik", "de Jong's Volapük", "New Volapük", "Revised Volapük", "Modern Volapük"},
["prefixes"] = {"vo"},
},
["osojs"] = {
["descriptions"] = {"The Oseacco dialect of Resian", "The Osojane dialect of Resian"},
["prefixes"] = {"sl-rozaj"},
},
["oxendict"] = {
["descriptions"] = {"Oxford English Dictionary spelling"},
["prefixes"] = {"en"},
},
["pahawh2"] = {
["descriptions"] = {"Pahawh Hmong Second Stage Reduced orthography"},
["prefixes"] = {"mww", "hnj"},
},
["pahawh3"] = {
["descriptions"] = {"Pahawh Hmong Third Stage Reduced orthography"},
["prefixes"] = {"mww", "hnj"},
},
["pahawh4"] = {
["descriptions"] = {"Pahawh Hmong Final Version orthography"},
["prefixes"] = {"mww", "hnj"},
},
["pamaka"] = {
["descriptions"] = {"Pamaka dialect"},
["prefixes"] = {"djk"},
},
["peano"] = {
["descriptions"] = {"Latino Sine Flexione", "Interlingua de API", "Interlingua de Peano"},
["prefixes"] = {"la"},
},
["petr1708"] = {
["descriptions"] = {"Petrine orthography"},
["prefixes"] = {"ru"},
},
["pinyin"] = {
["descriptions"] = {"Pinyin romanization"},
["prefixes"] = {"zh-latn", "bo-latn"},
},
["polyton"] = {
["descriptions"] = {"Polytonic Greek"},
["prefixes"] = {"el"},
},
["provenc"] = {
["descriptions"] = {"Provençal"},
["prefixes"] = {"oc"},
},
["puter"] = {
["descriptions"] = {"Puter idiom of Romansh"},
["prefixes"] = {"rm"},
},
["rigik"] = {
["descriptions"] = {"Volapük rigik", "Schleyer's Volapük", "Original Volapük", "Classic Volapük"},
["prefixes"] = {"vo"},
},
["rozaj"] = {
["descriptions"] = {"Resian", "Resianic", "Rezijan"},
["prefixes"] = {"sl"},
},
["rumgr"] = {
["descriptions"] = {"Rumantsch Grischun"},
["prefixes"] = {"rm"},
},
["scotland"] = {
["descriptions"] = {"Scottish Standard English"},
["prefixes"] = {"en"},
},
["scouse"] = {
["descriptions"] = {"Scouse"},
["prefixes"] = {"en"},
},
["simple"] = {
["descriptions"] = {"Simplified form"},
["prefixes"] = {},
},
["solba"] = {
["descriptions"] = {"The Stolvizza dialect of Resian", "The Solbica dialect of Resian"},
["prefixes"] = {"sl-rozaj"},
},
["sotav"] = {
["descriptions"] = {"The Sotavento dialect group of Kabuverdianu"},
["prefixes"] = {"kea"},
},
["spanglis"] = {
["descriptions"] = {"Spanglish"},
["prefixes"] = {"en", "es"},
},
["surmiran"] = {
["descriptions"] = {"Surmiran idiom of Romansh"},
["prefixes"] = {"rm"},
},
["sursilv"] = {
["descriptions"] = {"Sursilvan idiom of Romansh"},
["prefixes"] = {"rm"},
},
["sutsilv"] = {
["descriptions"] = {"Sutsilvan idiom of Romansh"},
["prefixes"] = {"rm"},
},
["synnejyl"] = {
["descriptions"] = {"Synnejysk", "South Jutish"},
["prefixes"] = {"da"},
},
["tarask"] = {
["descriptions"] = {"Belarusian in Taraskievica orthography"},
["prefixes"] = {"be"},
},
["tongyong"] = {
["descriptions"] = {"Tongyong Pinyin romanization"},
["prefixes"] = {"zh-latn"},
},
["tunumiit"] = {
["descriptions"] = {"Tunumiisiut", "East Greenlandic", "Østgrønlandsk"},
["prefixes"] = {"kl"},
},
["uccor"] = {
["descriptions"] = {"Unified Cornish orthography of Revived Cornish"},
["prefixes"] = {"kw"},
},
["ucrcor"] = {
["descriptions"] = {"Unified Cornish Revised orthography of Revived Cornish"},
["prefixes"] = {"kw"},
},
["ulster"] = {
["descriptions"] = {"Ulster dialect of Scots"},
["prefixes"] = {"sco"},
},
["unifon"] = {
["descriptions"] = {"Unifon phonetic alphabet"},
["prefixes"] = {"en", "hup", "kyh", "tol", "yur"},
},
["vaidika"] = {
["descriptions"] = {"Vedic Sanskrit"},
["prefixes"] = {"sa"},
},
["valencia"] = {
["descriptions"] = {"Valencian"},
["prefixes"] = {"ca"},
},
["vallader"] = {
["descriptions"] = {"Vallader idiom of Romansh"},
["prefixes"] = {"rm"},
},
["vecdruka"] = {
["descriptions"] = {"Latvian orthography used before 1920s (\"vecā druka\")"},
["prefixes"] = {"lv"},
},
["vivaraup"] = {
["descriptions"] = {"Vivaro-Alpine"},
["prefixes"] = {"oc"},
},
["wadegile"] = {
["descriptions"] = {"Wade-Giles romanization"},
["prefixes"] = {"zh-latn"},
},
["xsistemo"] = {
["descriptions"] = {"Standard X-system orthographic fallback for spelling Esperanto"},
["prefixes"] = {"eo"},
}
}
36f89cd82969f3b0f948034eba0fa2c149ee65c2
Module:Language/data/iana suppressed scripts
828
188
382
381
2023-09-14T01:14:52Z
Ilovethehitgameomori
2
1 revision imported
Scribunto
text/plain
-- File-Date: 2023-08-02
return {
["Arab"] = {"ar", "fa", "ps", "ur"},
["Armn"] = {"hy"},
["Beng"] = {"as", "bn"},
["Blis"] = {"zbl"},
["Cyrl"] = {"ab", "be", "bg", "kk", "mk", "ru", "uk"},
["Deva"] = {"hi", "mr", "ne", "kok", "mai"},
["Ethi"] = {"am", "ti"},
["Geor"] = {"ka"},
["Grek"] = {"el"},
["Gujr"] = {"gu"},
["Guru"] = {"pa"},
["Hebr"] = {"he", "iw", "yi"},
["Jpan"] = {"ja"},
["Khmr"] = {"km"},
["Knda"] = {"kn"},
["Kore"] = {"ko"},
["Laoo"] = {"lo"},
["Latn"] = {"af", "ay", "bs", "ca", "ch", "cs", "cy", "da", "de", "en", "eo",
"es", "et", "eu", "fi", "fj", "fo", "fr", "fy", "ga", "gl", "gn",
"gv", "hr", "ht", "hu", "id", "in", "is", "it", "kl", "la", "lb",
"ln", "lt", "lv", "mg", "mh", "mo", "ms", "mt", "na", "nb", "nd",
"nl", "nn", "no", "nr", "ny", "om", "pl", "pt", "qu", "rm", "rn",
"ro", "rw", "sg", "sk", "sl", "sm", "so", "sq", "ss", "st", "sv",
"sw", "tl", "tn", "to", "tr", "ts", "ve", "vi", "xh", "zu", "dsb",
"frr", "frs", "gsw", "hsb", "men", "nds", "niu", "nso", "tem", "tkl", "tmh",
"tpi", "tvl"},
["Mlym"] = {"ml"},
["Mymr"] = {"my"},
["Nkoo"] = {"nqo"},
["Orya"] = {"or"},
["Sinh"] = {"si"},
["Taml"] = {"ta"},
["Telu"] = {"te"},
["Thaa"] = {"dv"},
["Thai"] = {"th"},
["Tibt"] = {"dz"}
}
e2c364560ccc050dacdd276ebab1758584b937ad
Module:Lang/ISO 639 synonyms
828
189
384
383
2023-09-14T01:14:52Z
Ilovethehitgameomori
2
1 revision imported
Scribunto
text/plain
-- File-Date: 2013-01-11
return {
["aar"] = "aa",
["abk"] = "ab",
["afr"] = "af",
["aka"] = "ak",
["amh"] = "am",
["ara"] = "ar",
["arg"] = "an",
["asm"] = "as",
["ava"] = "av",
["ave"] = "ae",
["aym"] = "ay",
["aze"] = "az",
["bak"] = "ba",
["bam"] = "bm",
["bel"] = "be",
["ben"] = "bn",
["bih"] = "bh",
["bis"] = "bi",
["bod"] = "bo",
["bos"] = "bs",
["bre"] = "br",
["bul"] = "bg",
["cat"] = "ca",
["ces"] = "cs",
["cha"] = "ch",
["che"] = "ce",
["chu"] = "cu",
["chv"] = "cv",
["cor"] = "kw",
["cos"] = "co",
["cre"] = "cr",
["cym"] = "cy",
["dan"] = "da",
["deu"] = "de",
["div"] = "dv",
["dzo"] = "dz",
["ell"] = "el",
["eng"] = "en",
["epo"] = "eo",
["est"] = "et",
["eus"] = "eu",
["ewe"] = "ee",
["fao"] = "fo",
["fas"] = "fa",
["fij"] = "fj",
["fin"] = "fi",
["fra"] = "fr",
["fry"] = "fy",
["ful"] = "ff",
["gla"] = "gd",
["gle"] = "ga",
["glg"] = "gl",
["glv"] = "gv",
["grn"] = "gn",
["guj"] = "gu",
["hat"] = "ht",
["hau"] = "ha",
["heb"] = "he",
["her"] = "hz",
["hin"] = "hi",
["hmo"] = "ho",
["hrv"] = "hr",
["hun"] = "hu",
["hye"] = "hy",
["ibo"] = "ig",
["ido"] = "io",
["iii"] = "ii",
["iku"] = "iu",
["ile"] = "ie",
["ina"] = "ia",
["ind"] = "id",
["ipk"] = "ik",
["isl"] = "is",
["ita"] = "it",
["jav"] = "jv",
["jpn"] = "ja",
["kal"] = "kl",
["kan"] = "kn",
["kas"] = "ks",
["kat"] = "ka",
["kau"] = "kr",
["kaz"] = "kk",
["khm"] = "km",
["kik"] = "ki",
["kin"] = "rw",
["kir"] = "ky",
["kom"] = "kv",
["kon"] = "kg",
["kor"] = "ko",
["kua"] = "kj",
["kur"] = "ku",
["lao"] = "lo",
["lat"] = "la",
["lav"] = "lv",
["lim"] = "li",
["lin"] = "ln",
["lit"] = "lt",
["ltz"] = "lb",
["lub"] = "lu",
["lug"] = "lg",
["mah"] = "mh",
["mal"] = "ml",
["mar"] = "mr",
["mkd"] = "mk",
["mlg"] = "mg",
["mlt"] = "mt",
["mon"] = "mn",
["mri"] = "mi",
["msa"] = "ms",
["mya"] = "my",
["nau"] = "na",
["nav"] = "nv",
["nbl"] = "nr",
["nde"] = "nd",
["ndo"] = "ng",
["nep"] = "ne",
["nld"] = "nl",
["nno"] = "nn",
["nob"] = "nb",
["nor"] = "no",
["nya"] = "ny",
["oci"] = "oc",
["oji"] = "oj",
["ori"] = "or",
["orm"] = "om",
["oss"] = "os",
["pan"] = "pa",
["pli"] = "pi",
["pol"] = "pl",
["por"] = "pt",
["pus"] = "ps",
["que"] = "qu",
["roh"] = "rm",
["ron"] = "ro",
["run"] = "rn",
["rus"] = "ru",
["sag"] = "sg",
["san"] = "sa",
["sin"] = "si",
["slk"] = "sk",
["slv"] = "sl",
["sme"] = "se",
["smo"] = "sm",
["sna"] = "sn",
["snd"] = "sd",
["som"] = "so",
["sot"] = "st",
["spa"] = "es",
["sqi"] = "sq",
["srd"] = "sc",
["srp"] = "sr",
["ssw"] = "ss",
["sun"] = "su",
["swa"] = "sw",
["swe"] = "sv",
["tah"] = "ty",
["tam"] = "ta",
["tat"] = "tt",
["tel"] = "te",
["tgk"] = "tg",
["tgl"] = "tl",
["tha"] = "th",
["tir"] = "ti",
["ton"] = "to",
["tsn"] = "tn",
["tso"] = "ts",
["tuk"] = "tk",
["tur"] = "tr",
["twi"] = "tw",
["uig"] = "ug",
["ukr"] = "uk",
["urd"] = "ur",
["uzb"] = "uz",
["ven"] = "ve",
["vie"] = "vi",
["vol"] = "vo",
["wln"] = "wa",
["wol"] = "wo",
["xho"] = "xh",
["yid"] = "yi",
["yor"] = "yo",
["zha"] = "za",
["zho"] = "zh",
["zul"] = "zu"
}
f3fb5374c9e0fdef6ce6ea22736b79468358ca19
Module:Convert
828
190
386
385
2023-09-14T01:14:54Z
Ilovethehitgameomori
2
1 revision imported
Scribunto
text/plain
-- Convert a value from one unit of measurement to another.
-- Example: {{convert|123|lb|kg}} --> 123 pounds (56 kg)
-- See [[:en:Template:Convert/Transwiki guide]] if copying to another wiki.
local MINUS = '−' -- Unicode U+2212 MINUS SIGN (UTF-8: e2 88 92)
local abs = math.abs
local floor = math.floor
local format = string.format
local log10 = math.log10
local ustring = mw.ustring
local ulen = ustring.len
local usub = ustring.sub
-- Configuration options to keep magic values in one location.
-- Conversion data and message text are defined in separate modules.
local config, maxsigfig
local numdot -- must be '.' or ',' or a character which works in a regex
local numsep, numsep_remove, numsep_remove2
local data_code, all_units
local text_code
local varname -- can be a code to use variable names that depend on value
local from_en_table -- to translate an output string of en digits to local language
local to_en_table -- to translate an input string of digits in local language to en
-- Use translation_table in convert/text to change the following.
local en_default -- true uses lang=en unless convert has lang=local or local digits
local group_method = 3 -- code for how many digits are in a group
local per_word = 'per' -- for units like "liters per kilometer"
local plural_suffix = 's' -- only other useful value is probably '' to disable plural unit names
local omitsep -- true to omit separator before local symbol/name
-- All units should be defined in the data module. However, to cater for quick changes
-- and experiments, any unknown unit is looked up in an extra data module, if it exists.
-- That module would be transcluded in only a small number of pages, so there should be
-- little server overhead from making changes, and changes should propagate quickly.
local extra_module -- name of module with extra units
local extra_units -- nil or table of extra units from extra_module
-- Some options in the invoking template can set variables used later in the module.
local currency_text -- for a user-defined currency symbol: {{convert|12|$/ha|$=€}} (euro replaces dollar)
local function from_en(text)
-- Input is a string representing a number in en digits with '.' decimal mark,
-- without digit grouping (which is done just after calling this).
-- Return the translation of the string with numdot and digits in local language.
if numdot ~= '.' then
text = text:gsub('%.', numdot)
end
if from_en_table then
text = text:gsub('%d', from_en_table)
end
return text
end
local function to_en(text)
-- Input is a string representing a number in the local language with
-- an optional numdot decimal mark and numsep digit grouping.
-- Return the translation of the string with '.' mark and en digits,
-- and no separators (they have to be removed here to handle cases like
-- numsep = '.' and numdot = ',' with input "1.234.567,8").
if to_en_table then
text = ustring.gsub(text, '%d', to_en_table)
end
if numsep_remove then
text = text:gsub(numsep_remove, '')
end
if numsep_remove2 then
text = text:gsub(numsep_remove2, '')
end
if numdot ~= '.' then
text = text:gsub(numdot, '.')
end
return text
end
local function decimal_mark(text)
-- Return ',' if text probably is using comma for decimal mark, or has no decimal mark.
-- Return '.' if text probably is using dot for decimal mark.
-- Otherwise return nothing (decimal mark not known).
if not text:find('[.,]') then return ',' end
text = text:gsub('^%-', ''):gsub('%+%d+/%d+$', ''):gsub('[Ee]%-?%d+$', '')
local decimal =
text:match('^0?([.,])%d+$') or
text:match('%d([.,])%d?%d?$') or
text:match('%d([.,])%d%d%d%d+$')
if decimal then return decimal end
if text:match('%.%d+%.') then return ',' end
if text:match('%,%d+,') then return '.' end
end
local add_warning, with_separator -- forward declarations
local function to_en_with_check(text, parms)
-- Version of to_en() for a wiki using numdot = ',' and numsep = '.' to check
-- text (an input number as a string) which might have been copied from enwiki.
-- For example, in '1.234' the '.' could be a decimal mark or a group separator.
-- From viwiki.
if to_en_table then
text = ustring.gsub(text, '%d', to_en_table)
end
if decimal_mark(text) == '.' then
local original = text
text = text:gsub(',', '') -- for example, interpret "1,234.5" as an enwiki value
if parms then
add_warning(parms, 0, 'cvt_enwiki_num', original, with_separator({}, text))
end
else
if numsep_remove then
text = text:gsub(numsep_remove, '')
end
if numsep_remove2 then
text = text:gsub(numsep_remove2, '')
end
if numdot ~= '.' then
text = text:gsub(numdot, '.')
end
end
return text
end
local function omit_separator(id)
-- Return true if there should be no separator before id (a unit symbol or name).
-- For zhwiki, there should be no separator if id uses local characters.
-- The following kludge should be a sufficient test.
if omitsep then
if id:sub(1, 2) == '-{' then -- for "-{...}-" content language variant
return true
end
if id:byte() > 127 then
local first = usub(id, 1, 1)
if first ~= 'Å' and first ~= '°' and first ~= 'µ' then
return true
end
end
end
return id:sub(1, 1) == '/' -- no separator before units like "/ha"
end
local spell_module -- name of module that can spell numbers
local speller -- function from that module to handle spelling (set if needed)
local wikidata_module, wikidata_data_module -- names of Wikidata modules
local wikidata_code, wikidata_data -- exported tables from those modules (set if needed)
local function set_config(args)
-- Set configuration options from template #invoke or defaults.
config = args
maxsigfig = config.maxsigfig or 14 -- maximum number of significant figures
local data_module, text_module
local sandbox = config.sandbox and ('/' .. config.sandbox) or ''
data_module = "Module:Convert/data" .. sandbox
text_module = "Module:Convert/text" .. sandbox
extra_module = "Module:Convert/extra" .. sandbox
wikidata_module = "Module:Convert/wikidata" .. sandbox
wikidata_data_module = "Module:Convert/wikidata/data" .. sandbox
spell_module = "Module:ConvertNumeric"
data_code = mw.loadData(data_module)
text_code = mw.loadData(text_module)
all_units = data_code.all_units
local translation = text_code.translation_table
if translation then
numdot = translation.numdot
numsep = translation.numsep
if numdot == ',' and numsep == '.' then
if text_code.all_messages.cvt_enwiki_num then
to_en = to_en_with_check
end
end
if translation.group then
group_method = translation.group
end
if translation.per_word then
per_word = translation.per_word
end
if translation.plural_suffix then
plural_suffix = translation.plural_suffix
end
varname = translation.varname
from_en_table = translation.from_en
local use_workaround = true
if use_workaround then
-- 2013-07-05 workaround bug by making a copy of the required table.
-- mw.ustring.gsub fails with a table (to_en_table) as the replacement,
-- if the table is accessed via mw.loadData.
local source = translation.to_en
if source then
to_en_table = {}
for k, v in pairs(source) do
to_en_table[k] = v
end
end
else
to_en_table = translation.to_en
end
if translation.lang == 'en default' then
en_default = true -- for hiwiki
end
omitsep = translation.omitsep -- for zhwiki
end
numdot = config.numdot or numdot or '.' -- decimal mark before fractional digits
numsep = config.numsep or numsep or ',' -- group separator for numbers
-- numsep should be ',' or '.' or '' or ' ' or a Unicode character.
-- numsep_remove must work in a regex to identify separators to be removed.
if numsep ~= '' then
numsep_remove = (numsep == '.') and '%.' or numsep
end
if numsep ~= ',' and numdot ~= ',' then
numsep_remove2 = ',' -- so numbers copied from enwiki will work
end
end
local function collection()
-- Return a table to hold items.
return {
n = 0,
add = function (self, item)
self.n = self.n + 1
self[self.n] = item
end,
}
end
local function divide(numerator, denominator)
-- Return integers quotient, remainder resulting from dividing the two
-- given numbers, which should be unsigned integers.
local quotient, remainder = floor(numerator / denominator), numerator % denominator
if not (0 <= remainder and remainder < denominator) then
-- Floating point limits may need this, as in {{convert|160.02|Ym|ydftin}}.
remainder = 0
end
return quotient, remainder
end
local function split(text, delimiter)
-- Return a numbered table with fields from splitting text.
-- The delimiter is used in a regex without escaping (for example, '.' would fail).
-- Each field has any leading/trailing whitespace removed.
local t = {}
text = text .. delimiter -- to get last item
for item in text:gmatch('%s*(.-)%s*' .. delimiter) do
table.insert(t, item)
end
return t
end
local function strip(text)
-- If text is a string, return its content with no leading/trailing
-- whitespace. Otherwise return nil (a nil argument gives a nil result).
if type(text) == 'string' then
return text:match("^%s*(.-)%s*$")
end
end
local function table_len(t)
-- Return length (<100) of a numbered table to replace #t which is
-- documented to not work if t is accessed via mw.loadData().
for i = 1, 100 do
if t[i] == nil then
return i - 1
end
end
end
local function wanted_category(catkey, catsort, want_warning)
-- Return message category if it is wanted in current namespace,
-- otherwise return ''.
local cat
local title = mw.title.getCurrentTitle()
if title then
local nsdefault = '0' -- default namespace: '0' = article; '0,10' = article and template
local namespace = title.namespace
for _, v in ipairs(split(config.nscat or nsdefault, ',')) do
if namespace == tonumber(v) then
cat = text_code.all_categories[want_warning and 'warning' or catkey]
if catsort and catsort ~= '' and cat:sub(-2) == ']]' then
cat = cat:sub(1, -3) .. '|' .. mw.text.nowiki(usub(catsort, 1, 20)) .. ']]'
end
break
end
end
end
return cat or ''
end
local function message(parms, mcode, is_warning)
-- Return wikitext for an error message, including category if specified
-- for the message type.
-- mcode = numbered table specifying the message:
-- mcode[1] = 'cvt_xxx' (string used as a key to get message info)
-- mcode[2] = 'parm1' (string to replace '$1' if any in message)
-- mcode[3] = 'parm2' (string to replace '$2' if any in message)
-- mcode[4] = 'parm3' (string to replace '$3' if any in message)
local msg
if type(mcode) == 'table' then
if mcode[1] == 'cvt_no_output' then
-- Some errors should cause convert to output an empty string,
-- for example, for an optional field in an infobox.
return ''
end
msg = text_code.all_messages[mcode[1]]
end
parms.have_problem = true
local function subparm(fmt, ...)
local rep = {}
for i, v in ipairs({...}) do
rep['$' .. i] = v
end
return (fmt:gsub('$%d+', rep))
end
if msg then
local parts = {}
local regex, replace = msg.regex, msg.replace
for i = 1, 3 do
local limit = 40
local s = mcode[i + 1]
if s then
if regex and replace then
s = s:gsub(regex, replace)
limit = nil -- allow long "should be" messages
end
-- Escape user input so it does not break the message.
-- To avoid tags (like {{convert|1<math>23</math>|m}}) breaking
-- the mouseover title, any strip marker starting with char(127) is
-- replaced with '...' (text not needing i18n).
local append
local pos = s:find(string.char(127), 1, true)
if pos then
append = '...'
s = s:sub(1, pos - 1)
end
if limit and ulen(s) > limit then
s = usub(s, 1, limit)
append = '...'
end
s = mw.text.nowiki(s) .. (append or '')
else
s = '?'
end
parts['$' .. i] = s
end
local function ispreview()
-- Return true if a prominent message should be shown.
if parms.test == 'preview' or parms.test == 'nopreview' then
-- For testing, can preview a real message or simulate a preview
-- when running automated tests.
return parms.test == 'preview'
end
local success, revid = pcall(function ()
return (parms.frame):preprocess('{{REVISIONID}}') end)
return success and (revid == '')
end
local want_warning = is_warning and
not config.warnings and -- show unobtrusive warnings if config.warnings not configured
not msg.nowarn -- but use msg settings, not standard warning, if specified
local title = string.gsub(msg[1] or 'Missing message', '$%d+', parts)
local text = want_warning and '*' or msg[2] or 'Missing message'
local cat = wanted_category(msg[3], mcode[2], want_warning)
local anchor = msg[4] or ''
local fmtkey = ispreview() and 'cvt_format_preview' or
(want_warning and 'cvt_format2' or msg.format or 'cvt_format')
local fmt = text_code.all_messages[fmtkey] or 'convert: bug'
return subparm(fmt, title:gsub('"', '"'), text, cat, anchor)
end
return 'Convert internal error: unknown message'
end
function add_warning(parms, level, key, text1, text2) -- for forward declaration above
-- If enabled, add a warning that will be displayed after the convert result.
-- A higher level is more verbose: more kinds of warnings are displayed.
-- To reduce output noise, only the first warning is displayed.
if level <= (tonumber(config.warnings) or 1) then
if parms.warnings == nil then
parms.warnings = message(parms, { key, text1, text2 }, true)
end
end
end
local function spell_number(parms, inout, number, numerator, denominator)
-- Return result of spelling (number, numerator, denominator), or
-- return nil if spelling is not available or not supported for given text.
-- Examples (each value must be a string or nil):
-- number numerator denominator output
-- ------ --------- ----------- -------------------
-- "1.23" nil nil one point two three
-- "1" "2" "3" one and two thirds
-- nil "2" "3" two thirds
if not speller then
local function get_speller(module)
return require(module).spell_number
end
local success
success, speller = pcall(get_speller, spell_module)
if not success or type(speller) ~= 'function' then
add_warning(parms, 1, 'cvt_no_spell', 'spell')
return nil
end
end
local case
if parms.spell_upper == inout then
case = true
parms.spell_upper = nil -- only uppercase first word in a multiple unit
end
local sp = not parms.opt_sp_us
local adj = parms.opt_adjectival
return speller(number, numerator, denominator, case, sp, adj)
end
------------------------------------------------------------------------
-- BEGIN: Code required only for built-in units.
-- LATER: If need much more code, move to another module to simplify this module.
local function speed_of_sound(altitude)
-- This is for the Mach built-in unit of speed.
-- Return speed of sound in metres per second at given altitude in feet.
-- If no altitude given, use default (zero altitude = sea level).
-- Table gives speed of sound in miles per hour at various altitudes:
-- altitude = -17,499 to 402,499 feet
-- mach_table[a + 4] = s where
-- a = (altitude / 5000) rounded to nearest integer (-3 to 80)
-- s = speed of sound (mph) at that altitude
-- LATER: Should calculate result from an interpolation between the next
-- lower and higher altitudes in table, rather than rounding to nearest.
-- From: http://www.aerospaceweb.org/question/atmosphere/q0112.shtml
local mach_table = { -- a =
799.5, 787.0, 774.2, 761.207051, -- -3 to 0
748.0, 734.6, 721.0, 707.0, 692.8, 678.3, 663.5, 660.1, 660.1, 660.1, -- 1 to 10
660.1, 660.1, 660.1, 662.0, 664.3, 666.5, 668.9, 671.1, 673.4, 675.6, -- 11 to 20
677.9, 683.7, 689.9, 696.0, 702.1, 708.1, 714.0, 719.9, 725.8, 731.6, -- 21 to 30
737.3, 737.7, 737.7, 736.2, 730.5, 724.6, 718.8, 712.9, 707.0, 701.0, -- 31 to 40
695.0, 688.9, 682.8, 676.6, 670.4, 664.1, 657.8, 652.9, 648.3, 643.7, -- 41 to 50
639.1, 634.4, 629.6, 624.8, 620.0, 615.2, 613.2, 613.2, 613.2, 613.5, -- 51 to 60
614.4, 615.3, 616.7, 619.8, 623.4, 629.7, 635.0, 641.1, 650.6, 660.0, -- 61 to 70
672.5, 674.3, 676.1, 677.9, 679.7, 681.5, 683.3, 685.1, 686.8, 688.6, -- 71 to 80
}
altitude = altitude or 0
local a = (altitude < 0) and -altitude or altitude
a = floor(a / 5000 + 0.5)
if altitude < 0 then
a = -a
end
if a < -3 then
a = -3
elseif a > 80 then
a = 80
end
return mach_table[a + 4] * 0.44704 -- mph converted to m/s
end
-- END: Code required only for built-in units.
------------------------------------------------------------------------
local function add_style(parms, class)
-- Add selected template style to parms if not already present.
parms.templatestyles = parms.templatestyles or {}
if not parms.templatestyles[class] then
parms.templatestyles[class] = parms.frame:extensionTag({
name = 'templatestyles', args = { src = text_code.titles[class] }
})
end
end
local function get_styles(parms)
-- Return string of required template styles, empty if none.
if parms.templatestyles then
local t = {}
for _, v in pairs(parms.templatestyles) do
table.insert(t, v)
end
return table.concat(t)
end
return ''
end
local function get_range(word)
-- Return a range (string or table) corresponding to word (like "to"),
-- or return nil if not a range word.
local ranges = text_code.ranges
return ranges.types[word] or ranges.types[ranges.aliases[word]]
end
local function check_mismatch(unit1, unit2)
-- If unit1 cannot be converted to unit2, return an error message table.
-- This allows conversion between units of the same type, and between
-- Nm (normally torque) and ftlb (energy), as in gun-related articles.
-- This works because Nm is the base unit (scale = 1) for both the
-- primary type (torque), and the alternate type (energy, where Nm = J).
-- A match occurs if the primary types are the same, or if unit1 matches
-- the alternate type of unit2, and vice versa. That provides a whitelist
-- of which conversions are permitted between normally incompatible types.
if unit1.utype == unit2.utype or
(unit1.utype == unit2.alttype and unit1.alttype == unit2.utype) then
return nil
end
return { 'cvt_mismatch', unit1.utype, unit2.utype }
end
local function override_from(out_table, in_table, fields)
-- Copy the specified fields from in_table to out_table, but do not
-- copy nil fields (keep any corresponding field in out_table).
for _, field in ipairs(fields) do
if in_table[field] then
out_table[field] = in_table[field]
end
end
end
local function shallow_copy(t)
-- Return a shallow copy of table t.
-- Do not need the features and overhead of the Scribunto mw.clone().
local result = {}
for k, v in pairs(t) do
result[k] = v
end
return result
end
local unit_mt = {
-- Metatable to get missing values for a unit that does not accept SI prefixes.
-- Warning: The boolean value 'false' is returned for any missing field
-- so __index is not called twice for the same field in a given unit.
__index = function (self, key)
local value
if key == 'name1' or key == 'sym_us' then
value = self.symbol
elseif key == 'name2' then
value = self.name1 .. plural_suffix
elseif key == 'name1_us' then
value = self.name1
if not rawget(self, 'name2_us') then
-- If name1_us is 'foot', do not make name2_us by appending plural_suffix.
self.name2_us = self.name2
end
elseif key == 'name2_us' then
local raw1_us = rawget(self, 'name1_us')
if raw1_us then
value = raw1_us .. plural_suffix
else
value = self.name2
end
elseif key == 'link' then
value = self.name1
else
value = false
end
rawset(self, key, value)
return value
end
}
local function prefixed_name(unit, name, index)
-- Return unit name with SI prefix inserted at correct position.
-- index = 1 (name1), 2 (name2), 3 (name1_us), 4 (name2_us).
-- The position is a byte (not character) index, so use Lua's sub().
local pos = rawget(unit, 'prefix_position')
if type(pos) == 'string' then
pos = tonumber(split(pos, ',')[index])
end
if pos then
return name:sub(1, pos - 1) .. unit.si_name .. name:sub(pos)
end
return unit.si_name .. name
end
local unit_prefixed_mt = {
-- Metatable to get missing values for a unit that accepts SI prefixes.
-- Before use, fields si_name, si_prefix must be defined.
-- The unit must define _symbol, _name1 and
-- may define _sym_us, _name1_us, _name2_us
-- (_sym_us, _name2_us may be defined for a language using sp=us
-- to refer to a variant unrelated to U.S. units).
__index = function (self, key)
local value
if key == 'symbol' then
value = self.si_prefix .. self._symbol
if value == 'l' then value = 'L' end
elseif key == 'sym_us' then
value = rawget(self, '_sym_us')
if value then
value = self.si_prefix .. value
else
value = self.symbol
end
elseif key == 'name1' then
value = prefixed_name(self, self._name1, 1)
elseif key == 'name2' then
value = rawget(self, '_name2')
if value then
value = prefixed_name(self, value, 2)
else
value = self.name1 .. plural_suffix
end
elseif key == 'name1_us' then
value = rawget(self, '_name1_us')
if value then
value = prefixed_name(self, value, 3)
else
value = self.name1
end
elseif key == 'name2_us' then
value = rawget(self, '_name2_us')
if value then
value = prefixed_name(self, value, 4)
elseif rawget(self, '_name1_us') then
value = self.name1_us .. plural_suffix
else
value = self.name2
end
elseif key == 'link' then
value = self.name1
else
value = false
end
rawset(self, key, value)
return value
end
}
local unit_per_mt = {
-- Metatable to get values for a per unit of form "x/y".
-- This is never called to determine a unit name or link because per units
-- are handled as a special case.
-- Similarly, the default output is handled elsewhere, and for a symbol
-- this is only called from get_default() for default_exceptions.
__index = function (self, key)
local value
if key == 'symbol' then
local per = self.per
local unit1, unit2 = per[1], per[2]
if unit1 then
value = unit1[key] .. '/' .. unit2[key]
else
value = '/' .. unit2[key]
end
elseif key == 'sym_us' then
value = self.symbol
elseif key == 'scale' then
local per = self.per
local unit1, unit2 = per[1], per[2]
value = (unit1 and unit1.scale or 1) * self.scalemultiplier / unit2.scale
else
value = false
end
rawset(self, key, value)
return value
end
}
local function make_per(unitcode, unit_table, ulookup)
-- Return true, t where t is a per unit with unit codes expanded to unit tables,
-- or return false, t where t is an error message table.
local result = {
unitcode = unitcode,
utype = unit_table.utype,
per = {}
}
override_from(result, unit_table, { 'invert', 'iscomplex', 'default', 'link', 'symbol', 'symlink' })
result.symbol_raw = (result.symbol or false) -- to distinguish between a defined exception and a metatable calculation
local prefix
for i, v in ipairs(unit_table.per) do
if i == 1 and v == '' then
-- First unit symbol can be empty; that gives a nil first unit table.
elseif i == 1 and text_code.currency[v] then
prefix = currency_text or v
else
local success, t = ulookup(v)
if not success then return false, t end
result.per[i] = t
end
end
local multiplier = unit_table.multiplier
if not result.utype then
-- Creating an automatic per unit.
local unit1 = result.per[1]
local utype = (unit1 and unit1.utype or prefix or '') .. '/' .. result.per[2].utype
local t = data_code.per_unit_fixups[utype]
if t then
if type(t) == 'table' then
utype = t.utype or utype
result.link = result.link or t.link
multiplier = multiplier or t.multiplier
else
utype = t
end
end
result.utype = utype
end
result.scalemultiplier = multiplier or 1
result.vprefix = prefix or false -- set to non-nil to avoid calling __index
return true, setmetatable(result, unit_per_mt)
end
local function lookup(parms, unitcode, what, utable, fails, depth)
-- Return true, t where t is a copy of the unit's converter table,
-- or return false, t where t is an error message table.
-- Parameter 'what' determines whether combination units are accepted:
-- 'no_combination' : single unit only
-- 'any_combination' : single unit or combination or output multiple
-- 'only_multiple' : single unit or output multiple only
-- Parameter unitcode is a symbol (like 'g'), with an optional SI prefix (like 'kg').
-- If, for example, 'kg' is in this table, that entry is used;
-- otherwise the prefix ('k') is applied to the base unit ('g').
-- If unitcode is a known combination code (and if allowed by what),
-- a table of output multiple unit tables is included in the result.
-- For compatibility with the old template, an underscore in a unitcode is
-- replaced with a space so usage like {{convert|350|board_feet}} works.
-- Wikignomes may also put two spaces or " " in combinations, so
-- replace underscore, " ", and multiple spaces with a single space.
utable = utable or parms.unittable or all_units
fails = fails or {}
depth = depth and depth + 1 or 1
if depth > 9 then
-- There are ways to mistakenly define units which result in infinite
-- recursion when lookup() is called. That gives a long delay and very
-- confusing error messages, so the depth parameter is used as a guard.
return false, { 'cvt_lookup', unitcode }
end
if unitcode == nil or unitcode == '' then
return false, { 'cvt_no_unit' }
end
unitcode = unitcode:gsub('_', ' '):gsub(' ', ' '):gsub(' +', ' ')
local function call_make_per(t)
return make_per(unitcode, t,
function (ucode) return lookup(parms, ucode, 'no_combination', utable, fails, depth) end
)
end
local t = utable[unitcode]
if t then
if t.shouldbe then
return false, { 'cvt_should_be', t.shouldbe }
end
if t.sp_us then
parms.opt_sp_us = true
end
local target = t.target -- nil, or unitcode is an alias for this target
if target then
local success, result = lookup(parms, target, what, utable, fails, depth)
if not success then return false, result end
override_from(result, t, { 'customary', 'default', 'link', 'symbol', 'symlink' })
local multiplier = t.multiplier
if multiplier then
result.multiplier = tostring(multiplier)
result.scale = result.scale * multiplier
end
return true, result
end
if t.per then
return call_make_per(t)
end
local combo = t.combination -- nil or a table of unitcodes
if combo then
local multiple = t.multiple
if what == 'no_combination' or (what == 'only_multiple' and not multiple) then
return false, { 'cvt_bad_unit', unitcode }
end
-- Recursively create a combination table containing the
-- converter table of each unitcode.
local result = { utype = t.utype, multiple = multiple, combination = {} }
local cvt = result.combination
for i, v in ipairs(combo) do
local success, t = lookup(parms, v, multiple and 'no_combination' or 'only_multiple', utable, fails, depth)
if not success then return false, t end
cvt[i] = t
end
return true, result
end
local result = shallow_copy(t)
result.unitcode = unitcode
if result.prefixes then
result.si_name = ''
result.si_prefix = ''
return true, setmetatable(result, unit_prefixed_mt)
end
return true, setmetatable(result, unit_mt)
end
local SIprefixes = text_code.SIprefixes
for plen = SIprefixes[1] or 2, 1, -1 do
-- Look for an SI prefix; should never occur with an alias.
-- Check for longer prefix first ('dam' is decametre).
-- SIprefixes[1] = prefix maximum #characters (as seen by mw.ustring.sub).
local prefix = usub(unitcode, 1, plen)
local si = SIprefixes[prefix]
if si then
local t = utable[usub(unitcode, plen+1)]
if t and t.prefixes then
local result = shallow_copy(t)
result.unitcode = unitcode
result.si_name = parms.opt_sp_us and si.name_us or si.name
result.si_prefix = si.prefix or prefix
result.scale = t.scale * 10 ^ (si.exponent * t.prefixes)
return true, setmetatable(result, unit_prefixed_mt)
end
end
end
-- Accept user-defined combinations like "acre+m2+ha" or "acre m2 ha" for output.
-- If '+' is used, each unit code can include a space, and any error is fatal.
-- If ' ' is used and if each space-separated word is a unit code, it is a combo,
-- but errors are not fatal so the unit code can be looked up as an extra unit.
local err_is_fatal
local combo = collection()
if unitcode:find('+', 1, true) then
err_is_fatal = true
for item in (unitcode .. '+'):gmatch('%s*(.-)%s*%+') do
if item ~= '' then
combo:add(item)
end
end
elseif unitcode:find('%s') then
for item in unitcode:gmatch('%S+') do
combo:add(item)
end
end
if combo.n > 1 then
local function lookup_combo()
if what == 'no_combination' or what == 'only_multiple' then
return false, { 'cvt_bad_unit', unitcode }
end
local result = { combination = {} }
local cvt = result.combination
for i, v in ipairs(combo) do
local success, t = lookup(parms, v, 'only_multiple', utable, fails, depth)
if not success then return false, t end
if i == 1 then
result.utype = t.utype
else
local mismatch = check_mismatch(result, t)
if mismatch then
return false, mismatch
end
end
cvt[i] = t
end
return true, result
end
local success, result = lookup_combo()
if success or err_is_fatal then
return success, result
end
end
-- Accept any unit with an engineering notation prefix like "e6cuft"
-- (million cubic feet), but not chained prefixes like "e3e6cuft",
-- and not if the unit is a combination or multiple,
-- and not if the unit has an offset or is a built-in.
-- Only en digits are accepted.
local exponent, baseunit = unitcode:match('^e(%d+)(.*)')
if exponent then
local engscale = text_code.eng_scales[exponent]
if engscale then
local success, result = lookup(parms, baseunit, 'no_combination', utable, fails, depth)
if success and not (result.offset or result.builtin or result.engscale) then
result.unitcode = unitcode -- 'e6cuft' not 'cuft'
result.defkey = unitcode -- key to lookup default exception
result.engscale = engscale
result.scale = result.scale * 10 ^ tonumber(exponent)
return true, result
end
end
end
-- Look for x/y; split on right-most slash to get scale correct (x/y/z is x/y per z).
local top, bottom = unitcode:match('^(.-)/([^/]+)$')
if top and not unitcode:find('e%d') then
-- If valid, create an automatic per unit for an "x/y" unit code.
-- The unitcode must not include extraneous spaces.
-- Engineering notation (apart from at start and which has been stripped before here),
-- is not supported so do not make a per unit if find text like 'e3' in unitcode.
local success, result = call_make_per({ per = {top, bottom} })
if success then
return true, result
end
end
if not parms.opt_ignore_error and not get_range(unitcode) then
-- Want the "what links here" list for the extra_module to show only cases
-- where an extra unit is used, so do not require it if invoked from {{val}}
-- or if looking up a range word which cannot be a unit.
if not extra_units then
local success, extra = pcall(function () return require(extra_module).extra_units end)
if success and type(extra) == 'table' then
extra_units = extra
end
end
if extra_units then
-- A unit in one data table might refer to a unit in the other table, so
-- switch between them, relying on fails or depth to terminate loops.
if not fails[unitcode] then
fails[unitcode] = true
local other = (utable == all_units) and extra_units or all_units
local success, result = lookup(parms, unitcode, what, other, fails, depth)
if success then
return true, result
end
end
end
end
if to_en_table then
-- At fawiki it is common to translate all digits so a unit like "km2" becomes "km۲".
local en_code = ustring.gsub(unitcode, '%d', to_en_table)
if en_code ~= unitcode then
return lookup(parms, en_code, what, utable, fails, depth)
end
end
return false, { 'cvt_unknown', unitcode }
end
local function valid_number(num)
-- Return true if num is a valid number.
-- In Scribunto (different from some standard Lua), when expressed as a string,
-- overflow or other problems are indicated with text like "inf" or "nan"
-- which are regarded as invalid here (each contains "n").
if type(num) == 'number' and tostring(num):find('n', 1, true) == nil then
return true
end
end
local function hyphenated(name, parts)
-- Return a hyphenated form of given name (for adjectival usage).
-- The name may be linked and the target of the link must not be changed.
-- Hypothetical examples:
-- [[long ton|ton]] → [[long ton|ton]] (no change)
-- [[tonne|long ton]] → [[tonne|long-ton]]
-- [[metric ton|long ton]] → [[metric ton|long-ton]]
-- [[long ton]] → [[long ton|long-ton]]
-- Input can also have multiple links in a single name like:
-- [[United States customary units|U.S.]] [[US gallon|gallon]]
-- [[mile]]s per [[United States customary units|U.S.]] [[quart]]
-- [[long ton]]s per [[short ton]]
-- Assume that links cannot be nested (never like "[[abc[[def]]ghi]]").
-- This uses a simple and efficient procedure that works for most cases.
-- Some units (if used) would require more, and can later think about
-- adding a method to handle exceptions.
-- The procedure is to replace each space with a hyphen, but
-- not a space after ')' [for "(pre-1954 US) nautical mile"], and
-- not spaces immediately before '(' or in '(...)' [for cases like
-- "British thermal unit (ISO)" and "Calorie (International Steam Table)"].
if name:find(' ', 1, true) then
if parts then
local pos
if name:sub(1, 1) == '(' then
pos = name:find(')', 1, true)
if pos then
return name:sub(1, pos+1) .. name:sub(pos+2):gsub(' ', '-')
end
elseif name:sub(-1) == ')' then
pos = name:find('(', 1, true)
if pos then
return name:sub(1, pos-2):gsub(' ', '-') .. name:sub(pos-1)
end
end
return name:gsub(' ', '-')
end
parts = collection()
for before, item, after in name:gmatch('([^[]*)(%[%[[^[]*%]%])([^[]*)') do
if item:find(' ', 1, true) then
local prefix
local plen = item:find('|', 1, true)
if plen then
prefix = item:sub(1, plen)
item = item:sub(plen + 1, -3)
else
prefix = item:sub(1, -3) .. '|'
item = item:sub(3, -3)
end
item = prefix .. hyphenated(item, parts) .. ']]'
end
parts:add(before:gsub(' ', '-') .. item .. after:gsub(' ', '-'))
end
if parts.n == 0 then
-- No link like "[[...]]" was found in the original name.
parts:add(hyphenated(name, parts))
end
return table.concat(parts)
end
return name
end
local function hyphenated_maybe(parms, want_name, sep, id, inout)
-- Return s, f where
-- s = id, possibly modified
-- f = true if hyphenated
-- Possible modifications: hyphenate; prepend '-'; append mid text.
if id == nil or id == '' then
return ''
end
local mid = (inout == (parms.opt_flip and 'out' or 'in')) and parms.mid or ''
if want_name then
if parms.opt_adjectival then
return '-' .. hyphenated(id) .. mid, true
end
if parms.opt_add_s and id:sub(-1) ~= 's' then
id = id .. 's' -- for nowiki
end
end
return sep .. id .. mid
end
local function use_minus(text)
-- Return text with Unicode minus instead of '-', if present.
if text:sub(1, 1) == '-' then
return MINUS .. text:sub(2)
end
return text
end
local function digit_groups(parms, text, method)
-- Return a numbered table of groups of digits (left-to-right, in local language).
-- Parameter method is a number or nil:
-- 3 for 3-digit grouping (default), or
-- 2 for 3-then-2 grouping (only for digits before decimal mark).
local len_right
local len_left = text:find('.', 1, true)
if len_left then
len_right = #text - len_left
len_left = len_left - 1
else
len_left = #text
end
local twos = method == 2 and len_left > 5
local groups = collection()
local run = len_left
local n
if run < 4 or (run == 4 and parms.opt_comma5) then
if parms.opt_gaps then
n = run
else
n = #text
end
elseif twos then
n = run % 2 == 0 and 1 or 2
else
n = run % 3 == 0 and 3 or run % 3
end
while run > 0 do
groups:add(n)
run = run - n
n = (twos and run > 3) and 2 or 3
end
if len_right then
if groups.n == 0 then
groups:add(0)
end
if parms.opt_gaps and len_right > 3 then
local want4 = not parms.opt_gaps3 -- true gives no gap before trailing single digit
local isfirst = true
run = len_right
while run > 0 do
n = (want4 and run == 4) and 4 or (run > 3 and 3 or run)
if isfirst then
isfirst = false
groups[groups.n] = groups[groups.n] + 1 + n
else
groups:add(n)
end
run = run - n
end
else
groups[groups.n] = groups[groups.n] + 1 + len_right
end
end
local pos = 1
for i, length in ipairs(groups) do
groups[i] = from_en(text:sub(pos, pos + length - 1))
pos = pos + length
end
return groups
end
function with_separator(parms, text) -- for forward declaration above
-- Input text is a number in en digits with optional '.' decimal mark.
-- Return an equivalent, formatted for display:
-- with a custom decimal mark instead of '.', if wanted
-- with thousand separators inserted, if wanted
-- digits in local language
-- The given text is like '123' or '123.' or '12345.6789'.
-- The text has no sign (caller inserts that later, if necessary).
-- When using gaps, they are inserted before and after the decimal mark.
-- Separators are inserted only before the decimal mark.
-- A trailing dot (as in '123.') is removed because their use appears to
-- be accidental, and such a number should be shown as '123' or '123.0'.
-- It is useful for convert to suppress the dot so, for example, '4000.'
-- is a simple way of indicating that all the digits are significant.
if text:sub(-1) == '.' then
text = text:sub(1, -2)
end
if #text < 4 or parms.opt_nocomma or numsep == '' then
return from_en(text)
end
local groups = digit_groups(parms, text, group_method)
if parms.opt_gaps then
if groups.n <= 1 then
return groups[1] or ''
end
local nowrap = '<span style="white-space: nowrap">'
local gap = '<span style="margin-left: 0.25em">'
local close = '</span>'
return nowrap .. groups[1] .. gap .. table.concat(groups, close .. gap, 2, groups.n) .. close .. close
end
return table.concat(groups, numsep)
end
-- An input value like 1.23e12 is displayed using scientific notation (1.23×10¹²).
-- That also makes the output use scientific notation, except for small values.
-- In addition, very small or very large output values use scientific notation.
-- Use format(fmtpower, significand, '10', exponent) where each argument is a string.
local fmtpower = '%s<span style="margin:0 .15em 0 .25em">×</span>%s<sup>%s</sup>'
local function with_exponent(parms, show, exponent)
-- Return wikitext to display the implied value in scientific notation.
-- Input uses en digits; output uses digits in local language.
return format(fmtpower, with_separator(parms, show), from_en('10'), use_minus(from_en(tostring(exponent))))
end
local function make_sigfig(value, sigfig)
-- Return show, exponent that are equivalent to the result of
-- converting the number 'value' (where value >= 0) to a string,
-- rounded to 'sigfig' significant figures.
-- The returned items are:
-- show: a string of digits; no sign and no dot;
-- there is an implied dot before show.
-- exponent: a number (an integer) to shift the implied dot.
-- Resulting value = tonumber('.' .. show) * 10^exponent.
-- Examples:
-- make_sigfig(23.456, 3) returns '235', 2 (.235 * 10^2).
-- make_sigfig(0.0023456, 3) returns '235', -2 (.235 * 10^-2).
-- make_sigfig(0, 3) returns '000', 1 (.000 * 10^1).
if sigfig <= 0 then
sigfig = 1
elseif sigfig > maxsigfig then
sigfig = maxsigfig
end
if value == 0 then
return string.rep('0', sigfig), 1
end
local exp, fracpart = math.modf(log10(value))
if fracpart >= 0 then
fracpart = fracpart - 1
exp = exp + 1
end
local digits = format('%.0f', 10^(fracpart + sigfig))
if #digits > sigfig then
-- Overflow (for sigfig=3: like 0.9999 rounding to "1000"; need "100").
digits = digits:sub(1, sigfig)
exp = exp + 1
end
assert(#digits == sigfig, 'Bug: rounded number has wrong length')
return digits, exp
end
-- Fraction output format.
local fracfmt = {
{ -- Like {{frac}} (fraction slash).
'<span class="frac" role="math">{SIGN}<span class="num">{NUM}</span>⁄<span class="den">{DEN}</span></span>', -- 1/2
'<span class="frac" role="math">{SIGN}{WHOLE}<span class="sr-only">+</span><span class="num">{NUM}</span>⁄<span class="den">{DEN}</span></span>', -- 1+2/3
style = 'frac',
},
{ -- Like {{sfrac}} (stacked fraction, that is, horizontal bar).
'<span class="sfrac tion" role="math">{SIGN}<span class="num">{NUM}</span><span class="sr-only">/</span><span class="den">{DEN}</span></span>', -- 1//2
'<span class="sfrac" role="math">{SIGN}{WHOLE}<span class="sr-only">+</span><span class="tion"><span class="num">{NUM}</span><span class="sr-only">/</span><span class="den">{DEN}</span></span></span>', -- 1+2//3
style = 'sfrac',
},
}
local function format_fraction(parms, inout, negative, wholestr, numstr, denstr, do_spell, style)
-- Return wikitext for a fraction, possibly spelled.
-- Inputs use en digits and have no sign; output uses digits in local language.
local wikitext
if not style then
style = parms.opt_fraction_horizontal and 2 or 1
end
if wholestr == '' then
wholestr = nil
end
local substitute = {
SIGN = negative and MINUS or '',
WHOLE = wholestr and with_separator(parms, wholestr),
NUM = from_en(numstr),
DEN = from_en(denstr),
}
wikitext = fracfmt[style][wholestr and 2 or 1]:gsub('{(%u+)}', substitute)
if do_spell then
if negative then
if wholestr then
wholestr = '-' .. wholestr
else
numstr = '-' .. numstr
end
end
local s = spell_number(parms, inout, wholestr, numstr, denstr)
if s then
return s
end
end
add_style(parms, fracfmt[style].style)
return wikitext
end
local function format_number(parms, show, exponent, isnegative)
-- Parameter show is a string or a table containing strings.
-- Each string is a formatted number in en digits and optional '.' decimal mark.
-- A table represents a fraction: integer, numerator, denominator;
-- if a table is given, exponent must be nil.
-- Return t where t is a table with fields:
-- show = wikitext formatted to display implied value
-- (digits in local language)
-- is_scientific = true if show uses scientific notation
-- clean = unformatted show (possibly adjusted and with inserted '.')
-- (en digits)
-- sign = '' or MINUS
-- exponent = exponent (possibly adjusted)
-- The clean and exponent fields can be used to calculate the
-- rounded absolute value, if needed.
--
-- The value implied by the arguments is found from:
-- exponent is nil; and
-- show is a string of digits (no sign), with an optional dot;
-- show = '123.4' is value 123.4, '1234' is value 1234.0;
-- or:
-- exponent is an integer indicating where dot should be;
-- show is a string of digits (no sign and no dot);
-- there is an implied dot before show;
-- show does not start with '0';
-- show = '1234', exponent = 3 is value 0.1234*10^3 = 123.4.
--
-- The formatted result:
-- * Is for an output value and is spelled if wanted and possible.
-- * Includes a Unicode minus if isnegative and not spelled.
-- * Uses a custom decimal mark, if wanted.
-- * Has digits grouped where necessary, if wanted.
-- * Uses scientific notation if requested, or for very small or large values
-- (which forces result to not be spelled).
-- * Has no more than maxsigfig significant digits
-- (same as old template and {{#expr}}).
local xhi, xlo -- these control when scientific notation (exponent) is used
if parms.opt_scientific then
xhi, xlo = 4, 2 -- default for output if input uses e-notation
elseif parms.opt_scientific_always then
xhi, xlo = 0, 0 -- always use scientific notation (experimental)
else
xhi, xlo = 10, 4 -- default
end
local sign = isnegative and MINUS or ''
local maxlen = maxsigfig
local tfrac
if type(show) == 'table' then
tfrac = show
show = tfrac.wholestr
assert(exponent == nil, 'Bug: exponent given with fraction')
end
if not tfrac and not exponent then
local integer, dot, decimals = show:match('^(%d*)(%.?)(.*)')
if integer == '0' or integer == '' then
local zeros, figs = decimals:match('^(0*)([^0]?.*)')
if #figs == 0 then
if #zeros > maxlen then
show = '0.' .. zeros:sub(1, maxlen)
end
elseif #zeros >= xlo then
show = figs
exponent = -#zeros
elseif #figs > maxlen then
show = '0.' .. zeros .. figs:sub(1, maxlen)
end
elseif #integer >= xhi then
show = integer .. decimals
exponent = #integer
else
maxlen = maxlen + #dot
if #show > maxlen then
show = show:sub(1, maxlen)
end
end
end
if exponent then
local function zeros(n)
return string.rep('0', n)
end
if #show > maxlen then
show = show:sub(1, maxlen)
end
if exponent > xhi or exponent <= -xlo or (exponent == xhi and show ~= '1' .. zeros(xhi - 1)) then
-- When xhi, xlo = 10, 4 (the default), scientific notation is used if the
-- rounded value satisfies: value >= 1e9 or value < 1e-4 (1e9 = 0.1e10),
-- except if show is '1000000000' (1e9), for example:
-- {{convert|1000000000|m|m|sigfig=10}} → 1,000,000,000 metres (1,000,000,000 m)
local significand
if #show > 1 then
significand = show:sub(1, 1) .. '.' .. show:sub(2)
else
significand = show
end
return {
clean = '.' .. show,
exponent = exponent,
sign = sign,
show = sign .. with_exponent(parms, significand, exponent-1),
is_scientific = true,
}
end
if exponent >= #show then
show = show .. zeros(exponent - #show) -- result has no dot
elseif exponent <= 0 then
show = '0.' .. zeros(-exponent) .. show
else
show = show:sub(1, exponent) .. '.' .. show:sub(exponent+1)
end
end
local formatted_show
if tfrac then
show = tostring(tfrac.value) -- to set clean in returned table
formatted_show = format_fraction(parms, 'out', isnegative, tfrac.wholestr, tfrac.numstr, tfrac.denstr, parms.opt_spell_out)
else
if isnegative and show:match('^0.?0*$') then
sign = '' -- don't show minus if result is negative but rounds to zero
end
formatted_show = sign .. with_separator(parms, show)
if parms.opt_spell_out then
formatted_show = spell_number(parms, 'out', sign .. show) or formatted_show
end
end
return {
clean = show,
sign = sign,
show = formatted_show,
is_scientific = false, -- to avoid calling __index
}
end
local function extract_fraction(parms, text, negative)
-- If text represents a fraction, return
-- value, altvalue, show, denominator
-- where
-- value is a number (value of the fraction in argument text)
-- altvalue is an alternate interpretation of any fraction for the hands
-- unit where "12.1+3/4" means 12 hands 1.75 inches
-- show is a string (formatted text for display of an input value,
-- and is spelled if wanted and possible)
-- denominator is value of the denominator in the fraction
-- Otherwise, return nil.
-- Input uses en digits and '.' decimal mark (input has been translated).
-- Output uses digits in local language and local decimal mark, if any.
------------------------------------------------------------------------
-- Originally this function accepted x+y/z where x, y, z were any valid
-- numbers, possibly with a sign. For example '1.23e+2+1.2/2.4' = 123.5,
-- and '2-3/8' = 1.625. However, such usages were found to be errors or
-- misunderstandings, so since August 2014 the following restrictions apply:
-- x (if present) is an integer or has a single digit after decimal mark
-- y and z are unsigned integers
-- e-notation is not accepted
-- The overall number can start with '+' or '-' (so '12+3/4' and '+12+3/4'
-- and '-12-3/4' are valid).
-- Any leading negative sign is removed by the caller, so only inputs
-- like the following are accepted here (may have whitespace):
-- negative = false false true (there was a leading '-')
-- text = '2/3' '+2/3' '2/3'
-- text = '1+2/3' '+1+2/3' '1-2/3'
-- text = '12.3+1/2' '+12.3+1/2' '12.3-1/2'
-- Values like '12.3+1/2' are accepted, but are intended only for use
-- with the hands unit (not worth adding code to enforce that).
------------------------------------------------------------------------
local leading_plus, prefix, numstr, slashes, denstr =
text:match('^%s*(%+?)%s*(.-)%s*(%d+)%s*(/+)%s*(%d+)%s*$')
if not leading_plus then
-- Accept a single U+2044 fraction slash because that may be pasted.
leading_plus, prefix, numstr, denstr =
text:match('^%s*(%+?)%s*(.-)%s*(%d+)%s*⁄%s*(%d+)%s*$')
slashes = '/'
end
local numerator = tonumber(numstr)
local denominator = tonumber(denstr)
if numerator == nil or denominator == nil or (negative and leading_plus ~= '') then
return nil
end
local whole, wholestr
if prefix == '' then
wholestr = ''
whole = 0
else
-- Any prefix must be like '12+' or '12-' (whole number and fraction sign);
-- '12.3+' and '12.3-' are also accepted (single digit after decimal point)
-- because '12.3+1/2 hands' is valid (12 hands 3½ inches).
local num1, num2, frac_sign = prefix:match('^(%d+)(%.?%d?)%s*([+%-])$')
if num1 == nil then return nil end
if num2 == '' then -- num2 must be '' or like '.1' but not '.' or '.12'
wholestr = num1
else
if #num2 ~= 2 then return nil end
wholestr = num1 .. num2
end
if frac_sign ~= (negative and '-' or '+') then return nil end
whole = tonumber(wholestr)
if whole == nil then return nil end
end
local value = whole + numerator / denominator
if not valid_number(value) then return nil end
local altvalue = whole + numerator / (denominator * 10)
local style = #slashes -- kludge: 1 or 2 slashes can be used to select style
if style > 2 then style = 2 end
local wikitext = format_fraction(parms, 'in', negative, leading_plus .. wholestr, numstr, denstr, parms.opt_spell_in, style)
return value, altvalue, wikitext, denominator
end
local function extract_number(parms, text, another, no_fraction)
-- Return true, info if can extract a number from text,
-- where info is a table with the result,
-- or return false, t where t is an error message table.
-- Input can use en digits or digits in local language and can
-- have references at the end. Accepting references is intended
-- for use in infoboxes with a field for a value passed to convert.
-- Parameter another = true if the expected value is not the first.
-- Before processing, the input text is cleaned:
-- * Any thousand separators (valid or not) are removed.
-- * Any sign is replaced with '-' (if negative) or '' (otherwise).
-- That replaces Unicode minus with '-'.
-- If successful, the returned info table contains named fields:
-- value = a valid number
-- altvalue = a valid number, usually same as value but different
-- if fraction used (for hands unit)
-- singular = true if value is 1 or -1 (to use singular form of units)
-- clean = cleaned text with any separators and sign removed
-- (en digits and '.' decimal mark)
-- show = text formatted for output, possibly with ref strip markers
-- (digits in local language and custom decimal mark)
-- The resulting show:
-- * Is for an input value and is spelled if wanted and possible.
-- * Has a rounded value, if wanted.
-- * Has digits grouped where necessary, if wanted.
-- * If negative, a Unicode minus is used; otherwise the sign is
-- '+' (if the input text used '+'), or is '' (if no sign in input).
text = strip(text or '')
local reference
local pos = text:find('\127', 1, true)
if pos then
local before = text:sub(1, pos - 1)
local remainder = text:sub(pos)
local refs = {}
while #remainder > 0 do
local ref, spaces
ref, spaces, remainder = remainder:match('^(\127[^\127]*UNIQ[^\127]*%-ref[^\127]*\127)(%s*)(.*)')
if ref then
table.insert(refs, ref)
else
refs = {}
break
end
end
if #refs > 0 then
text = strip(before)
reference = table.concat(refs)
end
end
local clean = to_en(text, parms)
if clean == '' then
return false, { another and 'cvt_no_num2' or 'cvt_no_num' }
end
local isnegative, propersign = false, '' -- most common case
local singular, show, denominator
local value = tonumber(clean)
local altvalue
if value then
local sign = clean:sub(1, 1)
if sign == '+' or sign == '-' then
propersign = (sign == '+') and '+' or MINUS
clean = clean:sub(2)
end
if value < 0 then
isnegative = true
value = -value
end
else
local valstr
for _, prefix in ipairs({ '-', MINUS, '−' }) do
-- Including '-' sets isnegative in case input is a fraction like '-2-3/4'.
local plen = #prefix
if clean:sub(1, plen) == prefix then
valstr = clean:sub(plen + 1)
if valstr:match('^%s') then -- "- 1" is invalid but "-1 - 1/2" is ok
return false, { 'cvt_bad_num', text }
end
break
end
end
if valstr then
isnegative = true
propersign = MINUS
clean = valstr
value = tonumber(clean)
end
if value == nil then
if not no_fraction then
value, altvalue, show, denominator = extract_fraction(parms, clean, isnegative)
end
if value == nil then
return false, { 'cvt_bad_num', text }
end
if value <= 1 then
singular = true -- for example, "½ mile" or "one half mile" (singular unit)
end
end
end
if not valid_number(value) then -- for example, "1e310" may overflow
return false, { 'cvt_invalid_num' }
end
if show == nil then
-- clean is a non-empty string with no spaces, and does not represent a fraction,
-- and value = tonumber(clean) is a number >= 0.
-- If the input uses e-notation, show will be displayed using a power of ten, but
-- we use the number as given so it might not be normalized scientific notation.
-- The input value is spelled if specified so any e-notation is ignored;
-- that allows input like 2e6 to be spelled as "two million" which works
-- because the spell module converts '2e6' to '2000000' before spelling.
local function rounded(value, default, exponent)
local precision = parms.opt_ri
if precision then
local fmt = '%.' .. format('%d', precision) .. 'f'
local result = fmt:format(tonumber(value) + 2e-14) -- fudge for some common cases of bad rounding
if not exponent then
singular = (tonumber(result) == 1)
end
return result
end
return default
end
singular = (value == 1)
local scientific
local significand, exponent = clean:match('^([%d.]+)[Ee]([+%-]?%d+)')
if significand then
show = with_exponent(parms, rounded(significand, significand, exponent), exponent)
scientific = true
else
show = with_separator(parms, rounded(value, clean))
end
show = propersign .. show
if parms.opt_spell_in then
show = spell_number(parms, 'in', propersign .. rounded(value, clean)) or show
scientific = false
end
if scientific then
parms.opt_scientific = true
end
end
if isnegative and (value ~= 0) then
value = -value
altvalue = -(altvalue or value)
end
return true, {
value = value,
altvalue = altvalue or value,
singular = singular,
clean = clean,
show = show .. (reference or ''),
denominator = denominator,
}
end
local function get_number(text)
-- Return v, f where:
-- v = nil (text is not a number)
-- or
-- v = value of text (text is a number)
-- f = true if value is an integer
-- Input can use en digits or digits in local language or separators,
-- but no Unicode minus, and no fraction.
if text then
local number = tonumber(to_en(text))
if number then
local _, fracpart = math.modf(number)
return number, (fracpart == 0)
end
end
end
local function gcd(a, b)
-- Return the greatest common denominator for the given values,
-- which are known to be positive integers.
if a > b then
a, b = b, a
end
if a <= 0 then
return b
end
local r = b % a
if r <= 0 then
return a
end
if r == 1 then
return 1
end
return gcd(r, a)
end
local function fraction_table(value, denominator)
-- Return value as a string or a table:
-- * If result is a string, there is no fraction, and the result
-- is value formatted as a string of en digits.
-- * If result is a table, it represents a fraction with named fields:
-- wholestr, numstr, denstr (strings of en digits for integer, numerator, denominator).
-- The result is rounded to the nearest multiple of (1/denominator).
-- If the multiple is zero, no fraction is included.
-- No fraction is included if value is very large as the fraction would
-- be unhelpful, particularly if scientific notation is required.
-- Input value is a non-negative number.
-- Input denominator is a positive integer for the desired fraction.
if value <= 0 then
return '0'
end
if denominator <= 0 or value > 1e8 then
return format('%.2f', value)
end
local integer, decimals = math.modf(value)
local numerator = floor((decimals * denominator) +
0.5 + 2e-14) -- add fudge for some common cases of bad rounding
if numerator >= denominator then
integer = integer + 1
numerator = 0
end
local wholestr = tostring(integer)
if numerator > 0 then
local div = gcd(numerator, denominator)
if div > 1 then
numerator = numerator / div
denominator = denominator / div
end
return {
wholestr = (integer > 0) and wholestr or '',
numstr = tostring(numerator),
denstr = tostring(denominator),
value = value,
}
end
return wholestr
end
local function preunits(count, preunit1, preunit2)
-- If count is 1:
-- ignore preunit2
-- return p1
-- else:
-- preunit1 is used for preunit2 if the latter is empty
-- return p1, p2
-- where:
-- p1 is text to insert before the input unit
-- p2 is text to insert before the output unit
-- p1 or p2 may be nil to mean "no preunit"
-- Using '+' gives output like "5+ feet" (no space before, but space after).
local function withspace(text, wantboth)
-- Return text with space before and, if wantboth, after.
-- However, no space is added if there is a space or ' ' or '-'
-- at that position ('-' is for adjectival text).
-- There is also no space if text starts with '&'
-- (e.g. '°' would display a degree symbol with no preceding space).
local char = text:sub(1, 1)
if char == '&' then
return text -- an html entity can be used to specify the exact display
end
if not (char == ' ' or char == '-' or char == '+') then
text = ' ' .. text
end
if wantboth then
char = text:sub(-1, -1)
if not (char == ' ' or char == '-' or text:sub(-6, -1) == ' ') then
text = text .. ' '
end
end
return text
end
local PLUS = '+ '
preunit1 = preunit1 or ''
local trim1 = strip(preunit1)
if count == 1 then
if trim1 == '' then
return nil
end
if trim1 == '+' then
return PLUS
end
return withspace(preunit1, true)
end
preunit1 = withspace(preunit1)
preunit2 = preunit2 or ''
local trim2 = strip(preunit2)
if trim1 == '+' then
if trim2 == '' or trim2 == '+' then
return PLUS, PLUS
end
preunit1 = PLUS
end
if trim2 == '' then
if trim1 == '' then
return nil, nil
end
preunit2 = preunit1
elseif trim2 == '+' then
preunit2 = PLUS
elseif trim2 == ' ' then -- trick to make preunit2 empty
preunit2 = nil
else
preunit2 = withspace(preunit2)
end
return preunit1, preunit2
end
local function range_text(range, want_name, parms, before, after, inout, options)
-- Return before .. rtext .. after
-- where rtext is the text that separates two values in a range.
local rtext, adj_text, exception
options = options or {}
if type(range) == 'table' then
-- Table must specify range text for ('off' and 'on') or ('input' and 'output'),
-- and may specify range text for 'adj=on',
-- and may specify exception = true.
rtext = range[want_name and 'off' or 'on'] or
range[((inout == 'in') == (parms.opt_flip == true)) and 'output' or 'input']
adj_text = range['adj']
exception = range['exception']
else
rtext = range
end
if parms.opt_adjectival then
if want_name or (exception and parms.abbr_org == 'on') then
rtext = adj_text or rtext:gsub(' ', '-'):gsub(' ', '-')
end
end
if rtext == '–' and (options.spaced or after:sub(1, #MINUS) == MINUS) then
rtext = ' – '
end
return before .. rtext .. after
end
local function get_composite(parms, iparm, in_unit_table)
-- Look for a composite input unit. For example, {{convert|1|yd|2|ft|3|in}}
-- would result in a call to this function with
-- iparm = 3 (parms[iparm] = "2", just after the first unit)
-- in_unit_table = (unit table for "yd"; contains value 1 for number of yards)
-- Return true, iparm, unit where
-- iparm = index just after the composite units (7 in above example)
-- unit = composite unit table holding all input units,
-- or return true if no composite unit is present in parms,
-- or return false, t where t is an error message table.
local default, subinfo
local composite_units, count = { in_unit_table }, 1
local fixups = {}
local total = in_unit_table.valinfo[1].value
local subunit = in_unit_table
while subunit.subdivs do -- subdivs is nil or a table of allowed subdivisions
local subcode = strip(parms[iparm+1])
local subdiv = subunit.subdivs[subcode] or subunit.subdivs[(all_units[subcode] or {}).target]
if not subdiv then
break
end
local success
success, subunit = lookup(parms, subcode, 'no_combination')
if not success then return false, subunit end -- should never occur
success, subinfo = extract_number(parms, parms[iparm])
if not success then return false, subinfo end
iparm = iparm + 2
subunit.inout = 'in'
subunit.valinfo = { subinfo }
-- Recalculate total as a number of subdivisions.
-- subdiv[1] = number of subdivisions per previous unit (integer > 1).
total = total * subdiv[1] + subinfo.value
if not default then -- set by the first subdiv with a default defined
default = subdiv.default
end
count = count + 1
composite_units[count] = subunit
if subdiv.unit or subdiv.name then
fixups[count] = { unit = subdiv.unit, name = subdiv.name, valinfo = subunit.valinfo }
end
end
if count == 1 then
return true -- no error and no composite unit
end
for i, fixup in pairs(fixups) do
local unit = fixup.unit
local name = fixup.name
if not unit or (count > 2 and name) then
composite_units[i].fixed_name = name
else
local success, alternate = lookup(parms, unit, 'no_combination')
if not success then return false, alternate end -- should never occur
alternate.inout = 'in'
alternate.valinfo = fixup.valinfo
composite_units[i] = alternate
end
end
return true, iparm, {
utype = in_unit_table.utype,
scale = subunit.scale, -- scale of last (least significant) unit
valinfo = { { value = total, clean = subinfo.clean, denominator = subinfo.denominator } },
composite = composite_units,
default = default or in_unit_table.default
}
end
local function translate_parms(parms, kv_pairs)
-- Update fields in parms by translating each key:value in kv_pairs to terms
-- used by this module (may involve translating from local language to English).
-- Also, checks are performed which may display warnings, if enabled.
-- Return true if successful or return false, t where t is an error message table.
currency_text = nil -- local testing can hold module in memory; must clear globals
if kv_pairs.adj and kv_pairs.sing then
-- For enwiki (before translation), warn if attempt to use adj and sing
-- as the latter is a deprecated alias for the former.
if kv_pairs.adj ~= kv_pairs.sing and kv_pairs.sing ~= '' then
add_warning(parms, 1, 'cvt_unknown_option', 'sing=' .. kv_pairs.sing)
end
kv_pairs.sing = nil
end
kv_pairs.comma = kv_pairs.comma or config.comma -- for plwiki who want default comma=5
for loc_name, loc_value in pairs(kv_pairs) do
local en_name = text_code.en_option_name[loc_name]
if en_name then
local en_value = text_code.en_option_value[en_name]
if en_value == 'INTEGER' then -- altitude_ft, altitude_m, frac, sigfig
en_value = nil
if loc_value == '' then
add_warning(parms, 2, 'cvt_empty_option', loc_name)
else
local minimum
local number, is_integer = get_number(loc_value)
if en_name == 'sigfig' then
minimum = 1
elseif en_name == 'frac' then
minimum = 2
if number and number < 0 then
parms.opt_fraction_horizontal = true
number = -number
end
else
minimum = -1e6
end
if number and is_integer and number >= minimum then
en_value = number
else
local m
if en_name == 'frac' then
m = 'cvt_bad_frac'
elseif en_name == 'sigfig' then
m = 'cvt_bad_sigfig'
else
m = 'cvt_bad_altitude'
end
add_warning(parms, 1, m, loc_name .. '=' .. loc_value)
end
end
elseif en_value == 'TEXT' then -- $, input, qid, qual, stylein, styleout, tracking
en_value = loc_value ~= '' and loc_value or nil -- accept non-empty user text with no validation
if not en_value and (en_name == '$' or en_name == 'qid' or en_name == 'qual') then
add_warning(parms, 2, 'cvt_empty_option', loc_name)
elseif en_name == '$' then
-- Value should be a single character like "€" for the euro currency symbol, but anything is accepted.
currency_text = (loc_value == 'euro') and '€' or loc_value
elseif en_name == 'input' then
-- May have something like {{convert|input=}} (empty input) if source is an infobox
-- with optional fields. In that case, want to output nothing rather than an error.
parms.input_text = loc_value -- keep input because parms.input is nil if loc_value == ''
end
else
en_value = en_value[loc_value]
if en_value and en_value:sub(-1) == '?' then
en_value = en_value:sub(1, -2)
add_warning(parms, -1, 'cvt_deprecated', loc_name .. '=' .. loc_value)
end
if en_value == nil then
if loc_value == '' then
add_warning(parms, 2, 'cvt_empty_option', loc_name)
else
add_warning(parms, 1, 'cvt_unknown_option', loc_name .. '=' .. loc_value)
end
elseif en_value == '' then
en_value = nil -- an ignored option like adj=off
elseif type(en_value) == 'string' and en_value:sub(1, 4) == 'opt_' then
for _, v in ipairs(split(en_value, ',')) do
local lhs, rhs = v:match('^(.-)=(.+)$')
if rhs then
parms[lhs] = tonumber(rhs) or rhs
else
parms[v] = true
end
end
en_value = nil
end
end
parms[en_name] = en_value
else
add_warning(parms, 1, 'cvt_unknown_option', loc_name .. '=' .. loc_value)
end
end
local abbr_entered = parms.abbr
local cfg_abbr = config.abbr
if cfg_abbr then
-- Don't warn if invalid because every convert would show that warning.
if cfg_abbr == 'on always' then
parms.abbr = 'on'
elseif cfg_abbr == 'off always' then
parms.abbr = 'off'
elseif parms.abbr == nil then
if cfg_abbr == 'on default' then
parms.abbr = 'on'
elseif cfg_abbr == 'off default' then
parms.abbr = 'off'
end
end
end
if parms.abbr then
if parms.abbr == 'unit' then
parms.abbr = 'on'
parms.number_word = true
end
parms.abbr_org = parms.abbr -- original abbr, before any flip
elseif parms.opt_hand_hh then
parms.abbr_org = 'on'
parms.abbr = 'on'
else
parms.abbr = 'out' -- default is to abbreviate output only (use symbol, not name)
end
if parms.opt_order_out then
-- Disable options that do not work in a useful way with order=out.
parms.opt_flip = nil -- override adj=flip
parms.opt_spell_in = nil
parms.opt_spell_out = nil
parms.opt_spell_upper = nil
end
if parms.opt_spell_out and not abbr_entered then
parms.abbr = 'off' -- should show unit name when spelling the output value
end
if parms.opt_flip then
local function swap_in_out(option)
local value = parms[option]
if value == 'in' then
parms[option] = 'out'
elseif value == 'out' then
parms[option] = 'in'
end
end
swap_in_out('abbr')
swap_in_out('lk')
if parms.opt_spell_in and not parms.opt_spell_out then
-- For simplicity, and because it does not appear to be needed,
-- user cannot set an option to spell the output only.
parms.opt_spell_in = nil
parms.opt_spell_out = true
end
end
if parms.opt_spell_upper then
parms.spell_upper = parms.opt_flip and 'out' or 'in'
end
if parms.opt_table or parms.opt_tablecen then
if abbr_entered == nil and parms.lk == nil then
parms.opt_values = true
end
parms.table_align = parms.opt_table and 'right' or 'center'
end
if parms.table_align or parms.opt_sortable_on then
parms.need_table_or_sort = true
end
local disp_joins = text_code.disp_joins
local default_joins = disp_joins['b']
parms.join_between = default_joins[3] or '; '
local disp = parms.disp
if disp == nil then -- special case for the most common setting
parms.joins = default_joins
elseif disp == 'x' then
-- Later, parms.joins is set from the input parameters.
else
-- Old template does this.
local abbr = parms.abbr
if disp == 'slash' then
if abbr_entered == nil then
disp = 'slash-nbsp'
elseif abbr == 'in' or abbr == 'out' then
disp = 'slash-sp'
else
disp = 'slash-nosp'
end
elseif disp == 'sqbr' then
if abbr == 'on' then
disp = 'sqbr-nbsp'
else
disp = 'sqbr-sp'
end
end
parms.joins = disp_joins[disp] or default_joins
parms.join_between = parms.joins[3] or parms.join_between
parms.wantname = parms.joins.wantname
end
if (en_default and not parms.opt_lang_local and (parms[1] or ''):find('%d')) or parms.opt_lang_en then
from_en_table = nil
end
if en_default and from_en_table then
-- For hiwiki: localized symbol/name is defined with the US symbol/name field,
-- and is used if output uses localized numbers.
parms.opt_sp_us = true
end
return true
end
local function get_values(parms)
-- If successful, update parms and return true, v, i where
-- v = table of input values
-- i = index to next entry in parms after those processed here
-- or return false, t where t is an error message table.
local valinfo = collection() -- numbered table of input values
local range = collection() -- numbered table of range items (having, for example, 2 range items requires 3 input values)
local had_nocomma -- true if removed "nocomma" kludge from second parameter (like "tonocomma")
local parm2 = strip(parms[2])
if parm2 and parm2:sub(-7, -1) == 'nocomma' then
parms[2] = strip(parm2:sub(1, -8))
parms.opt_nocomma = true
had_nocomma = true
end
local function extractor(i)
-- If the parameter is not a value, try unpacking it as a range ("1-23" for "1 to 23").
-- However, "-1-2/3" is a negative fraction (-1⅔), so it must be extracted first.
-- Do not unpack a parameter if it is like "3-1/2" which is sometimes incorrectly
-- used instead of "3+1/2" (and which should not be interpreted as "3 to ½").
-- Unpacked items are inserted into the parms table.
-- The tail recursion allows combinations like "1x2 to 3x4".
local valstr = strip(parms[i]) -- trim so any '-' as a negative sign will be at start
local success, result = extract_number(parms, valstr, i > 1)
if not success and valstr and i < 20 then -- check i to limit abuse
local lhs, sep, rhs = valstr:match('^(%S+)%s+(%S+)%s+(%S.*)')
if lhs and not (sep == '-' and rhs:match('/')) then
if sep:find('%d') then
return success, result -- to reject {{convert|1 234 567|m}} with a decent message (en only)
end
parms[i] = rhs
table.insert(parms, i, sep)
table.insert(parms, i, lhs)
return extractor(i)
end
if not valstr:match('%-.*/') then
for _, sep in ipairs(text_code.ranges.words) do
local start, stop = valstr:find(sep, 2, true) -- start at 2 to skip any negative sign for range '-'
if start then
parms[i] = valstr:sub(stop + 1)
table.insert(parms, i, sep)
table.insert(parms, i, valstr:sub(1, start - 1))
return extractor(i)
end
end
end
end
return success, result
end
local i = 1
local is_change
while true do
local success, info = extractor(i) -- need to set parms.opt_nocomma before calling this
if not success then return false, info end
i = i + 1
if is_change then
info.is_change = true -- value is after "±" and so is a change (significant for range like {{convert|5|±|5|°C}})
is_change = nil
end
valinfo:add(info)
local range_item = get_range(strip(parms[i]))
if not range_item then
break
end
i = i + 1
range:add(range_item)
if type(range_item) == 'table' then
-- For range "x", if append unit to some values, append it to all.
parms.in_range_x = parms.in_range_x or range_item.in_range_x
parms.out_range_x = parms.out_range_x or range_item.out_range_x
parms.abbr_range_x = parms.abbr_range_x or range_item.abbr_range_x
is_change = range_item.is_range_change
end
end
if range.n > 0 then
if range.n > 30 then -- limit abuse, although 4 is a more likely upper limit
return false, { 'cvt_invalid_num' } -- misleading message but it will do
end
parms.range = range
elseif had_nocomma then
return false, { 'cvt_unknown', parm2 }
end
return true, valinfo, i
end
local function simple_get_values(parms)
-- If input is like "{{convert|valid_value|valid_unit|...}}",
-- return true, i, in_unit, in_unit_table
-- i = index in parms of what follows valid_unit, if anything.
-- The valid_value is not negative and does not use a fraction, and
-- no options requiring further processing of the input are used.
-- Otherwise, return nothing or return false, parm1 for caller to interpret.
-- Testing shows this function is successful for 96% of converts in articles,
-- and that on average it speeds up converts by 8%.
local clean = to_en(strip(parms[1] or ''), parms)
if parms.opt_ri or parms.opt_spell_in or #clean > 10 or not clean:match('^[0-9.]+$') then
return false, clean
end
local value = tonumber(clean)
if not value then return end
local info = {
value = value,
altvalue = value,
singular = (value == 1),
clean = clean,
show = with_separator(parms, clean),
}
local in_unit = strip(parms[2])
local success, in_unit_table = lookup(parms, in_unit, 'no_combination')
if not success then return end
in_unit_table.valinfo = { info }
return true, 3, in_unit, in_unit_table
end
local function wikidata_call(parms, operation, ...)
-- Return true, s where s is the result of a Wikidata operation,
-- or return false, t where t is an error message table.
local function worker(...)
wikidata_code = wikidata_code or require(wikidata_module)
wikidata_data = wikidata_data or mw.loadData(wikidata_data_module)
return wikidata_code[operation](wikidata_data, ...)
end
local success, status, result = pcall(worker, ...)
if success then
return status, result
end
if parms.opt_sortable_debug then
-- Use debug=yes to crash if an error while accessing Wikidata.
error('Error accessing Wikidata: ' .. status, 0)
end
return false, { 'cvt_wd_fail' }
end
local function get_parms(parms, args)
-- If successful, update parms and return true, unit where
-- parms is a table of all arguments passed to the template
-- converted to named arguments, and
-- unit is the input unit table;
-- or return false, t where t is an error message table.
-- For special processing (not a convert), can also return
-- true, wikitext where wikitext is the final result.
-- The returned input unit table may be for a fake unit using the specified
-- unit code as the symbol and name, and with bad_mcode = message code table.
-- MediaWiki removes leading and trailing whitespace from the values of
-- named arguments. However, the values of numbered arguments include any
-- whitespace entered in the template, and whitespace is used by some
-- parameters (example: the numbered parameters associated with "disp=x").
local kv_pairs = {} -- table of input key:value pairs where key is a name; needed because cannot iterate parms and add new fields to it
for k, v in pairs(args) do
if type(k) == 'number' or k == 'test' then -- parameter "test" is reserved for testing and is not translated
parms[k] = v
else
kv_pairs[k] = v
end
end
if parms.test == 'wikidata' then
local ulookup = function (ucode)
-- Use empty table for parms so it does not accumulate results when used repeatedly.
return lookup({}, ucode, 'no_combination')
end
return wikidata_call(parms, '_listunits', ulookup)
end
local success, msg = translate_parms(parms, kv_pairs)
if not success then return false, msg end
if parms.input then
success, msg = wikidata_call(parms, '_adjustparameters', parms, 1)
if not success then return false, msg end
end
local success, i, in_unit, in_unit_table = simple_get_values(parms)
if not success then
if type(i) == 'string' and i:match('^NNN+$') then
-- Some infoboxes have examples like {{convert|NNN|m}} (3 or more "N").
-- Output an empty string for these.
return false, { 'cvt_no_output' }
end
local valinfo
success, valinfo, i = get_values(parms)
if not success then return false, valinfo end
in_unit = strip(parms[i])
i = i + 1
success, in_unit_table = lookup(parms, in_unit, 'no_combination')
if not success then
in_unit = in_unit or ''
if parms.opt_ignore_error then -- display given unit code with no error (for use with {{val}})
in_unit_table = '' -- suppress error message and prevent processing of output unit
end
in_unit_table = setmetatable({
symbol = in_unit, name2 = in_unit, utype = in_unit,
scale = 1, default = '', defkey = '', linkey = '',
bad_mcode = in_unit_table }, unit_mt)
end
in_unit_table.valinfo = valinfo
end
if parms.test == 'msg' then
-- Am testing the messages produced when no output unit is specified, and
-- the input unit has a missing or invalid default.
-- Set two units for testing that.
-- LATER: Remove this code.
if in_unit == 'chain' then
in_unit_table.default = nil -- no default
elseif in_unit == 'rd' then
in_unit_table.default = "ft!X!m" -- an invalid expression
end
end
in_unit_table.inout = 'in' -- this is an input unit
if not parms.range then
local success, inext, composite_unit = get_composite(parms, i, in_unit_table)
if not success then return false, inext end
if composite_unit then
in_unit_table = composite_unit
i = inext
end
end
if in_unit_table.builtin == 'mach' then
-- As with old template, a number following Mach as the input unit is the altitude.
-- That is deprecated: should use altitude_ft=NUMBER or altitude_m=NUMBER.
local success, info
success = tonumber(parms[i]) -- this will often work and will give correct result for values like 2e4 without forcing output scientific notation
if success then
info = { value = success }
else
success, info = extract_number(parms, parms[i], false, true)
end
if success then
i = i + 1
in_unit_table.altitude = info.value
end
end
local word = strip(parms[i])
i = i + 1
local precision, is_bad_precision
local function set_precision(text)
local number, is_integer = get_number(text)
if number then
if is_integer then
precision = number
else
precision = text
is_bad_precision = true
end
return true -- text was used for precision, good or bad
end
end
if word and not set_precision(word) then
parms.out_unit = parms.out_unit or word
if set_precision(strip(parms[i])) then
i = i + 1
end
end
if parms.opt_adj_mid then
word = parms[i]
i = i + 1
if word then -- mid-text words
if word:sub(1, 1) == '-' then
parms.mid = word
else
parms.mid = ' ' .. word
end
end
end
if parms.opt_one_preunit then
parms[parms.opt_flip and 'preunit2' or 'preunit1'] = preunits(1, parms[i])
i = i + 1
end
if parms.disp == 'x' then
-- Following is reasonably compatible with the old template.
local first = parms[i] or ''
local second = parms[i+1] or ''
i = i + 2
if strip(first) == '' then -- user can enter ' ' rather than ' ' to avoid the default
first = ' [ ' .. first
second = ' ]' .. second
end
parms.joins = { first, second }
elseif parms.opt_two_preunits then
local p1, p2 = preunits(2, parms[i], parms[i+1])
i = i + 2
if parms.preunit1 then
-- To simplify documentation, allow unlikely use of adj=pre with disp=preunit
-- (however, an output unit must be specified with adj=pre and with disp=preunit).
parms.preunit1 = parms.preunit1 .. p1
parms.preunit2 = p2
else
parms.preunit1, parms.preunit2 = p1, p2
end
end
if precision == nil then
if set_precision(strip(parms[i])) then
i = i + 1
end
end
if is_bad_precision then
add_warning(parms, 1, 'cvt_bad_prec', precision)
else
parms.precision = precision
end
for j = i, i + 3 do
local parm = parms[j] -- warn if find a non-empty extraneous parameter
if parm and parm:match('%S') then
add_warning(parms, 1, 'cvt_unknown_option', parm)
break
end
end
return true, in_unit_table
end
local function record_default_precision(parms, out_current, precision)
-- If necessary, adjust parameters and return a possibly adjusted precision.
-- When converting a range of values where a default precision is required,
-- that default is calculated for each value because the result sometimes
-- depends on the precise input and output values. This function may cause
-- the entire convert process to be repeated in order to ensure that the
-- same default precision is used for each individual convert.
-- If that were not done, a range like 1000 to 1000.4 may give poor results
-- because the first output could be heavily rounded, while the second is not.
-- For range 1000.4 to 1000, this function can give the second convert the
-- same default precision that was used for the first.
if not parms.opt_round_each then
local maxdef = out_current.max_default_precision
if maxdef then
if maxdef < precision then
parms.do_convert_again = true
out_current.max_default_precision = precision
else
precision = out_current.max_default_precision
end
else
out_current.max_default_precision = precision
end
end
return precision
end
local function default_precision(parms, invalue, inclean, denominator, outvalue, in_current, out_current, extra)
-- Return a default value for precision (an integer like 2, 0, -2).
-- If denominator is not nil, it is the value of the denominator in inclean.
-- Code follows procedures used in old template.
local fudge = 1e-14 -- {{Order of magnitude}} adds this, so we do too
local prec, minprec, adjust
local subunit_ignore_trailing_zero
local subunit_more_precision -- kludge for "in" used in input like "|2|ft|6|in"
local composite = in_current.composite
if composite then
subunit_ignore_trailing_zero = true -- input "|2|st|10|lb" has precision 0, not -1
if composite[#composite].exception == 'subunit_more_precision' then
subunit_more_precision = true -- do not use standard precision with input like "|2|ft|6|in"
end
end
if denominator and denominator > 0 then
prec = math.max(log10(denominator), 1)
else
-- Count digits after decimal mark, handling cases like '12.345e6'.
local exponent
local integer, dot, decimals, expstr = inclean:match('^(%d*)(%.?)(%d*)(.*)')
local e = expstr:sub(1, 1)
if e == 'e' or e == 'E' then
exponent = tonumber(expstr:sub(2))
end
if dot == '' then
prec = subunit_ignore_trailing_zero and 0 or -integer:match('0*$'):len()
else
prec = #decimals
end
if exponent then
-- So '1230' and '1.23e3' both give prec = -1, and '0.00123' and '1.23e-3' give 5.
prec = prec - exponent
end
end
if in_current.istemperature and out_current.istemperature then
-- Converting between common temperatures (°C, °F, °R, K); not keVT.
-- Kelvin value can be almost zero, or small but negative due to precision problems.
-- Also, an input value like -300 C (below absolute zero) gives negative kelvins.
-- Calculate minimum precision from absolute value.
adjust = 0
local kelvin = abs((invalue - in_current.offset) * in_current.scale)
if kelvin < 1e-8 then -- assume nonzero due to input or calculation precision problem
minprec = 2
else
minprec = 2 - floor(log10(kelvin) + fudge) -- 3 sigfigs in kelvin
end
else
if invalue == 0 or outvalue <= 0 then
-- We are never called with a negative outvalue, but it might be zero.
-- This is special-cased to avoid calculation exceptions.
return record_default_precision(parms, out_current, 0)
end
if out_current.exception == 'integer_more_precision' and floor(invalue) == invalue then
-- With certain output units that sometimes give poor results
-- with default rounding, use more precision when the input
-- value is equal to an integer. An example of a poor result
-- is when input 50 gives a smaller output than input 49.5.
-- Experiment shows this helps, but it does not eliminate all
-- surprises because it is not clear whether "50" should be
-- interpreted as "from 45 to 55" or "from 49.5 to 50.5".
adjust = -log10(in_current.scale)
elseif subunit_more_precision then
-- Conversion like "{{convert|6|ft|1|in|cm}}" (where subunit is "in")
-- has a non-standard adjust value, to give more output precision.
adjust = log10(out_current.scale) + 2
else
adjust = log10(abs(invalue / outvalue))
end
adjust = adjust + log10(2)
-- Ensure that the output has at least two significant figures.
minprec = 1 - floor(log10(outvalue) + fudge)
end
if extra then
adjust = extra.adjust or adjust
minprec = extra.minprec or minprec
end
return record_default_precision(parms, out_current, math.max(floor(prec + adjust), minprec))
end
local function convert(parms, invalue, info, in_current, out_current)
-- Convert given input value from one unit to another.
-- Return output_value (a number) if a simple convert, or
-- return f, t where
-- f = true, t = table of information with results, or
-- f = false, t = error message table.
local inscale = in_current.scale
local outscale = out_current.scale
if not in_current.iscomplex and not out_current.iscomplex then
return invalue * (inscale / outscale) -- minimize overhead for most common case
end
if in_current.invert or out_current.invert then
-- Inverted units, such as inverse length, inverse time, or
-- fuel efficiency. Built-in units do not have invert set.
if (in_current.invert or 1) * (out_current.invert or 1) < 0 then
return 1 / (invalue * inscale * outscale)
end
return invalue * (inscale / outscale)
elseif in_current.offset then
-- Temperature (there are no built-ins for this type of unit).
if info.is_change then
return invalue * (inscale / outscale)
end
return (invalue - in_current.offset) * (inscale / outscale) + out_current.offset
else
-- Built-in unit.
local in_builtin = in_current.builtin
local out_builtin = out_current.builtin
if in_builtin and out_builtin then
if in_builtin == out_builtin then
return invalue
end
-- There are no cases (yet) where need to convert from one
-- built-in unit to another, so this should never occur.
return false, { 'cvt_bug_convert' }
end
if in_builtin == 'mach' or out_builtin == 'mach' then
-- Should check that only one altitude is given but am planning to remove
-- in_current.altitude (which can only occur when Mach is the input unit),
-- and out_current.altitude cannot occur.
local alt = parms.altitude_ft or in_current.altitude
if not alt and parms.altitude_m then
alt = parms.altitude_m / 0.3048 -- 1 ft = 0.3048 m
end
local spd = speed_of_sound(alt)
if in_builtin == 'mach' then
inscale = spd
return invalue * (inscale / outscale)
end
outscale = spd
local adjust = 0.1 / inscale
return true, {
outvalue = invalue * (inscale / outscale),
adjust = log10(adjust) + log10(2),
}
elseif in_builtin == 'hand' then
-- 1 hand = 4 inches; 1.2 hands = 6 inches.
-- Decimals of a hand are only defined for the first digit, and
-- the first fractional digit should be a number of inches (1, 2 or 3).
-- However, this code interprets the entire fractional part as the number
-- of inches / 10 (so 1.75 inches would be 0.175 hands).
-- A value like 12.3 hands is exactly 12*4 + 3 inches; base default precision on that.
local integer, fracpart = math.modf(invalue)
local inch_value = 4 * integer + 10 * fracpart -- equivalent number of inches
local factor = inscale / outscale
if factor == 4 then
-- Am converting to inches: show exact result, and use "inches" not "in" by default.
if parms.abbr_org == nil then
out_current.usename = true
end
local show = format('%g', abs(inch_value)) -- show and clean are unsigned
if not show:find('e', 1, true) then
return true, {
invalue = inch_value,
outvalue = inch_value,
clean = show,
show = show,
}
end
end
local outvalue = (integer + 2.5 * fracpart) * factor
local fracstr = info.clean:match('%.(.*)') or ''
local fmt
if fracstr == '' then
fmt = '%.0f'
else
fmt = '%.' .. format('%d', #fracstr - 1) .. 'f'
end
return true, {
invalue = inch_value,
clean = format(fmt, inch_value),
outvalue = outvalue,
minprec = 0,
}
end
end
return false, { 'cvt_bug_convert' } -- should never occur
end
local function user_style(parms, i)
-- Return text for a user-specified style for a table cell, or '' if none,
-- given i = 1 (input style) or 2 (output style).
local style = parms[(i == 1) and 'stylein' or 'styleout']
if style then
style = style:gsub('"', '')
if style ~= '' then
if style:sub(-1) ~= ';' then
style = style .. ';'
end
return style
end
end
return ''
end
local function make_table_or_sort(parms, invalue, info, in_current, scaled_top)
-- Set options to handle output for a table or a sort key, or both.
-- The text sort key is based on the value resulting from converting
-- the input to a fake base unit with scale = 1, and other properties
-- required for a conversion derived from the input unit.
-- For other modules, return the sort key in a hidden span element, and
-- the scaled value used to generate the sort key.
-- If scaled_top is set, it is the scaled value of the numerator of a per unit
-- to be combined with this unit (the denominator) to make the sort key.
-- Scaling only works with units that convert with a factor (not temperature).
local sortkey, scaled_value
if parms.opt_sortable_on then
local base = { -- a fake unit with enough fields for a valid convert
scale = 1,
invert = in_current.invert and 1,
iscomplex = in_current.iscomplex,
offset = in_current.offset and 0,
}
local outvalue, extra = convert(parms, invalue, info, in_current, base)
if extra then
outvalue = extra.outvalue
end
if in_current.istemperature then
-- Have converted to kelvin; assume numbers close to zero have a
-- rounding error and should be zero.
if abs(outvalue) < 1e-12 then
outvalue = 0
end
end
if scaled_top and outvalue ~= 0 then
outvalue = scaled_top / outvalue
end
scaled_value = outvalue
if not valid_number(outvalue) then
if outvalue < 0 then
sortkey = '1000000000000000000'
else
sortkey = '9000000000000000000'
end
elseif outvalue == 0 then
sortkey = '5000000000000000000'
else
local mag = floor(log10(abs(outvalue)) + 1e-14)
local prefix
if outvalue > 0 then
prefix = 7000 + mag
else
prefix = 2999 - mag
outvalue = outvalue + 10^(mag+1)
end
sortkey = format('%d', prefix) .. format('%015.0f', floor(outvalue * 10^(14-mag)))
end
end
local sortspan
if sortkey and not parms.table_align then
sortspan = parms.opt_sortable_debug and
'<span data-sort-value="' .. sortkey .. '♠"><span style="border:1px solid">' .. sortkey .. '♠</span></span>' or
'<span data-sort-value="' .. sortkey .. '♠"></span>'
parms.join_before = sortspan
end
if parms.table_align then
local sort
if sortkey then
sort = ' data-sort-value="' .. sortkey .. '"'
if parms.opt_sortable_debug then
parms.join_before = '<span style="border:1px solid">' .. sortkey .. '</span>'
end
else
sort = ''
end
local style = 'style="text-align:' .. parms.table_align .. ';'
local joins = {}
for i = 1, 2 do
joins[i] = (i == 1 and '' or '\n|') .. style .. user_style(parms, i) .. '"' .. sort .. '|'
end
parms.table_joins = joins
end
return sortspan, scaled_value
end
local cvt_to_hand
local function cvtround(parms, info, in_current, out_current)
-- Return true, t where t is a table with the conversion results; fields:
-- show = rounded, formatted string with the result of converting value in info,
-- using the rounding specified in parms.
-- singular = true if result (after rounding and ignoring any negative sign)
-- is "1", or like "1.00", or is a fraction with value < 1;
-- (and more fields shown below, and a calculated 'absvalue' field).
-- or return false, t where t is an error message table.
-- Input info.clean uses en digits (it has been translated, if necessary).
-- Output show uses en or non-en digits as appropriate, or can be spelled.
if out_current.builtin == 'hand' then
return cvt_to_hand(parms, info, in_current, out_current)
end
local invalue = in_current.builtin == 'hand' and info.altvalue or info.value
local outvalue, extra = convert(parms, invalue, info, in_current, out_current)
if parms.need_table_or_sort then
parms.need_table_or_sort = nil -- process using first input value only
make_table_or_sort(parms, invalue, info, in_current)
end
if extra then
if not outvalue then return false, extra end
invalue = extra.invalue or invalue
outvalue = extra.outvalue
end
if not valid_number(outvalue) then
return false, { 'cvt_invalid_num' }
end
local isnegative
if outvalue < 0 then
isnegative = true
outvalue = -outvalue
end
local precision, show, exponent
local denominator = out_current.frac
if denominator then
show = fraction_table(outvalue, denominator)
else
precision = parms.precision
if not precision then
if parms.sigfig then
show, exponent = make_sigfig(outvalue, parms.sigfig)
elseif parms.opt_round then
local n = parms.opt_round
if n == 0.5 then
local integer, fracpart = math.modf(floor(2 * outvalue + 0.5) / 2)
if fracpart == 0 then
show = format('%.0f', integer)
else
show = format('%.1f', integer + fracpart)
end
else
show = format('%.0f', floor((outvalue / n) + 0.5) * n)
end
elseif in_current.builtin == 'mach' then
local sigfig = info.clean:gsub('^[0.]+', ''):gsub('%.', ''):len() + 1
show, exponent = make_sigfig(outvalue, sigfig)
else
local inclean = info.clean
if extra then
inclean = extra.clean or inclean
show = extra.show
end
if not show then
precision = default_precision(parms, invalue, inclean, info.denominator, outvalue, in_current, out_current, extra)
end
end
end
end
if precision then
if precision >= 0 then
local fudge
if precision <= 8 then
-- Add a fudge to handle common cases of bad rounding due to inability
-- to precisely represent some values. This makes the following work:
-- {{convert|-100.1|C|K}} and {{convert|5555000|um|m|2}}.
-- Old template uses #expr round, which invokes PHP round().
-- LATER: Investigate how PHP round() works.
fudge = 2e-14
else
fudge = 0
end
local fmt = '%.' .. format('%d', precision) .. 'f'
local success
success, show = pcall(format, fmt, outvalue + fudge)
if not success then
return false, { 'cvt_big_prec', tostring(precision) }
end
else
precision = -precision -- #digits to zero (in addition to any digits after dot)
local shift = 10 ^ precision
show = format('%.0f', outvalue/shift)
if show ~= '0' then
exponent = #show + precision
end
end
end
local t = format_number(parms, show, exponent, isnegative)
if type(show) == 'string' then
-- Set singular using match because on some systems 0.99999999999999999 is 1.0.
if exponent then
t.singular = (exponent == 1 and show:match('^10*$'))
else
t.singular = (show == '1' or show:match('^1%.0*$'))
end
else
t.fraction_table = show
t.singular = (outvalue <= 1) -- cannot have 'fraction == 1', but if it were possible it would be singular
end
t.raw_absvalue = outvalue -- absolute value before rounding
return true, setmetatable(t, {
__index = function (self, key)
if key == 'absvalue' then
-- Calculate absolute value after rounding, if needed.
local clean, exponent = rawget(self, 'clean'), rawget(self, 'exponent')
local value = tonumber(clean) -- absolute value (any negative sign has been ignored)
if exponent then
value = value * 10^exponent
end
rawset(self, key, value)
return value
end
end })
end
function cvt_to_hand(parms, info, in_current, out_current)
-- Convert input to hands, inches.
-- Return true, t where t is a table with the conversion results;
-- or return false, t where t is an error message table.
if parms.abbr_org == nil then
out_current.usename = true -- default is to show name not symbol
end
local precision = parms.precision
local frac = out_current.frac
if not frac and precision and precision > 1 then
frac = (precision == 2) and 2 or 4
end
local out_next = out_current.out_next
if out_next then
-- Use magic knowledge to determine whether the next unit is inches without requiring i18n.
-- The following ensures that when the output combination "hand in" is used, the inches
-- value is rounded to match the hands value. Also, displaying say "61½" instead of 61.5
-- is better as 61.5 implies the value is not 61.4.
if out_next.exception == 'subunit_more_precision' then
out_next.frac = frac
end
end
-- Convert to inches; calculate hands from that.
local dummy_unit_table = { scale = out_current.scale / 4, frac = frac }
local success, outinfo = cvtround(parms, info, in_current, dummy_unit_table)
if not success then return false, outinfo end
local tfrac = outinfo.fraction_table
local inches = outinfo.raw_absvalue
if tfrac then
inches = floor(inches) -- integer part only; fraction added later
else
inches = floor(inches + 0.5) -- a hands measurement never shows decimals of an inch
end
local hands, inches = divide(inches, 4)
outinfo.absvalue = hands + inches/4 -- supposed to be the absolute rounded value, but this is close enough
local inchstr = tostring(inches) -- '0', '1', '2' or '3'
if precision and precision <= 0 then -- using negative or 0 for precision rounds to nearest hand
hands = floor(outinfo.raw_absvalue/4 + 0.5)
inchstr = ''
elseif tfrac then
-- Always show an integer before fraction (like "15.0½") because "15½" means 15-and-a-half hands.
inchstr = numdot .. format_fraction(parms, 'out', false, inchstr, tfrac.numstr, tfrac.denstr)
else
inchstr = numdot .. from_en(inchstr)
end
outinfo.show = outinfo.sign .. with_separator(parms, format('%.0f', hands)) .. inchstr
return true, outinfo
end
local function evaluate_condition(value, condition)
-- Return true or false from applying a conditional expression to value,
-- or throw an error if invalid.
-- A very limited set of expressions is supported:
-- v < 9
-- v * 9 < 9
-- where
-- 'v' is replaced with value
-- 9 is any number (as defined by Lua tonumber)
-- only en digits are accepted
-- '<' can also be '<=' or '>' or '>='
-- In addition, the following form is supported:
-- LHS and RHS
-- where
-- LHS, RHS = any of above expressions.
local function compare(value, text)
local arithop, factor, compop, limit = text:match('^%s*v%s*([*]?)(.-)([<>]=?)(.*)$')
if arithop == nil then
error('Invalid default expression', 0)
elseif arithop == '*' then
factor = tonumber(factor)
if factor == nil then
error('Invalid default expression', 0)
end
value = value * factor
end
limit = tonumber(limit)
if limit == nil then
error('Invalid default expression', 0)
end
if compop == '<' then
return value < limit
elseif compop == '<=' then
return value <= limit
elseif compop == '>' then
return value > limit
elseif compop == '>=' then
return value >= limit
end
error('Invalid default expression', 0) -- should not occur
end
local lhs, rhs = condition:match('^(.-%W)and(%W.*)')
if lhs == nil then
return compare(value, condition)
end
return compare(value, lhs) and compare(value, rhs)
end
local function get_default(value, unit_table)
-- Return true, s where s = name of unit's default output unit,
-- or return false, t where t is an error message table.
-- Some units have a default that depends on the input value
-- (the first value if a range of values is used).
-- If '!' is in the default, the first bang-delimited field is an
-- expression that uses 'v' to represent the input value.
-- Example: 'v < 120 ! small ! big ! suffix' (suffix is optional)
-- evaluates 'v < 120' as a boolean with result
-- 'smallsuffix' if (value < 120), or 'bigsuffix' otherwise.
-- Input must use en digits and '.' decimal mark.
local default = data_code.default_exceptions[unit_table.defkey or unit_table.symbol] or unit_table.default
if not default then
local per = unit_table.per
if per then
local function a_default(v, u)
local success, ucode = get_default(v, u)
if not success then
return '?' -- an unlikely error has occurred; will cause lookup of default to fail
end
-- Attempt to use only the first unit if a combination or output multiple.
-- This is not bulletproof but should work for most cases.
-- Where it does not work, the convert will need to specify the wanted output unit.
local t = all_units[ucode]
if t then
local combo = t.combination
if combo then
-- For a multiple like ftin, the "first" unit (ft) is last in the combination.
local i = t.multiple and table_len(combo) or 1
ucode = combo[i]
end
else
-- Try for an automatically generated combination.
local item = ucode:match('^(.-)%+') or ucode:match('^(%S+)%s')
if all_units[item] then
return item
end
end
return ucode
end
local unit1, unit2 = per[1], per[2]
local def1 = (unit1 and a_default(value, unit1) or unit_table.vprefix or '')
local def2 = a_default(1, unit2) -- 1 because per unit of denominator
return true, def1 .. '/' .. def2
end
return false, { 'cvt_no_default', unit_table.symbol }
end
if default:find('!', 1, true) == nil then
return true, default
end
local t = split(default, '!')
if #t == 3 or #t == 4 then
local success, result = pcall(evaluate_condition, value, t[1])
if success then
default = result and t[2] or t[3]
if #t == 4 then
default = default .. t[4]
end
return true, default
end
end
return false, { 'cvt_bad_default', unit_table.symbol }
end
local linked_pages -- to record linked pages so will not link to the same page more than once
local function unlink(unit_table)
-- Forget that the given unit has previously been linked (if it has).
-- That is needed when processing a range of inputs or outputs when an id
-- for the first range value may have been evaluated, but only an id for
-- the last value is displayed, and that id may need to be linked.
linked_pages[unit_table.unitcode or unit_table] = nil
end
local function make_link(link, id, unit_table)
-- Return wikilink "[[link|id]]", possibly abbreviated as in examples:
-- [[Mile|mile]] --> [[mile]]
-- [[Mile|miles]] --> [[mile]]s
-- However, just id is returned if:
-- * no link given (so caller does not need to check if a link was defined); or
-- * link has previously been used during the current convert (to avoid overlinking).
local link_key
if unit_table then
link_key = unit_table.unitcode or unit_table
else
link_key = link
end
if not link or link == '' or linked_pages[link_key] then
return id
end
linked_pages[link_key] = true
-- Following only works for language en, but it should be safe on other wikis,
-- and overhead of doing it generally does not seem worthwhile.
local l = link:sub(1, 1):lower() .. link:sub(2)
if link == id or l == id then
return '[[' .. id .. ']]'
elseif link .. 's' == id or l .. 's' == id then
return '[[' .. id:sub(1, -2) .. ']]s'
else
return '[[' .. link .. '|' .. id .. ']]'
end
end
local function variable_name(clean, unit_table)
-- For slwiki, a unit name depends on the value.
-- Parameter clean is the unsigned rounded value in en digits, as a string.
-- Value Source Example for "m"
-- integer 1: name1 meter (also is the name of the unit)
-- integer 2: var{1} metra
-- integer 3 and 4: var{2} metri
-- integer else: var{3} metrov (0 and 5 or more)
-- real/fraction: var{4} metra
-- var{i} means the i'th field in unit_table.varname if it exists and has
-- an i'th field, otherwise name2.
-- Fields are separated with "!" and are not empty.
-- A field for a unit using an SI prefix has the prefix name inserted,
-- replacing '#' if found, or before the field otherwise.
local vname
if clean == '1' then
vname = unit_table.name1
elseif unit_table.varname then
local i
if clean == '2' then
i = 1
elseif clean == '3' or clean == '4' then
i = 2
elseif clean:find('.', 1, true) then
i = 4
else
i = 3
end
if i > 1 and varname == 'pl' then
i = i - 1
end
vname = split(unit_table.varname, '!')[i]
end
if vname then
local si_name = rawget(unit_table, 'si_name') or ''
local pos = vname:find('#', 1, true)
if pos then
vname = vname:sub(1, pos - 1) .. si_name .. vname:sub(pos + 1)
else
vname = si_name .. vname
end
return vname
end
return unit_table.name2
end
local function linked_id(parms, unit_table, key_id, want_link, clean)
-- Return final unit id (symbol or name), optionally with a wikilink,
-- and update unit_table.sep if required.
-- key_id is one of: 'symbol', 'sym_us', 'name1', 'name1_us', 'name2', 'name2_us'.
local abbr_on = (key_id == 'symbol' or key_id == 'sym_us')
if abbr_on and want_link then
local symlink = rawget(unit_table, 'symlink')
if symlink then
return symlink -- for exceptions that have the linked symbol built-in
end
end
local multiplier = rawget(unit_table, 'multiplier')
local per = unit_table.per
if per then
local paren1, paren2 = '', '' -- possible parentheses around bottom unit
local unit1 = per[1] -- top unit_table, or nil
local unit2 = per[2] -- bottom unit_table
if abbr_on then
if not unit1 then
unit_table.sep = '' -- no separator in "$2/acre"
end
if not want_link then
local symbol = unit_table.symbol_raw
if symbol then
return symbol -- for exceptions that have the symbol built-in
end
end
if (unit2.symbol):find('⋅', 1, true) then
paren1, paren2 = '(', ')'
end
end
local key_id2 -- unit2 is always singular
if key_id == 'name2' then
key_id2 = 'name1'
elseif key_id == 'name2_us' then
key_id2 = 'name1_us'
else
key_id2 = key_id
end
local result
if abbr_on then
result = '/'
elseif omitsep then
result = per_word
elseif unit1 then
result = ' ' .. per_word .. ' '
else
result = per_word .. ' '
end
if want_link and unit_table.link then
if abbr_on or not varname then
result = (unit1 and linked_id(parms, unit1, key_id, false, clean) or '') .. result .. linked_id(parms, unit2, key_id2, false, '1')
else
result = (unit1 and variable_name(clean, unit1) or '') .. result .. variable_name('1', unit2)
end
if omit_separator(result) then
unit_table.sep = ''
end
return make_link(unit_table.link, result, unit_table)
end
if unit1 then
result = linked_id(parms, unit1, key_id, want_link, clean) .. result
if unit1.sep then
unit_table.sep = unit1.sep
end
elseif omitsep then
unit_table.sep = ''
end
return result .. paren1 .. linked_id(parms, unit2, key_id2, want_link, '1') .. paren2
end
if multiplier then
-- A multiplier (like "100" in "100km") forces the unit to be plural.
multiplier = from_en(multiplier)
if not omitsep then
multiplier = multiplier .. (abbr_on and ' ' or ' ')
end
if not abbr_on then
if key_id == 'name1' then
key_id = 'name2'
elseif key_id == 'name1_us' then
key_id = 'name2_us'
end
end
else
multiplier = ''
end
local id = unit_table.fixed_name or ((varname and not abbr_on) and variable_name(clean, unit_table) or unit_table[key_id])
if omit_separator(id) then
unit_table.sep = ''
end
if want_link then
local link = data_code.link_exceptions[unit_table.linkey or unit_table.symbol] or unit_table.link
if link then
local before = ''
local i = unit_table.customary
if i == 1 and parms.opt_sp_us then
i = 2 -- show "U.S." not "US"
end
if i == 3 and abbr_on then
i = 4 -- abbreviate "imperial" to "imp"
end
local customary = text_code.customary_units[i]
if customary then
-- LATER: This works for language en only, but it's esoteric so ignore for now.
local pertext
if id:sub(1, 1) == '/' then
-- Want unit "/USgal" to display as "/U.S. gal", not "U.S. /gal".
pertext = '/'
id = id:sub(2)
elseif id:sub(1, 4) == 'per ' then
-- Similarly want "per U.S. gallon", not "U.S. per gallon" (but in practice this is unlikely to be used).
pertext = 'per '
id = id:sub(5)
else
pertext = ''
end
-- Omit any "US"/"U.S."/"imp"/"imperial" from start of id since that will be inserted.
local removes = (i < 3) and { 'US ', 'US ', 'U.S. ', 'U.S. ' } or { 'imp ', 'imp ', 'imperial ' }
for _, prefix in ipairs(removes) do
local plen = #prefix
if id:sub(1, plen) == prefix then
id = id:sub(plen + 1)
break
end
end
before = pertext .. make_link(customary.link, customary[1]) .. ' '
end
id = before .. make_link(link, id, unit_table)
end
end
return multiplier .. id
end
local function make_id(parms, which, unit_table)
-- Return id, f where
-- id = unit name or symbol, possibly modified
-- f = true if id is a name, or false if id is a symbol
-- using the value for index 'which', and for 'in' or 'out' (unit_table.inout).
-- Result is '' if no symbol/name is to be used.
-- In addition, set unit_table.sep = ' ' or ' ' or ''
-- (the separator that caller will normally insert before the id).
if parms.opt_values then
unit_table.sep = ''
return ''
end
local inout = unit_table.inout
local info = unit_table.valinfo[which]
local abbr_org = parms.abbr_org
local adjectival = parms.opt_adjectival
local lk = parms.lk
local want_link = (lk == 'on' or lk == inout)
local usename = unit_table.usename
local singular = info.singular
local want_name
if usename then
want_name = true
else
if abbr_org == nil then
if parms.wantname then
want_name = true
end
if unit_table.usesymbol then
want_name = false
end
end
if want_name == nil then
local abbr = parms.abbr
if abbr == 'on' or abbr == inout or (abbr == 'mos' and inout == 'out') then
want_name = false
else
want_name = true
end
end
end
local key
if want_name then
if lk == nil and unit_table.builtin == 'hand' then
want_link = true
end
if parms.opt_use_nbsp then
unit_table.sep = ' '
else
unit_table.sep = ' '
end
if parms.opt_singular then
local value
if inout == 'in' then
value = info.value
else
value = info.absvalue
end
if value then -- some unusual units do not always set value field
value = abs(value)
singular = (0 < value and value < 1.0001)
end
end
if unit_table.engscale then
-- engscale: so "|1|e3kg" gives "1 thousand kilograms" (plural)
singular = false
end
key = (adjectival or singular) and 'name1' or 'name2'
if parms.opt_sp_us then
key = key .. '_us'
end
else
if unit_table.builtin == 'hand' then
if parms.opt_hand_hh then
unit_table.symbol = 'hh' -- LATER: might want i18n applied to this
end
end
unit_table.sep = ' '
key = parms.opt_sp_us and 'sym_us' or 'symbol'
end
return linked_id(parms, unit_table, key, want_link, info.clean), want_name
end
local function decorate_value(parms, unit_table, which, number_word)
-- If needed, update unit_table so values will be shown with extra information.
-- For consistency with the old template (but different from fmtpower),
-- the style to display powers of 10 includes "display:none" to allow some
-- browsers to copy, for example, "10³" as "10^3", rather than as "103".
local info
local engscale = unit_table.engscale
local prefix = unit_table.vprefix
if engscale or prefix then
info = unit_table.valinfo[which]
if info.decorated then
return -- do not redecorate if repeating convert
end
info.decorated = true
if engscale then
local inout = unit_table.inout
local abbr = parms.abbr
if (abbr == 'on' or abbr == inout) and not parms.number_word then
info.show = info.show ..
'<span style="margin-left:0.2em">×<span style="margin-left:0.1em">' ..
from_en('10') ..
'</span></span><s style="display:none">^</s><sup>' ..
from_en(tostring(engscale.exponent)) .. '</sup>'
elseif number_word then
local number_id
local lk = parms.lk
if lk == 'on' or lk == inout then
number_id = make_link(engscale.link, engscale[1])
else
number_id = engscale[1]
end
-- WP:NUMERAL recommends " " in values like "12 million".
info.show = info.show .. (parms.opt_adjectival and '-' or ' ') .. number_id
end
end
if prefix then
info.show = prefix .. info.show
end
end
end
local function process_input(parms, in_current)
-- Processing required once per conversion.
-- Return block of text to represent input (value/unit).
if parms.opt_output_only or parms.opt_output_number_only or parms.opt_output_unit_only then
parms.joins = { '', '' }
return ''
end
local first_unit
local composite = in_current.composite -- nil or table of units
if composite then
first_unit = composite[1]
else
first_unit = in_current
end
local id1, want_name = make_id(parms, 1, first_unit)
local sep = first_unit.sep -- separator between value and unit, set by make_id
local preunit = parms.preunit1
if preunit then
sep = '' -- any separator is included in preunit
else
preunit = ''
end
if parms.opt_input_unit_only then
parms.joins = { '', '' }
if composite then
local parts = { id1 }
for i, unit in ipairs(composite) do
if i > 1 then
table.insert(parts, (make_id(parms, 1, unit)))
end
end
id1 = table.concat(parts, ' ')
end
if want_name and parms.opt_adjectival then
return preunit .. hyphenated(id1)
end
return preunit .. id1
end
if parms.opt_also_symbol and not composite and not parms.opt_flip then
local join1 = parms.joins[1]
if join1 == ' (' or join1 == ' [' then
parms.joins = { ' [' .. first_unit[parms.opt_sp_us and 'sym_us' or 'symbol'] .. ']' .. join1 , parms.joins[2] }
end
end
if in_current.builtin == 'mach' and first_unit.sep ~= '' then -- '' means omitsep with non-enwiki name
local prefix = id1 .. ' '
local range = parms.range
local valinfo = first_unit.valinfo
local result = prefix .. valinfo[1].show
if range then
-- For simplicity and because more not needed, handle one range item only.
local prefix2 = make_id(parms, 2, first_unit) .. ' '
result = range_text(range[1], want_name, parms, result, prefix2 .. valinfo[2].show, 'in', {spaced=true})
end
return preunit .. result
end
if composite then
-- Simplify: assume there is no range, and no decoration.
local mid = (not parms.opt_flip) and parms.mid or ''
local sep1 = ' '
local sep2 = ' '
if parms.opt_adjectival and want_name then
sep1 = '-'
sep2 = '-'
end
if omitsep and sep == '' then
-- Testing the id of the most significant unit should be sufficient.
sep1 = ''
sep2 = ''
end
local parts = { first_unit.valinfo[1].show .. sep1 .. id1 }
for i, unit in ipairs(composite) do
if i > 1 then
table.insert(parts, unit.valinfo[1].show .. sep1 .. (make_id(parms, 1, unit)))
end
end
return table.concat(parts, sep2) .. mid
end
local add_unit = (parms.abbr == 'mos') or
parms[parms.opt_flip and 'out_range_x' or 'in_range_x'] or
(not want_name and parms.abbr_range_x)
local range = parms.range
if range and not add_unit then
unlink(first_unit)
end
local id = range and make_id(parms, range.n + 1, first_unit) or id1
local extra, was_hyphenated = hyphenated_maybe(parms, want_name, sep, id, 'in')
if was_hyphenated then
add_unit = false
end
local result
local valinfo = first_unit.valinfo
if range then
for i = 0, range.n do
local number_word
if i == range.n then
add_unit = false
number_word = true
end
decorate_value(parms, first_unit, i+1, number_word)
local show = valinfo[i+1].show
if add_unit then
show = show .. first_unit.sep .. (i == 0 and id1 or make_id(parms, i+1, first_unit))
end
if i == 0 then
result = show
else
result = range_text(range[i], want_name, parms, result, show, 'in')
end
end
else
decorate_value(parms, first_unit, 1, true)
result = valinfo[1].show
end
return result .. preunit .. extra
end
local function process_one_output(parms, out_current)
-- Processing required for each output unit.
-- Return block of text to represent output (value/unit).
local inout = out_current.inout -- normally 'out' but can be 'in' for order=out
local id1, want_name = make_id(parms, 1, out_current)
local sep = out_current.sep -- set by make_id
local preunit = parms.preunit2
if preunit then
sep = '' -- any separator is included in preunit
else
preunit = ''
end
if parms.opt_output_unit_only then
if want_name and parms.opt_adjectival then
return preunit .. hyphenated(id1)
end
return preunit .. id1
end
if out_current.builtin == 'mach' and out_current.sep ~= '' then -- '' means omitsep with non-enwiki name
local prefix = id1 .. ' '
local range = parms.range
local valinfo = out_current.valinfo
local result = prefix .. valinfo[1].show
if range then
-- For simplicity and because more not needed, handle one range item only.
result = range_text(range[1], want_name, parms, result, prefix .. valinfo[2].show, inout, {spaced=true})
end
return preunit .. result
end
local add_unit = (parms[parms.opt_flip and 'in_range_x' or 'out_range_x'] or
(not want_name and parms.abbr_range_x)) and
not parms.opt_output_number_only
local range = parms.range
if range and not add_unit then
unlink(out_current)
end
local id = range and make_id(parms, range.n + 1, out_current) or id1
local extra, was_hyphenated = hyphenated_maybe(parms, want_name, sep, id, inout)
if was_hyphenated then
add_unit = false
end
local result
local valinfo = out_current.valinfo
if range then
for i = 0, range.n do
local number_word
if i == range.n then
add_unit = false
number_word = true
end
decorate_value(parms, out_current, i+1, number_word)
local show = valinfo[i+1].show
if add_unit then
show = show .. out_current.sep .. (i == 0 and id1 or make_id(parms, i+1, out_current))
end
if i == 0 then
result = show
else
result = range_text(range[i], want_name, parms, result, show, inout)
end
end
else
decorate_value(parms, out_current, 1, true)
result = valinfo[1].show
end
if parms.opt_output_number_only then
return result
end
return result .. preunit .. extra
end
local function make_output_single(parms, in_unit_table, out_unit_table)
-- Return true, item where item = wikitext of the conversion result
-- for a single output (which is not a combination or a multiple);
-- or return false, t where t is an error message table.
if parms.opt_order_out and in_unit_table.unitcode == out_unit_table.unitcode then
out_unit_table.valinfo = in_unit_table.valinfo
else
out_unit_table.valinfo = collection()
for _, v in ipairs(in_unit_table.valinfo) do
local success, info = cvtround(parms, v, in_unit_table, out_unit_table)
if not success then return false, info end
out_unit_table.valinfo:add(info)
end
end
return true, process_one_output(parms, out_unit_table)
end
local function make_output_multiple(parms, in_unit_table, out_unit_table)
-- Return true, item where item = wikitext of the conversion result
-- for an output which is a multiple (like 'ftin');
-- or return false, t where t is an error message table.
local inout = out_unit_table.inout -- normally 'out' but can be 'in' for order=out
local multiple = out_unit_table.multiple -- table of scaling factors (will not be nil)
local combos = out_unit_table.combination -- table of unit tables (will not be nil)
local abbr = parms.abbr
local abbr_org = parms.abbr_org
local disp = parms.disp
local want_name = (abbr_org == nil and (disp == 'or' or disp == 'slash')) or
not (abbr == 'on' or abbr == inout or abbr == 'mos')
local want_link = (parms.lk == 'on' or parms.lk == inout)
local mid = parms.opt_flip and parms.mid or ''
local sep1 = ' '
local sep2 = ' '
if parms.opt_adjectival and want_name then
sep1 = '-'
sep2 = '-'
end
local do_spell = parms.opt_spell_out
parms.opt_spell_out = nil -- so the call to cvtround does not spell the value
local function make_result(info, isfirst)
local fmt, outvalue, sign
local results = {}
for i = 1, #combos do
local tfrac, thisvalue, strforce
local out_current = combos[i]
out_current.inout = inout
local scale = multiple[i]
if i == 1 then -- least significant unit ('in' from 'ftin')
local decimals
out_current.frac = out_unit_table.frac
local success, outinfo = cvtround(parms, info, in_unit_table, out_current)
if not success then return false, outinfo end
if isfirst then
out_unit_table.valinfo = { outinfo } -- in case output value of first least significant unit is needed
end
sign = outinfo.sign
tfrac = outinfo.fraction_table
if outinfo.is_scientific then
strforce = outinfo.show
decimals = ''
elseif tfrac then
decimals = ''
else
local show = outinfo.show -- number as a string in local language
local p1, p2 = show:find(numdot, 1, true)
decimals = p1 and show:sub(p2 + 1) or '' -- text after numdot, if any
end
fmt = '%.' .. ulen(decimals) .. 'f' -- to reproduce precision
if decimals == '' then
if tfrac then
outvalue = floor(outinfo.raw_absvalue) -- integer part only; fraction added later
else
outvalue = floor(outinfo.raw_absvalue + 0.5) -- keep all integer digits of least significant unit
end
else
outvalue = outinfo.absvalue
end
end
if scale then
outvalue, thisvalue = divide(outvalue, scale)
else
thisvalue = outvalue
end
local id
if want_name then
if varname then
local clean
if strforce or tfrac then
clean = '.1' -- dummy value to force name for floating point
else
clean = format(fmt, thisvalue)
end
id = variable_name(clean, out_current)
else
local key = 'name2'
if parms.opt_adjectival then
key = 'name1'
elseif tfrac then
if thisvalue == 0 then
key = 'name1'
end
elseif parms.opt_singular then
if 0 < thisvalue and thisvalue < 1.0001 then
key = 'name1'
end
else
if thisvalue == 1 then
key = 'name1'
end
end
id = out_current[key]
end
else
id = out_current['symbol']
end
if i == 1 and omit_separator(id) then
-- Testing the id of the least significant unit should be sufficient.
sep1 = ''
sep2 = ''
end
if want_link then
local link = out_current.link
if link then
id = make_link(link, id, out_current)
end
end
local strval
local spell_inout = (i == #combos or outvalue == 0) and inout or '' -- trick so the last value processed (first displayed) has uppercase, if requested
if strforce and outvalue == 0 then
sign = '' -- any sign is in strforce
strval = strforce -- show small values in scientific notation; will only use least significant unit
elseif tfrac then
local wholestr = (thisvalue > 0) and tostring(thisvalue) or nil
strval = format_fraction(parms, spell_inout, false, wholestr, tfrac.numstr, tfrac.denstr, do_spell)
else
strval = (thisvalue == 0) and from_en('0') or with_separator(parms, format(fmt, thisvalue))
if do_spell then
strval = spell_number(parms, spell_inout, strval) or strval
end
end
table.insert(results, strval .. sep1 .. id)
if outvalue == 0 then
break
end
fmt = '%.0f' -- only least significant unit can have a non-integral value
end
local reversed, count = {}, #results
for i = 1, count do
reversed[i] = results[count + 1 - i]
end
return true, sign .. table.concat(reversed, sep2)
end
local valinfo = in_unit_table.valinfo
local success, result = make_result(valinfo[1], true)
if not success then return false, result end
local range = parms.range
if range then
for i = 1, range.n do
local success, result2 = make_result(valinfo[i+1])
if not success then return false, result2 end
result = range_text(range[i], want_name, parms, result, result2, inout, {spaced=true})
end
end
return true, result .. mid
end
local function process(parms, in_unit_table, out_unit_table)
-- Return true, s, outunit where s = final wikitext result,
-- or return false, t where t is an error message table.
linked_pages = {}
local success, bad_output
local bad_input_mcode = in_unit_table.bad_mcode -- nil if input unit is a valid convert unit
local out_unit = parms.out_unit
if out_unit == nil or out_unit == '' or type(out_unit) == 'function' then
if bad_input_mcode or parms.opt_input_unit_only then
bad_output = ''
else
local getdef = type(out_unit) == 'function' and out_unit or get_default
success, out_unit = getdef(in_unit_table.valinfo[1].value, in_unit_table)
parms.out_unit = out_unit
if not success then
bad_output = out_unit
end
end
end
if not bad_output and not out_unit_table then
success, out_unit_table = lookup(parms, out_unit, 'any_combination')
if success then
local mismatch = check_mismatch(in_unit_table, out_unit_table)
if mismatch then
bad_output = mismatch
end
else
bad_output = out_unit_table
end
end
local lhs, rhs
local flipped = parms.opt_flip and not bad_input_mcode
if bad_output then
rhs = (bad_output == '') and '' or message(parms, bad_output)
elseif parms.opt_input_unit_only then
rhs = ''
else
local combos -- nil (for 'ft' or 'ftin'), or table of unit tables (for 'm ft')
if not out_unit_table.multiple then -- nil/false ('ft' or 'm ft'), or table of factors ('ftin')
combos = out_unit_table.combination
end
local frac = parms.frac -- nil or denominator of fraction for output values
if frac then
-- Apply fraction to the unit (if only one), or to non-SI units (if a combination),
-- except that if a precision is also specified, the fraction only applies to
-- the hand unit; that allows the following result:
-- {{convert|156|cm|in hand|1|frac=2}} → 156 centimetres (61.4 in; 15.1½ hands)
-- However, the following is handled elsewhere as a special case:
-- {{convert|156|cm|hand in|1|frac=2}} → 156 centimetres (15.1½ hands; 61½ in)
if combos then
local precision = parms.precision
for _, unit in ipairs(combos) do
if unit.builtin == 'hand' or (not precision and not unit.prefixes) then
unit.frac = frac
end
end
else
out_unit_table.frac = frac
end
end
local outputs = {}
local imax = combos and #combos or 1 -- 1 (single unit) or number of unit tables
if imax == 1 then
parms.opt_order_out = nil -- only useful with an output combination
end
if not flipped and not parms.opt_order_out then
-- Process left side first so any duplicate links (from lk=on) are suppressed
-- on right. Example: {{convert|28|e9pc|e9ly|abbr=off|lk=on}}
lhs = process_input(parms, in_unit_table)
end
for i = 1, imax do
local success, item
local out_current = combos and combos[i] or out_unit_table
out_current.inout = 'out'
if i == 1 then
if imax > 1 and out_current.builtin == 'hand' then
out_current.out_next = combos[2] -- built-in hand can influence next unit in a combination
end
if parms.opt_order_out then
out_current.inout = 'in'
end
end
if out_current.multiple then
success, item = make_output_multiple(parms, in_unit_table, out_current)
else
success, item = make_output_single(parms, in_unit_table, out_current)
end
if not success then return false, item end
outputs[i] = item
end
if parms.opt_order_out then
lhs = outputs[1]
table.remove(outputs, 1)
end
local sep = parms.table_joins and parms.table_joins[2] or parms.join_between
rhs = table.concat(outputs, sep)
end
if flipped or not lhs then
local input = process_input(parms, in_unit_table)
if flipped then
lhs = rhs
rhs = input
else
lhs = input
end
end
if parms.join_before then
lhs = parms.join_before .. lhs
end
local wikitext
if bad_input_mcode then
if bad_input_mcode == '' then
wikitext = lhs
else
wikitext = lhs .. message(parms, bad_input_mcode)
end
elseif parms.table_joins then
wikitext = parms.table_joins[1] .. lhs .. parms.table_joins[2] .. rhs
else
wikitext = lhs .. parms.joins[1] .. rhs .. parms.joins[2]
end
if parms.warnings and not bad_input_mcode then
wikitext = wikitext .. parms.warnings
end
return true, get_styles(parms) .. wikitext, out_unit_table
end
local function main_convert(frame)
-- Do convert, and if needed, do it again with higher default precision.
local parms = { frame = frame } -- will hold template arguments, after translation
set_config(frame.args)
local success, result = get_parms(parms, frame:getParent().args)
if success then
if type(result) ~= 'table' then
return tostring(result)
end
local in_unit_table = result
local out_unit_table
for _ = 1, 2 do -- use counter so cannot get stuck repeating convert
success, result, out_unit_table = process(parms, in_unit_table, out_unit_table)
if success and parms.do_convert_again then
parms.do_convert_again = false
else
break
end
end
end
-- If input=x gives a problem, the result should be just the user input
-- (if x is a property like P123 it has been replaced with '').
-- An unknown input unit would display the input and an error message
-- with success == true at this point.
-- Also, can have success == false with a message that outputs an empty string.
if parms.input_text then
if success and not parms.have_problem then
return result
end
local cat
if parms.tracking then
-- Add a tracking category using the given text as the category sort key.
-- There is currently only one type of tracking, but in principle multiple
-- items could be tracked, using different sort keys for convenience.
cat = wanted_category('tracking', parms.tracking)
end
return parms.input_text .. (cat or '')
end
return success and result or message(parms, result)
end
local function _unit(unitcode, options)
-- Helper function for Module:Val to look up a unit.
-- Parameter unitcode must be a string to identify the wanted unit.
-- Parameter options must be nil or a table with optional fields:
-- value = number (for sort key; default value is 1)
-- scaled_top = nil for a normal unit, or a number for a unit which is
-- the denominator of a per unit (for sort key)
-- si = { 'symbol', 'link' }
-- (a table with two strings) to make an SI unit
-- that will be used for the look up
-- link = true if result should be [[linked]]
-- sort = 'on' or 'debug' if result should include a sort key in a
-- span element ('debug' makes the key visible)
-- name = true for the name of the unit instead of the symbol
-- us = true for the US spelling of the unit, if any
-- Return nil if unitcode is not a non-empty string.
-- Otherwise return a table with fields:
-- text = requested symbol or name of unit, optionally linked
-- scaled_value = input value adjusted by unit scale; used for sort key
-- sortspan = span element with sort key like that provided by {{ntsh}},
-- calculated from the result of converting value
-- to a base unit with scale 1.
-- unknown = true if the unitcode was not known
unitcode = strip(unitcode)
if unitcode == nil or unitcode == '' then
return nil
end
set_config({})
linked_pages = {}
options = options or {}
local parms = {
abbr = options.name and 'off' or 'on',
lk = options.link and 'on' or nil,
opt_sp_us = options.us and true or nil,
opt_ignore_error = true, -- do not add pages using this function to 'what links here' for Module:Convert/extra
opt_sortable_on = options.sort == 'on' or options.sort == 'debug',
opt_sortable_debug = options.sort == 'debug',
}
if options.si then
-- Make a dummy table of units (just one unit) for lookup to use.
-- This makes lookup recognize any SI prefix in the unitcode.
local symbol = options.si[1] or '?'
parms.unittable = { [symbol] = {
_name1 = symbol,
_name2 = symbol,
_symbol = symbol,
utype = symbol,
scale = symbol == 'g' and 0.001 or 1,
prefixes = 1,
default = symbol,
link = options.si[2],
}}
end
local success, unit_table = lookup(parms, unitcode, 'no_combination')
if not success then
unit_table = setmetatable({
symbol = unitcode, name2 = unitcode, utype = unitcode,
scale = 1, default = '', defkey = '', linkey = '' }, unit_mt)
end
local value = tonumber(options.value) or 1
local clean = tostring(abs(value))
local info = {
value = value,
altvalue = value,
singular = (clean == '1'),
clean = clean,
show = clean,
}
unit_table.inout = 'in'
unit_table.valinfo = { info }
local sortspan, scaled_value
if options.sort then
sortspan, scaled_value = make_table_or_sort(parms, value, info, unit_table, options.scaled_top)
end
return {
text = make_id(parms, 1, unit_table),
sortspan = sortspan,
scaled_value = scaled_value,
unknown = not success and true or nil,
}
end
return { convert = main_convert, _unit = _unit }
cac541bea61c5fbbcb0a2768343935e97587b60a
Module:Convert/data
828
191
388
387
2023-09-14T01:14:54Z
Ilovethehitgameomori
2
1 revision imported
Scribunto
text/plain
-- Conversion data used by [[Module:Convert]] which uses mw.loadData() for
-- read-only access to this module so that it is loaded only once per page.
-- See [[:en:Template:Convert/Transwiki guide]] if copying to another wiki.
--
-- These data tables follow:
-- all_units all properties for a unit, including default output
-- default_exceptions exceptions for default output ('kg' and 'g' have different defaults)
-- link_exceptions exceptions for links ('kg' and 'g' have different links)
--
-- These tables are generated by a script which reads the wikitext of a page that
-- documents the required properties of each unit; see [[:en:Module:Convert/doc]].
---------------------------------------------------------------------------
-- Do not change the data in this table because it is created by running --
-- a script that reads the wikitext from a wiki page (see note above). --
---------------------------------------------------------------------------
local all_units = {
["Gy"] = {
_name1 = "gray",
_symbol = "Gy",
utype = "absorbed radiation dose",
scale = 1,
prefixes = 1,
default = "rad",
link = "Gray (unit)",
},
["rad"] = {
_name1 = "rad",
_symbol = "rad",
utype = "absorbed radiation dose",
scale = 0.01,
prefixes = 1,
default = "Gy",
link = "Rad (unit)",
},
["cm/s2"] = {
name1 = "centimetre per second squared",
name1_us = "centimeter per second squared",
name2 = "centimetres per second squared",
name2_us = "centimeters per second squared",
symbol = "cm/s<sup>2</sup>",
utype = "acceleration",
scale = 0.01,
default = "ft/s2",
link = "Gal (unit)",
},
["ft/s2"] = {
name1 = "foot per second squared",
name2 = "feet per second squared",
symbol = "ft/s<sup>2</sup>",
utype = "acceleration",
scale = 0.3048,
default = "m/s2",
},
["g0"] = {
name1 = "standard gravity",
name2 = "standard gravities",
symbol = "''g''<sub>0</sub>",
utype = "acceleration",
scale = 9.80665,
default = "m/s2",
},
["g-force"] = {
name2 = "''g''",
symbol = "''g''",
utype = "acceleration",
scale = 9.80665,
default = "m/s2",
link = "g-force",
},
["km/hs"] = {
name1 = "kilometre per hour per second",
name1_us = "kilometer per hour per second",
name2 = "kilometres per hour per second",
name2_us = "kilometers per hour per second",
symbol = "km/(h⋅s)",
utype = "acceleration",
scale = 0.27777777777777779,
default = "mph/s",
link = "Acceleration",
},
["km/s2"] = {
name1 = "kilometre per second squared",
name1_us = "kilometer per second squared",
name2 = "kilometres per second squared",
name2_us = "kilometers per second squared",
symbol = "km/s<sup>2</sup>",
utype = "acceleration",
scale = 1000,
default = "mph/s",
link = "Acceleration",
},
["m/s2"] = {
name1 = "metre per second squared",
name1_us = "meter per second squared",
name2 = "metres per second squared",
name2_us = "meters per second squared",
symbol = "m/s<sup>2</sup>",
utype = "acceleration",
scale = 1,
default = "ft/s2",
},
["mph/s"] = {
name1 = "mile per hour per second",
name2 = "miles per hour per second",
symbol = "mph/s",
utype = "acceleration",
scale = 0.44704,
default = "km/hs",
link = "Acceleration",
},
["km/h/s"] = {
target = "km/hs",
},
["standard gravity"] = {
target = "g0",
},
["1000sqft"] = {
name1 = "thousand square feet",
name2 = "thousand square feet",
symbol = "1000 sq ft",
utype = "area",
scale = 92.90304,
default = "m2",
link = "Square foot",
},
["a"] = {
_name1 = "are",
_symbol = "a",
utype = "area",
scale = 100,
prefixes = 1,
default = "sqft",
link = "Hectare#Are",
},
["acre"] = {
symbol = "acre",
usename = 1,
utype = "area",
scale = 4046.8564224,
default = "ha",
subdivs = { ["rood"] = { 4, default = "ha" }, ["sqperch"] = { 160, default = "ha" } },
},
["acre-sing"] = {
target = "acre",
},
["arpent"] = {
symbol = "arpent",
usename = 1,
utype = "area",
scale = 3418.89,
default = "ha",
},
["cda"] = {
name1 = "cuerda",
symbol = "cda",
utype = "area",
scale = 3930.395625,
default = "ha acre",
},
["daa"] = {
name1 = "decare",
symbol = "daa",
utype = "area",
scale = 1000,
default = "km2 sqmi",
},
["dunam"] = {
symbol = "dunam",
usename = 1,
utype = "area",
scale = 1000,
default = "km2 sqmi",
},
["dunum"] = {
symbol = "dunum",
usename = 1,
utype = "area",
scale = 1000,
default = "km2 sqmi",
link = "Dunam",
},
["ha"] = {
name1 = "hectare",
symbol = "ha",
utype = "area",
scale = 10000,
default = "acre",
},
["hectare"] = {
name1 = "hectare",
symbol = "ha",
usename = 1,
utype = "area",
scale = 10000,
default = "acre",
},
["Irish acre"] = {
name1 = "Irish acre",
symbol = "Irish acres",
utype = "area",
scale = 6555.2385024,
default = "ha",
link = "Acre (Irish)",
},
["m2"] = {
_name1 = "square metre",
_name1_us= "square meter",
_symbol = "m<sup>2</sup>",
prefix_position= 8,
utype = "area",
scale = 1,
prefixes = 2,
default = "sqft",
link = "Square metre",
},
["pondemaat"] = {
name1 = "pondemaat",
name2 = "pondemaat",
symbol = "pond",
utype = "area",
scale = 3674.363358816,
default = "m2",
link = ":nl:pondemaat",
},
["pyeong"] = {
name2 = "pyeong",
symbol = "pyeong",
usename = 1,
utype = "area",
scale = 3.3057851239669422,
default = "m2",
},
["rai"] = {
name2 = "rai",
symbol = "rai",
utype = "area",
scale = 1600,
default = "m2",
link = "Rai (unit)",
},
["rood"] = {
symbol = "rood",
usename = 1,
utype = "area",
scale = 1011.7141056,
default = "sqft m2",
subdivs = { ["sqperch"] = { 40, default = "m2" } },
link = "Rood (unit)",
},
["sqfoot"] = {
name1 = "square foot",
name2 = "square foot",
symbol = "sq ft",
utype = "area",
scale = 0.09290304,
default = "m2",
},
["sqft"] = {
name1 = "square foot",
name2 = "square feet",
symbol = "sq ft",
utype = "area",
scale = 0.09290304,
default = "m2",
},
["sqin"] = {
name1 = "square inch",
name2 = "square inches",
symbol = "sq in",
utype = "area",
scale = 0.00064516,
default = "cm2",
},
["sqmi"] = {
name1 = "square mile",
symbol = "sq mi",
utype = "area",
scale = 2589988.110336,
default = "km2",
},
["sqnmi"] = {
name1 = "square nautical mile",
symbol = "sq nmi",
utype = "area",
scale = 3429904,
default = "km2 sqmi",
link = "Nautical mile",
},
["sqperch"] = {
name2 = "perches",
symbol = "perch",
usename = 1,
utype = "area",
scale = 25.29285264,
default = "m2",
link = "Rod (unit)#Area and volume",
},
["sqverst"] = {
symbol = "square verst",
usename = 1,
utype = "area",
scale = 1138062.24,
default = "km2 sqmi",
link = "Verst",
},
["sqyd"] = {
name1 = "square yard",
symbol = "sq yd",
utype = "area",
scale = 0.83612736,
default = "m2",
},
["tsubo"] = {
name2 = "tsubo",
symbol = "tsubo",
usename = 1,
utype = "area",
scale = 3.3057851239669422,
default = "m2",
link = "Japanese units of measurement#Area",
},
["acres"] = {
target = "acre",
},
["are"] = {
target = "a",
},
["decare"] = {
target = "daa",
},
["foot2"] = {
target = "sqfoot",
},
["ft2"] = {
target = "sqft",
},
["in2"] = {
target = "sqin",
symbol = "in<sup>2</sup>",
},
["km²"] = {
target = "km2",
},
["mi2"] = {
target = "sqmi",
},
["million acre"] = {
target = "e6acre",
},
["million acres"] = {
target = "e6acre",
},
["million hectares"] = {
target = "e6ha",
},
["m²"] = {
target = "m2",
},
["nmi2"] = {
target = "sqnmi",
},
["pond"] = {
target = "pondemaat",
},
["sq arp"] = {
target = "arpent",
},
["sqkm"] = {
target = "km2",
},
["sqm"] = {
target = "m2",
},
["square verst"] = {
target = "sqverst",
},
["verst2"] = {
target = "sqverst",
},
["yd2"] = {
target = "sqyd",
},
["m2/ha"] = {
name1 = "square metre per hectare",
name1_us = "square meter per hectare",
name2 = "square metres per hectare",
name2_us = "square meters per hectare",
symbol = "m<sup>2</sup>/ha",
utype = "area per unit area",
scale = 0.0001,
default = "sqft/acre",
link = "Basal area",
},
["sqft/acre"] = {
name1 = "square foot per acre",
name2 = "square feet per acre",
symbol = "sq ft/acre",
utype = "area per unit area",
scale = 2.295684113865932e-5,
default = "m2/ha",
link = "Basal area",
},
["cent"] = {
name1 = "cent",
symbol = "¢",
utype = "cent",
scale = 1,
default = "cent",
link = "Cent (currency)",
},
["¢"] = {
target = "cent",
},
["A.h"] = {
name1 = "ampere hour",
symbol = "A⋅h",
utype = "charge",
scale = 3600,
default = "coulomb",
},
["coulomb"] = {
_name1 = "coulomb",
_symbol = "C",
utype = "charge",
scale = 1,
prefixes = 1,
default = "e",
link = "Coulomb",
},
["e"] = {
name1 = "elementary charge",
symbol = "''e''",
utype = "charge",
scale = 1.602176487e-19,
default = "coulomb",
},
["g-mol"] = {
name1 = "gram-mole",
symbol = "g‑mol",
utype = "chemical amount",
scale = 1,
default = "lbmol",
link = "Mole (unit)",
},
["gmol"] = {
name1 = "gram-mole",
symbol = "gmol",
utype = "chemical amount",
scale = 1,
default = "lbmol",
link = "Mole (unit)",
},
["kmol"] = {
name1 = "kilomole",
symbol = "kmol",
utype = "chemical amount",
scale = 1000,
default = "lbmol",
link = "Mole (unit)",
},
["lb-mol"] = {
name1 = "pound-mole",
symbol = "lb‑mol",
utype = "chemical amount",
scale = 453.59237,
default = "mol",
},
["lbmol"] = {
name1 = "pound-mole",
symbol = "lbmol",
utype = "chemical amount",
scale = 453.59237,
default = "mol",
},
["mol"] = {
name1 = "mole",
symbol = "mol",
utype = "chemical amount",
scale = 1,
default = "lbmol",
link = "Mole (unit)",
},
["kgCO2/L"] = {
name1 = "kilogram per litre",
name1_us = "kilogram per liter",
name2 = "kilograms per litre",
name2_us = "kilograms per liter",
symbol = "kg(CO<sub>2</sub>)/L",
utype = "co2 per unit volume",
scale = 1000,
default = "lbCO2/USgal",
link = "Exhaust gas",
},
["lbCO2/USgal"] = {
name1 = "pound per US gallon",
name2 = "pounds per US gallon",
symbol = "lbCO2/US gal",
utype = "co2 per unit volume",
scale = 119.82642731689663,
default = "kgCO2/L",
link = "Exhaust gas",
},
["oz/lb"] = {
per = { "oz", "lb" },
utype = "concentration",
default = "mg/kg",
},
["mg/kg"] = {
per = { "mg", "kg" },
utype = "concentration",
default = "oz/lb",
},
["g/dm3"] = {
name1 = "gram per cubic decimetre",
name1_us = "gram per cubic decimeter",
name2 = "grams per cubic decimetre",
name2_us = "grams per cubic decimeter",
symbol = "g/dm<sup>3</sup>",
utype = "density",
scale = 1,
default = "kg/m3",
link = "Density",
},
["g/L"] = {
name1 = "gram per litre",
name1_us = "gram per liter",
name2 = "grams per litre",
name2_us = "grams per liter",
symbol = "g/L",
utype = "density",
scale = 1,
default = "lb/cuin",
link = "Density",
},
["g/mL"] = {
name1 = "gram per millilitre",
name1_us = "gram per milliliter",
name2 = "grams per millilitre",
name2_us = "grams per milliliter",
symbol = "g/mL",
utype = "density",
scale = 1000,
default = "lb/cuin",
link = "Density",
},
["g/ml"] = {
name1 = "gram per millilitre",
name1_us = "gram per milliliter",
name2 = "grams per millilitre",
name2_us = "grams per milliliter",
symbol = "g/ml",
utype = "density",
scale = 1000,
default = "lb/cuin",
link = "Density",
},
["kg/dm3"] = {
name1 = "kilogram per cubic decimetre",
name1_us = "kilogram per cubic decimeter",
name2 = "kilograms per cubic decimetre",
name2_us = "kilograms per cubic decimeter",
symbol = "kg/dm<sup>3</sup>",
utype = "density",
scale = 1000,
default = "lb/cuft",
link = "Density",
},
["kg/L"] = {
name1 = "kilogram per litre",
name1_us = "kilogram per liter",
name2 = "kilograms per litre",
name2_us = "kilograms per liter",
symbol = "kg/L",
utype = "density",
scale = 1000,
default = "lb/USgal",
link = "Density",
},
["kg/l"] = {
name1 = "kilogram per litre",
name1_us = "kilogram per liter",
name2 = "kilograms per litre",
name2_us = "kilograms per liter",
symbol = "kg/l",
utype = "density",
scale = 1000,
default = "lb/USgal",
link = "Density",
},
["kg/m3"] = {
name1 = "kilogram per cubic metre",
name1_us = "kilogram per cubic meter",
name2 = "kilograms per cubic metre",
name2_us = "kilograms per cubic meter",
symbol = "kg/m<sup>3</sup>",
utype = "density",
scale = 1,
default = "lb/cuyd",
link = "Density",
},
["lb/cuft"] = {
name1 = "pound per cubic foot",
name2 = "pounds per cubic foot",
symbol = "lb/cu ft",
utype = "density",
scale = 16.018463373960142,
default = "g/cm3",
link = "Density",
},
["lb/cuin"] = {
name1 = "pound per cubic inch",
name2 = "pounds per cubic inch",
symbol = "lb/cu in",
utype = "density",
scale = 27679.904710203122,
default = "g/cm3",
link = "Density",
},
["lb/cuyd"] = {
name1 = "pound per cubic yard",
name2 = "pounds per cubic yard",
symbol = "lb/cu yd",
utype = "density",
scale = 0.5932764212577829,
default = "kg/m3",
link = "Density",
},
["lb/impgal"] = {
name1 = "pound per imperial gallon",
name2 = "pounds per imperial gallon",
symbol = "lb/imp gal",
utype = "density",
scale = 99.776372663101697,
default = "kg/L",
link = "Density",
},
["lb/in3"] = {
name1 = "pound per cubic inch",
name2 = "pounds per cubic inch",
symbol = "lb/cu in",
utype = "density",
scale = 27679.904710203122,
default = "g/cm3",
link = "Density",
},
["lb/U.S.gal"] = {
name1 = "pound per U.S. gallon",
name2 = "pounds per U.S. gallon",
symbol = "lb/U.S. gal",
utype = "density",
scale = 119.82642731689663,
default = "kg/L",
link = "Density",
},
["lb/USbu"] = {
name1 = "pound per US bushel",
name2 = "pounds per US bushel",
symbol = "lb/US bu",
utype = "density",
scale = 12.871859780974471,
default = "kg/m3",
link = "Bushel",
},
["lb/USgal"] = {
name1 = "pound per US gallon",
name2 = "pounds per US gallon",
symbol = "lb/US gal",
utype = "density",
scale = 119.82642731689663,
default = "kg/L",
link = "Density",
},
["lbm/cuin"] = {
name1 = "pound mass per cubic inch",
name2 = "pounds mass per cubic inch",
symbol = "lbm/cu in",
utype = "density",
scale = 27679.904710203122,
default = "g/cm3",
link = "Density",
},
["mg/L"] = {
name1 = "milligram per litre",
name1_us = "milligram per liter",
name2 = "milligrams per litre",
name2_us = "milligrams per liter",
symbol = "mg/L",
utype = "density",
scale = 0.001,
default = "lb/cuin",
link = "Density",
},
["oz/cuin"] = {
name1 = "ounce per cubic inch",
name2 = "ounces per cubic inch",
symbol = "oz/cu in",
utype = "density",
scale = 1729.9940443876951,
default = "g/cm3",
link = "Density",
},
["g/cm3"] = {
per = { "g", "cm3" },
utype = "density",
default = "lb/cuin",
},
["g/m3"] = {
per = { "g", "m3" },
utype = "density",
default = "lb/cuyd",
link = "Density",
},
["Mg/m3"] = {
per = { "Mg", "m3" },
utype = "density",
default = "lb/cuft",
},
["mg/l"] = {
per = { "mg", "ll" },
utype = "density",
default = "oz/cuin",
},
["μg/dL"] = {
per = { "μg", "dL" },
utype = "density",
default = "lb/cuin",
},
["μg/l"] = {
per = { "μg", "ll" },
utype = "density",
default = "oz/cuin",
},
["lb/ft3"] = {
target = "lb/cuft",
},
["lb/yd3"] = {
target = "lb/cuyd",
},
["lbm/in3"] = {
target = "lbm/cuin",
},
["mcg/dL"] = {
target = "μg/dL",
},
["oz/in3"] = {
target = "oz/cuin",
},
["ug/dL"] = {
target = "μg/dL",
},
["ug/l"] = {
target = "μg/l",
},
["B.O.T.U."] = {
name1 = "Board of Trade Unit",
symbol = "B.O.T.U.",
utype = "energy",
scale = 3600000,
default = "MJ",
link = "Kilowatt-hour",
},
["bboe"] = {
name1 = "barrel of oil equivalent",
name2 = "barrels of oil equivalent",
symbol = "bboe",
utype = "energy",
scale = 6117863200,
default = "GJ",
},
["BOE"] = {
name1 = "barrel of oil equivalent",
name2 = "barrels of oil equivalent",
symbol = "BOE",
utype = "energy",
scale = 6117863200,
default = "GJ",
},
["BTU"] = {
name1 = "British thermal unit",
symbol = "BTU",
utype = "energy",
scale = 1055.05585262,
default = "kJ",
},
["Btu"] = {
name1 = "British thermal unit",
symbol = "Btu",
utype = "energy",
scale = 1055.05585262,
default = "kJ",
},
["BTU-39F"] = {
name1 = "British thermal unit (39°F)",
name2 = "British thermal units (39°F)",
symbol = "BTU<sub>39°F</sub>",
utype = "energy",
scale = 1059.67,
default = "kJ",
link = "British thermal unit",
},
["Btu-39F"] = {
name1 = "British thermal unit (39°F)",
name2 = "British thermal units (39°F)",
symbol = "Btu<sub>39°F</sub>",
utype = "energy",
scale = 1059.67,
default = "kJ",
link = "British thermal unit",
},
["BTU-59F"] = {
name1 = "British thermal unit (59°F)",
name2 = "British thermal units (59°F)",
symbol = "BTU<sub>59°F</sub>",
utype = "energy",
scale = 1054.804,
default = "kJ",
link = "British thermal unit",
},
["Btu-59F"] = {
name1 = "British thermal unit (59°F)",
name2 = "British thermal units (59°F)",
symbol = "Btu<sub>59°F</sub>",
utype = "energy",
scale = 1054.804,
default = "kJ",
link = "British thermal unit",
},
["BTU-60F"] = {
name1 = "British thermal unit (60°F)",
name2 = "British thermal units (60°F)",
symbol = "BTU<sub>60°F</sub>",
utype = "energy",
scale = 1054.68,
default = "kJ",
link = "British thermal unit",
},
["Btu-60F"] = {
name1 = "British thermal unit (60°F)",
name2 = "British thermal units (60°F)",
symbol = "Btu<sub>60°F</sub>",
utype = "energy",
scale = 1054.68,
default = "kJ",
link = "British thermal unit",
},
["BTU-63F"] = {
name1 = "British thermal unit (63°F)",
name2 = "British thermal units (63°F)",
symbol = "BTU<sub>63°F</sub>",
utype = "energy",
scale = 1054.6,
default = "kJ",
link = "British thermal unit",
},
["Btu-63F"] = {
name1 = "British thermal unit (63°F)",
name2 = "British thermal units (63°F)",
symbol = "Btu<sub>63°F</sub>",
utype = "energy",
scale = 1054.6,
default = "kJ",
link = "British thermal unit",
},
["BTU-ISO"] = {
name1 = "British thermal unit (ISO)",
name2 = "British thermal units (ISO)",
symbol = "BTU<sub>ISO</sub>",
utype = "energy",
scale = 1055.056,
default = "kJ",
link = "British thermal unit",
},
["Btu-ISO"] = {
target = "BTU-ISO",
},
["BTU-IT"] = {
name1 = "British thermal unit (IT)",
name2 = "British thermal units (IT)",
symbol = "BTU<sub>IT</sub>",
utype = "energy",
scale = 1055.05585262,
default = "kJ",
link = "British thermal unit",
},
["Btu-IT"] = {
name1 = "British thermal unit (IT)",
name2 = "British thermal units (IT)",
symbol = "Btu<sub>IT</sub>",
utype = "energy",
scale = 1055.05585262,
default = "kJ",
link = "British thermal unit",
},
["BTU-mean"] = {
name1 = "British thermal unit (mean)",
name2 = "British thermal units (mean)",
symbol = "BTU<sub>mean</sub>",
utype = "energy",
scale = 1055.87,
default = "kJ",
link = "British thermal unit",
},
["Btu-mean"] = {
name1 = "British thermal unit (mean)",
name2 = "British thermal units (mean)",
symbol = "Btu<sub>mean</sub>",
utype = "energy",
scale = 1055.87,
default = "kJ",
link = "British thermal unit",
},
["BTU-th"] = {
name1 = "British thermal unit (thermochemical)",
name2 = "British thermal units (thermochemical)",
symbol = "BTU<sub>th</sub>",
utype = "energy",
scale = 1054.35026444,
default = "kJ",
link = "British thermal unit",
},
["Btu-th"] = {
name1 = "British thermal unit (thermochemical)",
name2 = "British thermal units (thermochemical)",
symbol = "Btu<sub>th</sub>",
utype = "energy",
scale = 1054.35026444,
default = "kJ",
link = "British thermal unit",
},
["Cal"] = {
name1 = "calorie",
symbol = "Cal",
utype = "energy",
scale = 4184,
default = "kJ",
},
["cal"] = {
name1 = "calorie",
symbol = "cal",
utype = "energy",
scale = 4.184,
default = "J",
},
["Cal-15"] = {
name1 = "Calorie (15°C)",
name2 = "Calories (15°C)",
symbol = "Cal<sub>15</sub>",
utype = "energy",
scale = 4185.8,
default = "kJ",
link = "Calorie",
},
["cal-15"] = {
name1 = "calorie (15°C)",
name2 = "calories (15°C)",
symbol = "cal<sub>15</sub>",
utype = "energy",
scale = 4.1858,
default = "J",
link = "Calorie",
},
["Cal-IT"] = {
name1 = "Calorie (International Steam Table)",
name2 = "Calories (International Steam Table)",
symbol = "Cal<sub>IT</sub>",
utype = "energy",
scale = 4186.8,
default = "kJ",
link = "Calorie",
},
["cal-IT"] = {
name1 = "calorie (International Steam Table)",
name2 = "calories (International Steam Table)",
symbol = "cal<sub>IT</sub>",
utype = "energy",
scale = 4.1868,
default = "J",
link = "Calorie",
},
["Cal-th"] = {
name1 = "Calorie (thermochemical)",
name2 = "Calories (thermochemical)",
symbol = "Cal<sub>th</sub>",
utype = "energy",
scale = 4184,
default = "kJ",
link = "Calorie",
},
["cal-th"] = {
name1 = "calorie (thermochemical)",
name2 = "calories (thermochemical)",
symbol = "cal<sub>th</sub>",
utype = "energy",
scale = 4.184,
default = "J",
link = "Calorie",
},
["CHU-IT"] = {
name1 = "Celsius heat unit (International Table)",
name2 = "Celsius heat units (International Table)",
symbol = "CHU<sub>IT</sub>",
utype = "energy",
scale = 1899.100534716,
default = "kJ",
link = "Conversion of units#Energy",
},
["cufootnaturalgas"] = {
name1 = "cubic foot of natural gas",
name2 = "cubic foot of natural gas",
symbol = "cuftnaturalgas",
usename = 1,
utype = "energy",
scale = 1055055.85262,
default = "MJ",
link = "Conversion of units#Energy",
},
["cuftnaturalgas"] = {
name1 = "cubic foot of natural gas",
name2 = "cubic feet of natural gas",
symbol = "cuftnaturalgas",
usename = 1,
utype = "energy",
scale = 1055055.85262,
default = "MJ",
link = "Conversion of units#Energy",
},
["Eh"] = {
name1 = "Hartree",
symbol = "''E''<sub>h</sub>",
utype = "energy",
scale = 4.35974417e-18,
default = "eV",
},
["erg"] = {
symbol = "erg",
utype = "energy",
scale = 0.0000001,
default = "μJ",
},
["eV"] = {
name1 = "electronvolt",
symbol = "eV",
utype = "energy",
scale = 1.602176487e-19,
default = "aJ",
},
["feV"] = {
name1 = "femtoelectronvolt",
symbol = "feV",
utype = "energy",
scale = 1.602176487e-34,
default = "yJ",
link = "Electronvolt",
},
["foe"] = {
symbol = "foe",
utype = "energy",
scale = 1e44,
default = "YJ",
link = "Foe (unit)",
},
["ftlb"] = {
name1 = "foot-pound",
symbol = "ft⋅lb",
utype = "energy",
alttype = "torque",
scale = 1.3558179483314004,
default = "J",
link = "Foot-pound (energy)",
},
["ftlb-f"] = {
name1 = "foot-pound force",
name2 = "foot-pounds force",
symbol = "ft⋅lb<sub>f</sub>",
utype = "energy",
alttype = "torque",
scale = 1.3558179483314004,
default = "J",
link = "Foot-pound (energy)",
},
["ftlbf"] = {
name1 = "foot-pound force",
name2 = "foot-pounds force",
symbol = "ft⋅lbf",
utype = "energy",
alttype = "torque",
scale = 1.3558179483314004,
default = "J",
link = "Foot-pound (energy)",
},
["ftpdl"] = {
name1 = "foot-poundal",
symbol = "ft⋅pdl",
utype = "energy",
scale = 0.0421401100938048,
default = "J",
},
["GeV"] = {
name1 = "gigaelectronvolt",
symbol = "GeV",
utype = "energy",
scale = 1.602176487e-10,
default = "nJ",
link = "Electronvolt",
},
["gTNT"] = {
name2 = "grams of TNT",
symbol = "gram of TNT",
usename = 1,
utype = "energy",
scale = 4184,
default = "kJ",
link = "TNT equivalent",
},
["Gtoe"] = {
name1 = "gigatonne of oil equivalent",
name2 = "gigatonnes of oil equivalent",
symbol = "Gtoe",
utype = "energy",
scale = 4.1868e19,
default = "EJ",
link = "Tonne of oil equivalent",
},
["GtonTNT"] = {
name2 = "gigatons of TNT",
symbol = "gigaton of TNT",
usename = 1,
utype = "energy",
scale = 4.184e18,
default = "EJ",
link = "TNT equivalent",
},
["GtTNT"] = {
name2 = "gigatonnes of TNT",
symbol = "gigatonne of TNT",
usename = 1,
utype = "energy",
scale = 4.184e18,
default = "EJ",
link = "TNT equivalent",
},
["GW.h"] = {
name1 = "gigawatt-hour",
symbol = "GW⋅h",
utype = "energy",
scale = 3.6e12,
default = "TJ",
link = "Kilowatt-hour",
},
["GWh"] = {
name1 = "gigawatt-hour",
symbol = "GWh",
utype = "energy",
scale = 3.6e12,
default = "TJ",
link = "Kilowatt-hour",
},
["hph"] = {
name1 = "horsepower-hour",
symbol = "hp⋅h",
utype = "energy",
scale = 2684519.537696172792,
default = "kWh",
link = "Horsepower",
},
["inlb"] = {
name1 = "inch-pound",
symbol = "in⋅lb",
utype = "energy",
alttype = "torque",
scale = 0.1129848290276167,
default = "mJ",
link = "Foot-pound (energy)",
},
["inlb-f"] = {
name1 = "inch-pound force",
name2 = "inch-pounds force",
symbol = "in⋅lb<sub>f</sub>",
utype = "energy",
alttype = "torque",
scale = 0.1129848290276167,
default = "mJ",
link = "Foot-pound (energy)",
},
["inlbf"] = {
name1 = "inch-pound force",
name2 = "inch-pounds force",
symbol = "in⋅lbf",
utype = "energy",
alttype = "torque",
scale = 0.1129848290276167,
default = "mJ",
link = "Foot-pound (energy)",
},
["inoz-f"] = {
name1 = "inch-ounce force",
name2 = "inch-ounces force",
symbol = "in⋅oz<sub>f</sub>",
utype = "energy",
alttype = "torque",
scale = 0.00706155181422604375,
default = "mJ",
link = "Foot-pound (energy)",
},
["inozf"] = {
name1 = "inch-ounce force",
name2 = "inch-ounces force",
symbol = "in⋅ozf",
utype = "energy",
alttype = "torque",
scale = 0.00706155181422604375,
default = "mJ",
link = "Foot-pound (energy)",
},
["J"] = {
_name1 = "joule",
_symbol = "J",
utype = "energy",
scale = 1,
prefixes = 1,
default = "cal",
link = "Joule",
},
["kBOE"] = {
name1 = "kilo barrel of oil equivalent",
name2 = "kilo barrels of oil equivalent",
symbol = "kBOE",
utype = "energy",
scale = 6.1178632e12,
default = "TJ",
link = "Barrel of oil equivalent",
},
["kcal"] = {
name1 = "kilocalorie",
symbol = "kcal",
utype = "energy",
scale = 4184,
default = "kJ",
link = "Calorie",
},
["kcal-15"] = {
name1 = "kilocalorie (15°C)",
name2 = "kilocalories (15°C)",
symbol = "kcal<sub>15</sub>",
utype = "energy",
scale = 4185.8,
default = "kJ",
link = "Calorie",
},
["kcal-IT"] = {
name1 = "kilocalorie (International Steam Table)",
name2 = "kilocalories (International Steam Table)",
symbol = "kcal<sub>IT</sub>",
utype = "energy",
scale = 4186.8,
default = "kJ",
link = "Calorie",
},
["kcal-th"] = {
name1 = "kilocalorie (thermochemical)",
name2 = "kilocalories (thermochemical)",
symbol = "kcal<sub>th</sub>",
utype = "energy",
scale = 4184,
default = "kJ",
link = "Calorie",
},
["kerg"] = {
name1 = "kiloerg",
symbol = "kerg",
utype = "energy",
scale = 0.0001,
default = "mJ",
link = "Erg",
},
["keV"] = {
name1 = "kiloelectronvolt",
symbol = "keV",
utype = "energy",
scale = 1.602176487e-16,
default = "fJ",
link = "Electronvolt",
},
["kgTNT"] = {
name2 = "kilograms of TNT",
symbol = "kilogram of TNT",
usename = 1,
utype = "energy",
scale = 4184000,
default = "MJ",
link = "TNT equivalent",
},
["kt(TNT)"] = {
name1 = "kilotonne",
name1_us = "kiloton",
symbol = "kt",
utype = "energy",
scale = 4.184e12,
default = "TJ",
link = "TNT equivalent",
},
["ktoe"] = {
name1 = "kilotonne of oil equivalent",
name2 = "kilotonnes of oil equivalent",
symbol = "ktoe",
utype = "energy",
scale = 4.1868e13,
default = "TJ",
link = "Tonne of oil equivalent",
},
["ktonTNT"] = {
name1 = "kiloton of TNT",
name2 = "kilotons of TNT",
symbol = "kt",
utype = "energy",
scale = 4.184e12,
default = "TJ",
link = "TNT equivalent",
},
["ktTNT"] = {
name2 = "kilotonnes of TNT",
symbol = "kilotonne of TNT",
usename = 1,
utype = "energy",
scale = 4.184e12,
default = "TJ",
link = "TNT equivalent",
},
["kW.h"] = {
name1 = "kilowatt-hour",
symbol = "kW⋅h",
utype = "energy",
scale = 3600000,
default = "MJ",
},
["kWh"] = {
name1 = "kilowatt-hour",
symbol = "kWh",
utype = "energy",
scale = 3600000,
default = "MJ",
},
["Mcal"] = {
name1 = "megacalorie",
symbol = "Mcal",
utype = "energy",
scale = 4184000,
default = "MJ",
link = "Calorie",
},
["mcal"] = {
name1 = "millicalorie",
symbol = "mcal",
utype = "energy",
scale = 0.004184,
default = "mJ",
link = "Calorie",
},
["Mcal-15"] = {
name1 = "megacalorie (15°C)",
name2 = "megacalories (15°C)",
symbol = "Mcal<sub>15</sub>",
utype = "energy",
scale = 4185800,
default = "MJ",
link = "Calorie",
},
["mcal-15"] = {
name1 = "millicalorie (15°C)",
name2 = "millicalories (15°C)",
symbol = "mcal<sub>15</sub>",
utype = "energy",
scale = 0.0041858,
default = "mJ",
link = "Calorie",
},
["Mcal-IT"] = {
name1 = "megacalorie (International Steam Table)",
name2 = "megacalories (International Steam Table)",
symbol = "Mcal<sub>IT</sub>",
utype = "energy",
scale = 4186800,
default = "MJ",
link = "Calorie",
},
["mcal-IT"] = {
name1 = "millicalorie (International Steam Table)",
name2 = "millicalories (International Steam Table)",
symbol = "mcal<sub>IT</sub>",
utype = "energy",
scale = 0.0041868,
default = "mJ",
link = "Calorie",
},
["Mcal-th"] = {
name1 = "megacalorie (thermochemical)",
name2 = "megacalories (thermochemical)",
symbol = "Mcal<sub>th</sub>",
utype = "energy",
scale = 4184000,
default = "MJ",
link = "Calorie",
},
["mcal-th"] = {
name1 = "millicalorie (thermochemical)",
name2 = "millicalories (thermochemical)",
symbol = "mcal<sub>th</sub>",
utype = "energy",
scale = 0.004184,
default = "mJ",
link = "Calorie",
},
["Merg"] = {
name1 = "megaerg",
symbol = "Merg",
utype = "energy",
scale = 0.1,
default = "J",
link = "Erg",
},
["merg"] = {
name1 = "millierg",
symbol = "merg",
utype = "energy",
scale = 0.0000000001,
default = "μJ",
link = "Erg",
},
["MeV"] = {
name1 = "megaelectronvolt",
symbol = "MeV",
utype = "energy",
scale = 1.602176487e-13,
default = "pJ",
link = "Electronvolt",
},
["meV"] = {
name1 = "millielectronvolt",
symbol = "meV",
utype = "energy",
scale = 1.602176487e-22,
default = "zJ",
link = "Electronvolt",
},
["MMBtu"] = {
name1 = "million British thermal units",
name2 = "million British thermal units",
symbol = "MMBtu",
utype = "energy",
scale = 1055055852.62,
default = "GJ",
link = "British thermal unit",
},
["Mt(TNT)"] = {
name1 = "megatonne",
name1_us = "megaton",
symbol = "Mt",
utype = "energy",
scale = 4.184e15,
default = "PJ",
link = "TNT equivalent",
},
["Mtoe"] = {
name1 = "megatonne of oil equivalent",
name2 = "megatonnes of oil equivalent",
symbol = "Mtoe",
utype = "energy",
scale = 4.1868e16,
default = "PJ",
link = "Tonne of oil equivalent",
},
["MtonTNT"] = {
name1 = "megaton of TNT",
name2 = "megatons of TNT",
symbol = "Mt",
utype = "energy",
scale = 4.184e15,
default = "PJ",
link = "TNT equivalent",
},
["mtonTNT"] = {
name2 = "millitons of TNT",
symbol = "milliton of TNT",
usename = 1,
utype = "energy",
scale = 4184000,
default = "MJ",
link = "TNT equivalent",
},
["MtTNT"] = {
name2 = "megatonnes of TNT",
symbol = "megatonne of TNT",
usename = 1,
utype = "energy",
scale = 4.184e15,
default = "PJ",
link = "TNT equivalent",
},
["mtTNT"] = {
name2 = "millitonnes of TNT",
symbol = "millitonne of TNT",
usename = 1,
utype = "energy",
scale = 4184000,
default = "MJ",
link = "TNT equivalent",
},
["MW.h"] = {
name1 = "megawatt-hour",
symbol = "MW⋅h",
utype = "energy",
scale = 3600000000,
default = "GJ",
link = "Kilowatt-hour",
},
["mW.h"] = {
name1 = "milliwatt-hour",
symbol = "mW⋅h",
utype = "energy",
scale = 3.6,
default = "J",
link = "Kilowatt-hour",
},
["MWh"] = {
name1 = "megawatt-hour",
symbol = "MWh",
utype = "energy",
scale = 3600000000,
default = "GJ",
link = "Kilowatt-hour",
},
["mWh"] = {
name1 = "milliwatt-hour",
symbol = "mWh",
utype = "energy",
scale = 3.6,
default = "J",
link = "Kilowatt-hour",
},
["neV"] = {
name1 = "nanoelectronvolt",
symbol = "neV",
utype = "energy",
scale = 1.602176487e-28,
default = "yJ",
link = "Electronvolt",
},
["PeV"] = {
name1 = "petaelectronvolt",
symbol = "PeV",
utype = "energy",
scale = 0.0001602176487,
default = "mJ",
link = "Electronvolt",
},
["peV"] = {
name1 = "picoelectronvolt",
symbol = "peV",
utype = "energy",
scale = 1.602176487e-31,
default = "yJ",
link = "Electronvolt",
},
["PSh"] = {
name1 = "Pferdestärkenstunde",
symbol = "PSh",
utype = "energy",
scale = 2647795.5,
default = "kWh",
},
["quad"] = {
name1 = "quadrillion British thermal units",
name2 = "quadrillion British thermal units",
symbol = "quad",
utype = "energy",
scale = 1.054804e18,
default = "EJ",
link = "Quad (unit)",
},
["Ry"] = {
name1 = "rydberg",
symbol = "Ry",
utype = "energy",
scale = 2.1798741e-18,
default = "eV",
link = "Rydberg constant",
},
["scf"] = {
name1 = "standard cubic foot",
name2 = "standard cubic feet",
symbol = "scf",
utype = "energy",
scale = 2869.2044809344,
default = "kJ",
},
["scfoot"] = {
name1 = "standard cubic foot",
name2 = "standard cubic foot",
symbol = "scf",
utype = "energy",
scale = 2869.2044809344,
default = "kJ",
},
["t(TNT)"] = {
name1 = "tonne",
name1_us = "ton",
symbol = "t",
utype = "energy",
scale = 4184000000,
default = "GJ",
link = "TNT equivalent",
},
["TeV"] = {
name1 = "teraelectronvolt",
symbol = "TeV",
utype = "energy",
scale = 1.602176487e-7,
default = "μJ",
link = "Electronvolt",
},
["th"] = {
name1 = "thermie",
symbol = "th",
utype = "energy",
scale = 4186800,
default = "MJ",
link = "Conversion of units#Energy",
},
["thm-EC"] = {
name1 = "therm (EC)",
name2 = "therms (EC)",
symbol = "thm (EC)",
utype = "energy",
scale = 105506000,
default = "MJ",
link = "Therm",
},
["thm-UK"] = {
name1 = "therm (UK)",
name2 = "therms (UK)",
symbol = "thm (UK)",
utype = "energy",
scale = 105505585.257348,
default = "MJ",
link = "Therm",
},
["thm-US"] = {
name1 = "therm (US)",
name1_us = "therm (U.S.)",
name2 = "therms (US)",
name2_us = "therms (U.S.)",
symbol = "thm (US)",
sym_us = "thm (U.S.)",
utype = "energy",
scale = 105480400,
default = "MJ",
link = "Therm",
},
["toe"] = {
name1 = "tonne of oil equivalent",
name2 = "tonnes of oil equivalent",
symbol = "toe",
utype = "energy",
scale = 41868000000,
default = "GJ",
},
["tonTNT"] = {
name2 = "tons of TNT",
symbol = "ton of TNT",
usename = 1,
utype = "energy",
scale = 4184000000,
default = "GJ",
link = "TNT equivalent",
},
["tTNT"] = {
name2 = "tonnes of TNT",
symbol = "tonne of TNT",
usename = 1,
utype = "energy",
scale = 4184000000,
default = "GJ",
link = "TNT equivalent",
},
["TtonTNT"] = {
name2 = "teratons of TNT",
symbol = "teraton of TNT",
usename = 1,
utype = "energy",
scale = 4.184e21,
default = "ZJ",
link = "TNT equivalent",
},
["TtTNT"] = {
name2 = "teratonnes of TNT",
symbol = "teratonne of TNT",
usename = 1,
utype = "energy",
scale = 4.184e21,
default = "ZJ",
link = "TNT equivalent",
},
["TW.h"] = {
name1 = "terawatt-hour",
symbol = "TW⋅h",
utype = "energy",
scale = 3.6e15,
default = "PJ",
link = "Kilowatt-hour",
},
["TWh"] = {
name1 = "terawatt-hour",
symbol = "TWh",
utype = "energy",
scale = 3.6e15,
default = "PJ",
link = "Kilowatt-hour",
},
["W.h"] = {
name1 = "watt-hour",
symbol = "W⋅h",
utype = "energy",
scale = 3600,
default = "kJ",
link = "Kilowatt-hour",
},
["Wh"] = {
name1 = "watt-hour",
symbol = "Wh",
utype = "energy",
scale = 3600,
default = "kJ",
link = "Kilowatt-hour",
},
["μerg"] = {
name1 = "microerg",
symbol = "μerg",
utype = "energy",
scale = 1e-13,
default = "nJ",
link = "Erg",
},
["μeV"] = {
name1 = "microelectronvolt",
symbol = "μeV",
utype = "energy",
scale = 1.602176487e-25,
default = "yJ",
link = "Electronvolt",
},
["μW.h"] = {
name1 = "microwatt-hour",
symbol = "μW⋅h",
utype = "energy",
scale = 0.0036,
default = "mJ",
link = "Kilowatt-hour",
},
["μWh"] = {
name1 = "microwatt-hour",
symbol = "μWh",
utype = "energy",
scale = 0.0036,
default = "mJ",
link = "Kilowatt-hour",
},
["-kW.h"] = {
target = "kW.h",
link = "Kilowatt hour",
},
["btu"] = {
target = "BTU",
},
["Calorie"] = {
target = "Cal",
},
["ft.lbf"] = {
target = "ftlbf",
},
["ft·lbf"] = {
target = "ftlbf",
},
["g-cal-15"] = {
target = "cal-15",
},
["g-cal-IT"] = {
target = "cal-IT",
},
["g-cal-th"] = {
target = "cal-th",
},
["g-kcal-15"] = {
target = "kcal-15",
},
["g-kcal-IT"] = {
target = "kcal-IT",
},
["g-kcal-th"] = {
target = "kcal-th",
},
["g-Mcal-15"] = {
target = "Mcal-15",
},
["g-mcal-15"] = {
target = "mcal-15",
},
["g-Mcal-IT"] = {
target = "Mcal-IT",
},
["g-mcal-IT"] = {
target = "mcal-IT",
},
["g-Mcal-th"] = {
target = "Mcal-th",
},
["g-mcal-th"] = {
target = "mcal-th",
},
["GW-h"] = {
target = "GW.h",
},
["GW·h"] = {
target = "GW.h",
},
["Hartree"] = {
target = "Eh",
},
["hp.h"] = {
target = "hph",
},
["in.lb-f"] = {
target = "inlb-f",
},
["in.lbf"] = {
target = "inlbf",
},
["in.oz-f"] = {
target = "inoz-f",
},
["in.ozf"] = {
target = "inozf",
},
["kbboe"] = {
target = "kBOE",
symbol = "kbboe",
},
["kg-cal-15"] = {
target = "Cal-15",
},
["kg-cal-IT"] = {
target = "Cal-IT",
},
["kg-cal-th"] = {
target = "Cal-th",
},
["kW-h"] = {
target = "kW.h",
},
["kW·h"] = {
target = "kW.h",
},
["MW-h"] = {
target = "MW.h",
},
["mW-h"] = {
target = "mW.h",
},
["MW·h"] = {
target = "MW.h",
},
["TW-h"] = {
target = "TW.h",
},
["uerg"] = {
target = "μerg",
},
["ueV"] = {
target = "μeV",
},
["uW-h"] = {
target = "μW.h",
},
["uW.h"] = {
target = "μW.h",
},
["uWh"] = {
target = "μWh",
},
["W-h"] = {
target = "W.h",
},
["eVpar"] = {
_name1 = "electronvolt",
_symbol = "eV",
utype = "energy per chemical amount",
scale = 96485.329522144166,
prefixes = 1,
default = "kcal/mol",
link = "Electronvolt",
},
["kcal/mol"] = {
per = { "kcal", "mol" },
utype = "energy per chemical amount",
default = "kJ/mol",
link = "Kilocalorie per mole",
},
["kJ/mol"] = {
per = { "kJ", "mol" },
utype = "energy per chemical amount",
default = "kcal/mol",
link = "Joule per mole",
},
["kWh/100 km"] = {
name1 = "kilowatt-hour per 100 kilometres",
name1_us = "kilowatt-hour per 100 kilometers",
name2 = "kilowatt-hours per 100 kilometres",
name2_us = "kilowatt-hours per 100 kilometers",
symbol = "kW⋅h/100 km",
utype = "energy per unit length",
scale = 36,
default = "MJ/km kWh/mi",
link = "Kilowatt-hour",
},
["kWh/100 mi"] = {
name1 = "kilowatt-hour per 100 miles",
name2 = "kilowatt-hours per 100 miles",
symbol = "kW⋅h/100 mi",
utype = "energy per unit length",
scale = 22.3694,
default = "mpge",
link = "Miles per gallon gasoline equivalent",
},
["MJ/100 km"] = {
name1 = "megajoule per 100 kilometres",
name1_us = "megajoule per 100 kilometers",
name2 = "megajoules per 100 kilometres",
name2_us = "megajoules per 100 kilometers",
symbol = "MJ/100 km",
utype = "energy per unit length",
scale = 10,
default = "BTU/mi",
link = "British thermal unit",
},
["mpge"] = {
name1 = "mile per gallon gasoline equivalent",
name2 = "miles per gallon gasoline equivalent",
symbol = "mpg‑e",
utype = "energy per unit length",
scale = 1.3263314048360777e-5,
invert = -1,
iscomplex= true,
default = "kWh/100 mi",
link = "Miles per gallon gasoline equivalent",
},
["BTU/mi"] = {
per = { "BTU", "mi" },
utype = "energy per unit length",
default = "v > 1525 ! M ! k ! J/km",
},
["kJ/km"] = {
per = { "kJ", "km" },
utype = "energy per unit length",
default = "BTU/mi",
},
["kWh/km"] = {
per = { "-kW.h", "km" },
utype = "energy per unit length",
default = "MJ/km kWh/mi",
},
["kWh/mi"] = {
per = { "-kW.h", "mi" },
utype = "energy per unit length",
default = "kWh/km MJ/km",
},
["MJ/km"] = {
per = { "MJ", "km" },
utype = "energy per unit length",
default = "BTU/mi",
},
["mpg-e"] = {
target = "mpge",
},
["BTU/lb"] = {
name1 = "British thermal unit per pound",
name2 = "British thermal units per pound",
symbol = "BTU/lb",
utype = "energy per unit mass",
scale = 2326,
default = "kJ/kg",
link = "British thermal unit",
},
["cal/g"] = {
name1 = "calorie per gram",
name2 = "calories per gram",
symbol = "cal/g",
utype = "energy per unit mass",
scale = 4184,
default = "J/g",
},
["GJ/kg"] = {
name1 = "gigajoule per kilogram",
name2 = "gigajoules per kilogram",
symbol = "GJ/kg",
utype = "energy per unit mass",
scale = 1e9,
default = "ktTNT/t",
link = "Specific energy",
},
["J/g"] = {
name1 = "joule per gram",
name2 = "joules per gram",
symbol = "J/g",
utype = "energy per unit mass",
scale = 1000,
default = "kcal/g",
link = "Specific energy",
},
["kcal/g"] = {
name1 = "kilocalorie per gram",
name2 = "kilocalories per gram",
symbol = "kcal/g",
utype = "energy per unit mass",
scale = 4184000,
default = "kJ/g",
},
["kJ/g"] = {
name1 = "kilojoule per gram",
name2 = "kilojoules per gram",
symbol = "kJ/g",
utype = "energy per unit mass",
scale = 1000000,
default = "kcal/g",
link = "Specific energy",
},
["kJ/kg"] = {
name1 = "kilojoule per kilogram",
name2 = "kilojoules per kilogram",
symbol = "kJ/kg",
utype = "energy per unit mass",
scale = 1000,
default = "BTU/lb",
link = "Specific energy",
},
["ktonTNT/MT"] = {
name2 = "kilotons of TNT per metric ton",
symbol = "kiloton of TNT per metric ton",
usename = 1,
utype = "energy per unit mass",
scale = 4184000000,
default = "GJ/kg",
link = "TNT equivalent",
},
["ktTNT/t"] = {
name2 = "kilotonnes of TNT per tonne",
symbol = "kilotonne of TNT per tonne",
usename = 1,
utype = "energy per unit mass",
scale = 4184000000,
default = "GJ/kg",
link = "TNT equivalent",
},
["MtonTNT/MT"] = {
name2 = "megatons of TNT per metric ton",
symbol = "megaton of TNT per metric ton",
usename = 1,
utype = "energy per unit mass",
scale = 4.184e12,
default = "TJ/kg",
link = "TNT equivalent",
},
["MtTNT/MT"] = {
name2 = "megatonnes of TNT per tonne",
symbol = "megatonne of TNT per tonne",
usename = 1,
utype = "energy per unit mass",
scale = 4.184e12,
default = "TJ/kg",
link = "TNT equivalent",
},
["TJ/kg"] = {
name1 = "terajoule per kilogram",
name2 = "terajoules per kilogram",
symbol = "TJ/kg",
utype = "energy per unit mass",
scale = 1e12,
default = "MtTNT/MT",
link = "Specific energy",
},
["Cal/g"] = {
per = { "Cal", "g" },
utype = "energy per unit mass",
default = "kJ/g",
},
["BTU/cuft"] = {
per = { "BTU", "cuft" },
utype = "energy per unit volume",
default = "kJ/L",
},
["Cal/12USoz(mL)serve"] = {
per = { "Cal", "-12USoz(mL)serve" },
utype = "energy per unit volume",
default = "kJ/L",
},
["Cal/12USoz(ml)serve"] = {
per = { "Cal", "-12USoz(ml)serve" },
utype = "energy per unit volume",
default = "kJ/l",
},
["Cal/12USozserve"] = {
per = { "Cal", "-12USozserve" },
utype = "energy per unit volume",
default = "kJ/L",
},
["Cal/USoz"] = {
per = { "Cal", "USoz" },
utype = "energy per unit volume",
default = "kJ/ml",
},
["kJ/L"] = {
per = { "kJ", "L" },
utype = "energy per unit volume",
default = "BTU/cuft",
},
["kJ/l"] = {
per = { "kJ", "ll" },
utype = "energy per unit volume",
default = "BTU/cuft",
},
["kJ/ml"] = {
per = { "kJ", "ml" },
utype = "energy per unit volume",
default = "Cal/USoz",
},
["MJ/m3"] = {
per = { "MJ", "m3" },
utype = "energy per unit volume",
default = "BTU/cuft",
},
["Sv"] = {
_name1 = "sievert",
_symbol = "Sv",
utype = "equivalent radiation dose",
scale = 1,
prefixes = 1,
default = "rem",
link = "Sievert",
},
["rem"] = {
_name1 = "rem",
_symbol = "rem",
utype = "equivalent radiation dose",
scale = 0.01,
prefixes = 1,
default = "Sv",
link = "Roentgen equivalent man",
},
["g/km"] = {
name1 = "gram per kilometre",
name1_us = "gram per kilometer",
name2 = "grams per kilometre",
name2_us = "grams per kilometer",
symbol = "g/km",
utype = "exhaust emission",
scale = 1e-6,
default = "oz/mi",
link = "Exhaust gas",
},
["g/mi"] = {
name1 = "gram per mile",
name2 = "grams per mile",
symbol = "g/mi",
utype = "exhaust emission",
scale = 6.2137119223733397e-7,
default = "g/km",
link = "Exhaust gas",
},
["gCO2/km"] = {
name1 = "gram of CO<sub>2</sub> per kilometre",
name1_us = "gram of CO<sub>2</sub> per kilometer",
name2 = "grams of CO<sub>2</sub> per kilometre",
name2_us = "grams of CO<sub>2</sub> per kilometer",
symbol = "g(CO<sub>2</sub>)/km",
utype = "exhaust emission",
scale = 1e-6,
default = "ozCO2/mi",
link = "Exhaust gas",
},
["gCO2/mi"] = {
name1 = "gram of CO<sub>2</sub> per mile",
name2 = "grams of CO<sub>2</sub> per mile",
symbol = "g(CO<sub>2</sub>)/mi",
utype = "exhaust emission",
scale = 6.2137119223733397e-7,
default = "gCO2/km",
link = "Exhaust gas",
},
["kg/km"] = {
name1 = "kilogram per kilometre",
name1_us = "kilogram per kilometer",
name2 = "kilograms per kilometre",
name2_us = "kilograms per kilometer",
symbol = "kg/km",
utype = "exhaust emission",
scale = 0.001,
default = "lb/mi",
link = "Exhaust gas",
},
["kgCO2/km"] = {
name1 = "kilogram of CO<sub>2</sub> per kilometre",
name1_us = "kilogram of CO<sub>2</sub> per kilometer",
name2 = "kilograms of CO<sub>2</sub> per kilometre",
name2_us = "kilograms of CO<sub>2</sub> per kilometer",
symbol = "kg(CO<sub>2</sub>)/km",
utype = "exhaust emission",
scale = 0.001,
default = "lbCO2/mi",
link = "Exhaust gas",
},
["lb/mi"] = {
name1 = "pound per mile",
name2 = "pounds per mile",
symbol = "lb/mi",
utype = "exhaust emission",
scale = 0.00028184923173665794,
default = "kg/km",
link = "Exhaust gas",
},
["lbCO2/mi"] = {
name1 = "pound of CO<sub>2</sub> per mile",
name2 = "pounds of CO<sub>2</sub> per mile",
symbol = "lb(CO<sub>2</sub>)/mi",
utype = "exhaust emission",
scale = 0.00028184923173665794,
default = "kgCO2/km",
link = "Exhaust gas",
},
["oz/mi"] = {
name1 = "ounce per mile",
name2 = "ounces per mile",
symbol = "oz/mi",
utype = "exhaust emission",
scale = 1.7615576983541121e-5,
default = "g/km",
link = "Exhaust gas",
},
["ozCO2/mi"] = {
name1 = "ounce of CO<sub>2</sub> per mile",
name2 = "ounces of CO<sub>2</sub> per mile",
symbol = "oz(CO<sub>2</sub>)/mi",
utype = "exhaust emission",
scale = 1.7615576983541121e-5,
default = "gCO2/km",
link = "Exhaust gas",
},
["cuft/a"] = {
name1 = "cubic foot per annum",
name2 = "cubic feet per annum",
symbol = "cu ft/a",
utype = "flow",
scale = 8.9730672142368242e-10,
default = "m3/a",
link = "Cubic foot per second",
},
["cuft/d"] = {
name1 = "cubic foot per day",
name2 = "cubic feet per day",
symbol = "cu ft/d",
utype = "flow",
scale = 3.2774128000000003e-7,
default = "m3/d",
link = "Cubic foot per second",
},
["cuft/h"] = {
name1 = "cubic foot per hour",
name2 = "cubic feet per hour",
symbol = "cu ft/h",
utype = "flow",
scale = 7.8657907200000004e-6,
default = "m3/h",
link = "Cubic foot per second",
},
["cuft/min"] = {
name1 = "cubic foot per minute",
name2 = "cubic feet per minute",
symbol = "cu ft/min",
utype = "flow",
scale = 0.00047194744319999999,
default = "m3/min",
},
["cuft/s"] = {
name1 = "cubic foot per second",
name2 = "cubic feet per second",
symbol = "cu ft/s",
utype = "flow",
scale = 28316846592e-12,
default = "m3/s",
},
["cumi/a"] = {
name1 = "cubic mile per annum",
name2 = "cubic miles per annum",
symbol = "cu mi/a",
utype = "flow",
scale = 132.08171170940057,
default = "km3/a",
link = "Cubic foot per second",
},
["cuyd/h"] = {
name1 = "cubic yard per hour",
name2 = "cubic yards per hour",
symbol = "cuyd/h",
utype = "flow",
scale = 0.00021237634944000001,
default = "m3/h",
link = "Cubic foot per second",
},
["cuyd/s"] = {
name1 = "cubic yard per second",
name2 = "cubic yards per second",
symbol = "cu yd/s",
utype = "flow",
scale = 0.76455485798400002,
default = "m3/s",
},
["Goilbbl/a"] = {
name1 = "billion barrels per year",
name2 = "billion barrels per year",
symbol = "Gbbl/a",
utype = "flow",
scale = 5.0380033629933836,
default = "v * 1.58987294928 < 10 ! e6 ! e9 ! m3/a",
link = "Barrel per day",
},
["impgal/h"] = {
name1 = "imperial gallon per hour",
name2 = "imperial gallons per hour",
symbol = "imp gal/h",
utype = "flow",
scale = 1.2628027777777779e-6,
default = "m3/h",
link = "Gallon",
},
["impgal/min"] = {
name1 = "imperial gallon per minute",
name2 = "imperial gallons per minute",
symbol = "imp gal/min",
utype = "flow",
scale = 7.5768166666666671e-5,
default = "m3/s",
link = "Gallon",
},
["impgal/s"] = {
name1 = "imperial gallon per second",
name2 = "imperial gallons per second",
symbol = "impgal/s",
utype = "flow",
scale = 0.00454609,
default = "m3/s",
link = "Imperial gallons per second",
},
["km3/a"] = {
name1 = "cubic kilometre per annum",
name1_us = "cubic kilometer per annum",
name2 = "cubic kilometres per annum",
name2_us = "cubic kilometers per annum",
symbol = "km<sup>3</sup>/a",
utype = "flow",
scale = 31.68808781402895,
default = "cumi/a",
link = "Cubic metre per second",
},
["km3/d"] = {
name1 = "cubic kilometre per day",
name1_us = "cubic kilometer per day",
name2 = "cubic kilometres per day",
name2_us = "cubic kilometers per day",
symbol = "km<sup>3</sup>/d",
utype = "flow",
scale = 11574.074074074075,
default = "cuft/d",
link = "Cubic metre per second",
},
["koilbbl/a"] = {
name1 = "thousand barrels per year",
name2 = "thousand barrels per year",
symbol = "kbbl/a",
utype = "flow",
scale = 5.0380033629933841e-6,
default = "v * 1.58987294928 < 10 ! ! e3 ! m3/a",
link = "Barrel per day",
},
["koilbbl/d"] = {
name1 = "thousand barrels per day",
name2 = "thousand barrels per day",
symbol = "kbbl/d",
utype = "flow",
scale = 0.0018401307283333335,
default = "v * 1.58987294928 < 10 ! ! e3 ! m3/d",
link = "Barrel per day",
},
["L/h"] = {
name1 = "litre per hour",
name1_us = "liter per hour",
name2 = "litres per hour",
name2_us = "liters per hour",
symbol = "L/h",
utype = "flow",
scale = 2.7777777777777776e-7,
default = "impgal/h USgal/h",
link = "Cubic metre per second",
},
["L/min"] = {
name1 = "litre per minute",
name1_us = "liter per minute",
name2 = "litres per minute",
name2_us = "liters per minute",
symbol = "L/min",
utype = "flow",
scale = 1.6666666666666667e-5,
default = "impgal/min USgal/min",
link = "Cubic metre per second",
},
["L/s"] = {
name1 = "litre per second",
name1_us = "liter per second",
name2 = "litres per second",
name2_us = "liters per second",
symbol = "L/s",
utype = "flow",
scale = 0.001,
default = "cuft/s",
link = "Cubic metre per second",
},
["m3/a"] = {
name1 = "cubic metre per annum",
name1_us = "cubic meter per annum",
name2 = "cubic metres per annum",
name2_us = "cubic meters per annum",
symbol = "m<sup>3</sup>/a",
utype = "flow",
scale = 3.1688087814028947e-8,
default = "cuft/a",
link = "Cubic metre per second",
},
["m3/d"] = {
name1 = "cubic metre per day",
name1_us = "cubic meter per day",
name2 = "cubic metres per day",
name2_us = "cubic meters per day",
symbol = "m<sup>3</sup>/d",
utype = "flow",
scale = 1.1574074074074073e-5,
default = "cuft/d",
link = "Cubic metre per second",
},
["m3/h"] = {
name1 = "cubic metre per hour",
name1_us = "cubic meter per hour",
name2 = "cubic metres per hour",
name2_us = "cubic meters per hour",
symbol = "m<sup>3</sup>/h",
utype = "flow",
scale = 0.00027777777777777778,
default = "cuft/h",
link = "Cubic metre per second",
},
["m3/min"] = {
name1 = "cubic metre per minute",
name1_us = "cubic meter per minute",
name2 = "cubic metres per minute",
name2_us = "cubic meters per minute",
symbol = "m<sup>3</sup>/min",
utype = "flow",
scale = 0.016666666666666666,
default = "cuft/min",
link = "Cubic metre per second",
},
["m3/s"] = {
name1 = "cubic metre per second",
name1_us = "cubic meter per second",
name2 = "cubic metres per second",
name2_us = "cubic meters per second",
symbol = "m<sup>3</sup>/s",
utype = "flow",
scale = 1,
default = "cuft/s",
},
["Moilbbl/a"] = {
name1 = "million barrels per year",
name2 = "million barrels per year",
symbol = "Mbbl/a",
utype = "flow",
scale = 0.0050380033629933837,
default = "v * 1.58987294928 < 10 ! e3 ! e6 ! m3/a",
link = "Barrel per day",
},
["Moilbbl/d"] = {
name1 = "million barrels per day",
name2 = "million barrels per day",
symbol = "Mbbl/d",
utype = "flow",
scale = 1.8401307283333335,
default = "v * 1.58987294928 < 10 ! e3 ! e6 ! m3/d",
link = "Barrel per day",
},
["oilbbl/a"] = {
name1 = "barrel per year",
name2 = "barrels per year",
symbol = "bbl/a",
utype = "flow",
scale = 5.0380033629933841e-9,
default = "m3/a",
link = "Barrel per day",
},
["oilbbl/d"] = {
name1 = "barrel per day",
name2 = "barrels per day",
symbol = "bbl/d",
utype = "flow",
scale = 1.8401307283333336e-6,
default = "m3/d",
},
["Toilbbl/a"] = {
name1 = "trillion barrels per year",
name2 = "trillion barrels per year",
symbol = "Tbbl/a",
utype = "flow",
scale = 5038.0033629933832,
default = "v * 1.58987294928 < 10 ! e9 ! e12 ! m3/a",
link = "Barrel per day",
},
["U.S.gal/d"] = {
name1 = "U.S. gallon per day",
name2 = "U.S. gallons per day",
symbol = "U.S. gal/d",
utype = "flow",
scale = 4.3812636388888893e-8,
default = "m3/s",
customary= 1,
},
["U.S.gal/h"] = {
name1 = "gallon per hour",
name2 = "gallons per hour",
symbol = "gal/h",
utype = "flow",
scale = 1.0515032733333334e-6,
default = "m3/h",
link = "Gallon",
customary= 2,
},
["U.S.gal/min"] = {
name1 = "U.S. gallon per minute",
name2 = "U.S. gallons per minute",
symbol = "U.S. gal/min",
utype = "flow",
scale = 6.3090196400000003e-5,
default = "m3/s",
link = "Gallon",
},
["USgal/a"] = {
name1 = "US gallon per year",
name2 = "US gallons per year",
symbol = "US gal/a",
utype = "flow",
scale = 1.1995246102365199e-10,
default = "m3/s",
},
["USgal/d"] = {
name1 = "US gallon per day",
name2 = "US gallons per day",
symbol = "US gal/d",
utype = "flow",
scale = 4.3812636388888893e-8,
default = "m3/s",
},
["USgal/h"] = {
name1 = "gallon per hour",
name2 = "gallons per hour",
symbol = "gal/h",
utype = "flow",
scale = 1.0515032733333334e-6,
default = "m3/h",
link = "Gallon",
customary= 1,
},
["USgal/min"] = {
name1 = "US gallon per minute",
name2 = "US gallons per minute",
symbol = "US gal/min",
utype = "flow",
scale = 6.3090196400000003e-5,
default = "m3/s",
link = "Gallon",
},
["USgal/s"] = {
name1 = "US gallon per second",
name1_us = "U.S. gallon per second",
name2 = "US gallons per second",
name2_us = "U.S. gallons per second",
symbol = "USgal/s",
utype = "flow",
scale = 0.003785411784,
default = "m3/s",
link = "US gallons per second",
},
["ft3/a"] = {
target = "cuft/a",
},
["ft3/d"] = {
target = "cuft/d",
},
["ft3/h"] = {
target = "cuft/h",
},
["ft3/s"] = {
target = "cuft/s",
},
["Gcuft/a"] = {
target = "e9cuft/a",
},
["Gcuft/d"] = {
target = "e9cuft/d",
},
["kcuft/a"] = {
target = "e3cuft/a",
},
["kcuft/d"] = {
target = "e3cuft/d",
},
["kcuft/s"] = {
target = "e3cuft/s",
},
["Mcuft/a"] = {
target = "e6cuft/a",
},
["Mcuft/d"] = {
target = "e6cuft/d",
},
["Mcuft/s"] = {
target = "e6cuft/s",
},
["m³/s"] = {
target = "m3/s",
},
["Tcuft/a"] = {
target = "e12cuft/a",
},
["Tcuft/d"] = {
target = "e12cuft/d",
},
["u.s.gal/min"] = {
target = "U.S.gal/min",
},
["usgal/min"] = {
target = "USgal/min",
},
["-LTf"] = {
name1 = "long ton-force",
name2 = "long tons-force",
symbol = "LTf",
utype = "force",
scale = 9964.01641818352,
default = "kN",
},
["-STf"] = {
name1 = "short ton-force",
name2 = "short tons-force",
symbol = "STf",
utype = "force",
scale = 8896.443230521,
default = "kN",
},
["dyn"] = {
name1 = "dyne",
symbol = "dyn",
utype = "force",
scale = 0.00001,
default = "gr-f",
},
["g-f"] = {
name1 = "gram-force",
name2 = "grams-force",
symbol = "g<sub>f</sub>",
utype = "force",
scale = 0.00980665,
default = "mN oz-f",
link = "Kilogram-force",
},
["gf"] = {
name1 = "gram-force",
name2 = "grams-force",
symbol = "gf",
utype = "force",
scale = 0.00980665,
default = "mN ozf",
link = "Kilogram-force",
},
["gr-f"] = {
name1 = "grain-force",
name2 = "grains-force",
symbol = "gr<sub>f</sub>",
utype = "force",
scale = 0.0006354602307515,
default = "μN",
link = "Pound (force)",
},
["grf"] = {
name1 = "grain-force",
name2 = "grains-force",
symbol = "grf",
utype = "force",
scale = 0.0006354602307515,
default = "μN",
link = "Pound (force)",
},
["kdyn"] = {
name1 = "kilodyne",
symbol = "kdyn",
utype = "force",
scale = 0.01,
default = "oz-f",
link = "Dyne",
},
["kg-f"] = {
name1 = "kilogram-force",
name2 = "kilograms-force",
symbol = "kg<sub>f</sub>",
utype = "force",
scale = 9.80665,
default = "N lb-f",
},
["kgf"] = {
name1 = "kilogram-force",
name2 = "kilograms-force",
symbol = "kgf",
utype = "force",
scale = 9.80665,
default = "N lbf",
},
["kp"] = {
name1 = "kilopond",
symbol = "kp",
utype = "force",
scale = 9.80665,
default = "N lb-f",
link = "Kilogram-force",
},
["L/T-f"] = {
name1 = "long ton-force",
name2 = "long tons-force",
symbol = "L/T<sub>f</sub>",
utype = "force",
scale = 9964.01641818352,
default = "kN",
},
["L/Tf"] = {
name1 = "long ton-force",
name2 = "long tons-force",
symbol = "L/Tf",
utype = "force",
scale = 9964.01641818352,
default = "kN",
},
["lb-f"] = {
name1 = "pound-force",
name2 = "pounds-force",
symbol = "lb<sub>f</sub>",
utype = "force",
scale = 4.4482216152605,
default = "N",
link = "Pound (force)",
},
["lbf"] = {
name1 = "pound-force",
name2 = "pounds-force",
symbol = "lbf",
utype = "force",
scale = 4.4482216152605,
default = "N",
link = "Pound (force)",
},
["lb(f)"] = {
name1 = "pound",
symbol = "lb",
utype = "force",
scale = 4.4482216152605,
default = "N",
link = "Pound (force)",
},
["LT-f"] = {
name1 = "long ton-force",
name2 = "long tons-force",
symbol = "LT<sub>f</sub>",
utype = "force",
scale = 9964.01641818352,
default = "kN",
},
["LTf"] = {
name1 = "long ton-force",
name2 = "long tons-force",
symbol = "LTf",
usename = 1,
utype = "force",
scale = 9964.01641818352,
default = "kN",
},
["Mdyn"] = {
name1 = "megadyne",
symbol = "Mdyn",
utype = "force",
scale = 10,
default = "lb-f",
link = "Dyne",
},
["mdyn"] = {
name1 = "millidyne",
symbol = "mdyn",
utype = "force",
scale = 0.00000001,
default = "gr-f",
link = "Dyne",
},
["mg-f"] = {
name1 = "milligram-force",
name2 = "milligrams-force",
symbol = "mg<sub>f</sub>",
utype = "force",
scale = 0.00000980665,
default = "μN gr-f",
link = "Kilogram-force",
},
["mgf"] = {
name1 = "milligram-force",
name2 = "milligrams-force",
symbol = "mgf",
utype = "force",
scale = 0.00000980665,
default = "μN grf",
link = "Kilogram-force",
},
["Mp"] = {
name1 = "megapond",
symbol = "Mp",
utype = "force",
scale = 9806.65,
default = "kN LT-f ST-f",
link = "Kilogram-force",
},
["mp"] = {
name1 = "millipond",
symbol = "mp",
utype = "force",
scale = 0.00000980665,
default = "μN gr-f",
link = "Kilogram-force",
},
["N"] = {
_name1 = "newton",
_symbol = "N",
utype = "force",
scale = 1,
prefixes = 1,
default = "lb-f",
link = "Newton (unit)",
},
["oz-f"] = {
name1 = "ounce-force",
name2 = "ounces-force",
symbol = "oz<sub>f</sub>",
utype = "force",
scale = 0.2780138203095378125,
default = "mN",
link = "Pound (force)",
},
["ozf"] = {
name1 = "ounce-force",
name2 = "ounces-force",
symbol = "ozf",
utype = "force",
scale = 0.2780138203095378125,
default = "mN",
link = "Pound (force)",
},
["p"] = {
name1 = "pond",
symbol = "p",
utype = "force",
scale = 0.00980665,
default = "mN oz-f",
link = "Kilogram-force",
},
["pdl"] = {
name1 = "poundal",
symbol = "pdl",
utype = "force",
scale = 0.138254954376,
default = "N",
},
["S/T-f"] = {
name1 = "short ton-force",
name2 = "short tons-force",
symbol = "S/T<sub>f</sub>",
utype = "force",
scale = 8896.443230521,
default = "kN",
},
["S/Tf"] = {
name1 = "short ton-force",
name2 = "short tons-force",
symbol = "S/Tf",
utype = "force",
scale = 8896.443230521,
default = "kN",
},
["ST-f"] = {
name1 = "short ton-force",
name2 = "short tons-force",
symbol = "ST<sub>f</sub>",
utype = "force",
scale = 8896.443230521,
default = "kN",
},
["STf"] = {
name1 = "short ton-force",
name2 = "short tons-force",
symbol = "STf",
usename = 1,
utype = "force",
scale = 8896.443230521,
default = "kN",
},
["t-f"] = {
name1 = "tonne-force",
name2 = "tonnes-force",
symbol = "t<sub>f</sub>",
utype = "force",
scale = 9806.65,
default = "kN LT-f ST-f",
link = "Ton-force#Tonne-force",
},
["tf"] = {
name1 = "tonne-force",
name2 = "tonnes-force",
symbol = "tf",
utype = "force",
scale = 9806.65,
default = "kN LTf STf",
link = "Ton-force#Tonne-force",
},
["dyne"] = {
target = "dyn",
},
["newtons"] = {
target = "N",
},
["poundal"] = {
target = "pdl",
},
["tonne-force"] = {
target = "tf",
},
["impgal/mi"] = {
per = { "@impgal", "mi" },
utype = "fuel efficiency",
invert = 1,
iscomplex= true,
default = "L/km USgal/mi",
},
["km/L"] = {
per = { "km", "L" },
utype = "fuel efficiency",
invert = -1,
iscomplex= true,
default = "mpgimp mpgus",
},
["km/l"] = {
per = { "km", "ll" },
utype = "fuel efficiency",
invert = -1,
iscomplex= true,
default = "mpgimp mpgus",
},
["L/100 km"] = {
per = { "L", "100km" },
utype = "fuel efficiency",
invert = 1,
iscomplex= true,
default = "mpgimp mpgus",
symlink = "[[Fuel economy in automobiles#Units of measure|L/100 km]]",
},
["l/100 km"] = {
per = { "ll", "100km" },
utype = "fuel efficiency",
invert = 1,
iscomplex= true,
default = "mpgimp mpgus",
symlink = "[[Fuel economy in automobiles#Units of measure|l/100 km]]",
},
["L/km"] = {
per = { "L", "km" },
utype = "fuel efficiency",
invert = 1,
iscomplex= true,
default = "mpgimp mpgus",
},
["l/km"] = {
per = { "ll", "km" },
utype = "fuel efficiency",
invert = 1,
iscomplex= true,
default = "mpgimp mpgus",
},
["mi/impqt"] = {
per = { "mi", "impqt" },
utype = "fuel efficiency",
invert = -1,
iscomplex= true,
default = "km/L",
},
["mi/U.S.qt"] = {
per = { "mi", "U.S.qt" },
utype = "fuel efficiency",
invert = -1,
iscomplex= true,
default = "km/L",
},
["mi/USqt"] = {
per = { "mi", "USqt" },
utype = "fuel efficiency",
invert = -1,
iscomplex= true,
default = "km/L",
},
["mi/usqt"] = {
per = { "mi", "usqt" },
utype = "fuel efficiency",
invert = -1,
iscomplex= true,
default = "km/L",
},
["mpgimp"] = {
per = { "mi", "@impgal" },
symbol = "mpg<sub>‑imp</sub>",
utype = "fuel efficiency",
invert = -1,
iscomplex= true,
default = "L/100 km+mpgus",
symlink = "[[Fuel economy in automobiles#Units of measure|mpg]]<sub>‑[[Imperial units|imp]]</sub>",
},
["mpgus"] = {
per = { "mi", "+USgal" },
symbol = "mpg<sub>‑US</sub>",
utype = "fuel efficiency",
invert = -1,
iscomplex= true,
default = "L/100 km+mpgimp",
symlink = "[[Fuel economy in automobiles#Units of measure|mpg]]<sub>‑[[United States customary units|US]]</sub>",
},
["U.S.gal/mi"] = {
per = { "*U.S.gal", "mi" },
sp_us = true,
utype = "fuel efficiency",
invert = 1,
iscomplex= true,
default = "L/km impgal/mi",
},
["usgal/mi"] = {
per = { "+USgal", "mi" },
utype = "fuel efficiency",
invert = 1,
iscomplex= true,
default = "L/km impgal/mi",
},
["L/100km"] = {
target = "L/100 km",
},
["l/100km"] = {
target = "l/100 km",
},
["mpg"] = {
shouldbe = "Use %{mpgus%} for miles per US gallon or %{mpgimp%} for miles per imperial gallon (not %{mpg%})",
},
["mpgU.S."] = {
target = "mpgus",
symbol = "mpg<sub>‑U.S.</sub>",
sp_us = true,
symlink = "[[Fuel economy in automobiles#Units of measure|mpg]]<sub>‑[[United States customary units|U.S.]]</sub>",
},
["mpgu.s."] = {
target = "mpgus",
symbol = "mpg<sub>‑U.S.</sub>",
sp_us = true,
symlink = "[[Fuel economy in automobiles#Units of measure|mpg]]<sub>‑[[United States customary units|U.S.]]</sub>",
},
["mpgUS"] = {
target = "mpgus",
},
["USgal/mi"] = {
target = "usgal/mi",
},
["kPa/m"] = {
per = { "kPa", "-m-frac" },
utype = "fracture gradient",
default = "psi/ft",
},
["psi/ft"] = {
per = { "psi", "-ft-frac" },
utype = "fracture gradient",
default = "kPa/m",
},
["cm/km"] = {
name1 = "centimetre per kilometre",
name1_us = "centimeter per kilometer",
name2 = "centimetres per kilometre",
name2_us = "centimeters per kilometer",
symbol = "cm/km",
utype = "gradient",
scale = 0.00001,
default = "ft/mi",
link = "Grade (slope)",
},
["ft/mi"] = {
name1 = "foot per mile",
name2 = "feet per mile",
symbol = "ft/mi",
utype = "gradient",
scale = 0.00018939393939393939,
default = "v < 5.28 ! c ! ! m/km",
link = "Grade (slope)",
},
["ft/nmi"] = {
name1 = "foot per nautical mile",
name2 = "feet per nautical mile",
symbol = "ft/nmi",
utype = "gradient",
scale = 0.00016457883369330455,
default = "v < 6.076 ! c ! ! m/km",
link = "Grade (slope)",
},
["in/ft"] = {
name1 = "inch per foot",
name2 = "inches per foot",
symbol = "in/ft",
utype = "gradient",
scale = 0.083333333333333329,
default = "mm/m",
link = "Grade (slope)",
},
["in/mi"] = {
name1 = "inch per mile",
name2 = "inches per mile",
symbol = "in/mi",
utype = "gradient",
scale = 1.5782828282828283e-5,
default = "v < 0.6336 ! m ! c ! m/km",
link = "Grade (slope)",
},
["m/km"] = {
name1 = "metre per kilometre",
name1_us = "meter per kilometer",
name2 = "metres per kilometre",
name2_us = "meters per kilometer",
symbol = "m/km",
utype = "gradient",
scale = 0.001,
default = "ft/mi",
link = "Grade (slope)",
},
["mm/km"] = {
name1 = "millimetre per kilometre",
name1_us = "millimeter per kilometer",
name2 = "millimetres per kilometre",
name2_us = "millimeters per kilometer",
symbol = "mm/km",
utype = "gradient",
scale = 0.000001,
default = "in/mi",
link = "Grade (slope)",
},
["mm/m"] = {
name1 = "millimetre per metre",
name1_us = "millimeter per meter",
name2 = "millimetres per metre",
name2_us = "millimeters per meter",
symbol = "mm/m",
utype = "gradient",
scale = 0.001,
default = "in/ft",
link = "Grade (slope)",
},
["admi"] = {
name1 = "admiralty mile",
symbol = "nmi (admiralty)",
utype = "length",
scale = 1853.184,
default = "km mi",
link = "Nautical mile",
},
["AU"] = {
name1 = "astronomical unit",
symbol = "AU",
utype = "length",
scale = 149597870700,
default = "km mi",
},
["Brnmi"] = {
name1 = "British nautical mile",
symbol = "(Brit) nmi",
utype = "length",
scale = 1853.184,
default = "km mi",
link = "Nautical mile",
},
["bu"] = {
name2 = "bu",
symbol = "bu",
usename = 1,
utype = "length",
scale = 0.0030303030303030303,
default = "mm",
link = "Japanese units of measurement#Length",
},
["ch"] = {
name1 = "chain",
symbol = "ch",
utype = "length",
scale = 20.1168,
default = "ft m",
subdivs = { ["ft"] = { 66, default = "m" }, ["yd"] = { 22, default = "m" } },
link = "Chain (unit)",
},
["chlk"] = {
name1 = "[[Chain (unit)|chain]]",
symbol = "[[Chain (unit)|ch]]",
utype = "length",
scale = 20.1168,
default = "ft m",
link = "",
},
["chain"] = {
symbol = "chain",
usename = 1,
utype = "length",
scale = 20.1168,
default = "ft m",
subdivs = { ["ft"] = { 66, default = "m" }, ["yd"] = { 22, default = "m" } },
link = "Chain (unit)",
},
["chainlk"] = {
symbol = "[[Chain (unit)|chain]]",
usename = 1,
utype = "length",
scale = 20.1168,
default = "ft m",
link = "",
},
["dpcm"] = {
name2 = "dot/cm",
symbol = "dot/cm",
utype = "length",
scale = 100,
invert = -1,
iscomplex= true,
default = "dpi",
link = "Dots per inch",
},
["dpi"] = {
name2 = "DPI",
symbol = "DPI",
utype = "length",
scale = 39.370078740157481,
invert = -1,
iscomplex= true,
default = "pitch",
link = "Dots per inch",
},
["fathom"] = {
symbol = "fathom",
usename = 1,
utype = "length",
scale = 1.8288,
default = "ft m",
},
["foot"] = {
name1 = "foot",
name2 = "foot",
symbol = "ft",
utype = "length",
scale = 0.3048,
default = "m",
subdivs = { ["in"] = { 12, default = "m" } },
link = "Foot (unit)",
},
["ft"] = {
name1 = "foot",
name2 = "feet",
symbol = "ft",
utype = "length",
scale = 0.3048,
exception= "integer_more_precision",
default = "m",
subdivs = { ["in"] = { 12, default = "m" } },
link = "Foot (unit)",
},
["furlong"] = {
symbol = "furlong",
usename = 1,
utype = "length",
scale = 201.168,
default = "ft m",
},
["Gly"] = {
name1 = "gigalight-year",
symbol = "Gly",
utype = "length",
scale = 9.4607304725808e24,
default = "Mpc",
link = "Light-year#Definitions",
},
["Gpc"] = {
name1 = "gigaparsec",
symbol = "Gpc",
utype = "length",
scale = 3.0856775814671916e25,
default = "Gly",
link = "Parsec#Megaparsecs and gigaparsecs",
},
["hand"] = {
name1 = "hand",
symbol = "h",
utype = "length",
builtin = "hand",
scale = 0.1016,
iscomplex= true,
default = "in cm",
link = "Hand (unit)",
},
["in"] = {
name1 = "inch",
name2 = "inches",
symbol = "in",
utype = "length",
scale = 0.0254,
exception= "subunit_more_precision",
default = "mm",
},
["inabbreviated"] = {
name2 = "in",
symbol = "in",
utype = "length",
scale = 0.0254,
default = "mm",
link = "Inch",
},
["kly"] = {
name1 = "kilolight-year",
symbol = "kly",
utype = "length",
scale = 9.4607304725808e18,
default = "pc",
link = "Light-year#Definitions",
},
["kpc"] = {
name1 = "kiloparsec",
symbol = "kpc",
utype = "length",
scale = 3.0856775814671916e19,
default = "kly",
link = "Parsec#Parsecs and kiloparsecs",
},
["LD"] = {
name1 = "lunar distance",
symbol = "LD",
utype = "length",
scale = 384403000,
default = "km mi",
link = "Lunar distance (astronomy)",
},
["league"] = {
symbol = "league",
usename = 1,
utype = "length",
scale = 4828.032,
default = "km",
link = "League (unit)",
},
["ly"] = {
name1 = "light-year",
symbol = "ly",
utype = "length",
scale = 9.4607304725808e15,
default = "AU",
},
["m"] = {
_name1 = "metre",
_name1_us= "meter",
_symbol = "m",
utype = "length",
scale = 1,
prefixes = 1,
default = "v > 0 and v < 3 ! ftin ! ft",
link = "Metre",
},
["mi"] = {
name1 = "mile",
symbol = "mi",
utype = "length",
scale = 1609.344,
default = "km",
subdivs = { ["ch"] = { 80, default = "km" }, ["chlk"] = { 80, default = "km" }, ["chain"] = { 80, default = "km" }, ["chainlk"] = { 80, default = "km" }, ["ft"] = { 5280, default = "km" }, ["furlong"] = { 8, default = "km" }, ["yd"] = { 1760, default = "km" } },
},
["mil"] = {
symbol = "mil",
usename = 1,
utype = "length",
scale = 0.0000254,
default = "mm",
link = "Thousandth of an inch",
},
["Mly"] = {
name1 = "megalight-year",
symbol = "Mly",
utype = "length",
scale = 9.4607304725808e21,
default = "kpc",
link = "Light-year#Definitions",
},
["Mpc"] = {
name1 = "megaparsec",
symbol = "Mpc",
utype = "length",
scale = 3.0856775814671916e22,
default = "Mly",
link = "Parsec#Megaparsecs and gigaparsecs",
},
["NM"] = {
name1 = "nautical mile",
symbol = "NM",
utype = "length",
scale = 1852,
default = "km mi",
},
["nmi"] = {
name1 = "nautical mile",
symbol = "nmi",
utype = "length",
scale = 1852,
default = "km mi",
},
["oldUKnmi"] = {
name1 = "nautical mile",
symbol = "nmi",
utype = "length",
scale = 1853.184,
default = "km mi",
},
["oldUSnmi"] = {
name1 = "nautical mile",
symbol = "nmi",
utype = "length",
scale = 1853.24496,
default = "km mi",
},
["pc"] = {
name1 = "parsec",
symbol = "pc",
utype = "length",
scale = 3.0856775814671916e16,
default = "ly",
},
["perch"] = {
name2 = "perches",
symbol = "perch",
usename = 1,
utype = "length",
scale = 5.0292,
default = "ft m",
link = "Rod (unit)",
},
["pitch"] = {
name2 = "μm",
symbol = "μm",
utype = "length",
scale = 1e-6,
default = "dpi",
defkey = "pitch",
linkey = "pitch",
link = "Dots per inch",
},
["pole"] = {
symbol = "pole",
usename = 1,
utype = "length",
scale = 5.0292,
default = "ft m",
link = "Rod (unit)",
},
["pre1954U.S.nmi"] = {
name1 = "(pre-1954 U.S.) nautical mile",
symbol = "(pre‑1954 U.S.) nmi",
utype = "length",
scale = 1853.24496,
default = "km mi",
link = "Nautical mile",
},
["pre1954USnmi"] = {
name1 = "(pre-1954 US) nautical mile",
name1_us = "(pre-1954 U.S.) nautical mile",
symbol = "(pre‑1954 US) nmi",
sym_us = "(pre‑1954 U.S.) nmi",
utype = "length",
scale = 1853.24496,
default = "km mi",
link = "Nautical mile",
},
["rd"] = {
name1 = "rod",
symbol = "rd",
utype = "length",
scale = 5.0292,
default = "ft m",
link = "Rod (unit)",
},
["royal cubit"] = {
name1 = "royal cubit",
symbol = "cu",
utype = "length",
scale = 0.524,
default = "mm",
},
["rtkm"] = {
name1 = "route kilometre",
name1_us = "route kilometer",
symbol = "km",
utype = "length",
scale = 1000,
default = "mi",
link = "Kilometre",
},
["rtmi"] = {
name1 = "route mile",
symbol = "mi",
utype = "length",
scale = 1609.344,
default = "km",
link = "Mile",
},
["shaku"] = {
name2 = "shaku",
symbol = "shaku",
usename = 1,
utype = "length",
scale = 0.30303030303030304,
default = "m",
link = "Shaku (unit)",
},
["sm"] = {
name1 = "smoot",
symbol = "sm",
utype = "length",
scale = 1.70180,
default = "m",
link = "Smoot (unit)",
},
["smi"] = {
name1 = "statute mile",
symbol = "mi",
utype = "length",
scale = 1609.344,
default = "km",
subdivs = { ["chain"] = { 80, default = "km" } },
},
["solar radius"] = {
name1 = "solar radius",
name2 = "solar radii",
symbol = "''R''<sub>☉</sub>",
utype = "length",
scale = 695700e3,
default = "km",
},
["sun"] = {
name2 = "sun",
symbol = "sun",
usename = 1,
utype = "length",
scale = 0.030303030303030304,
default = "mm",
link = "Japanese units of measurement#Length",
},
["thou"] = {
name2 = "thou",
symbol = "thou",
usename = 1,
utype = "length",
scale = 0.0000254,
default = "mm",
link = "Thousandth of an inch",
},
["verst"] = {
symbol = "verst",
usename = 1,
utype = "length",
scale = 1066.8,
default = "km mi",
},
["yd"] = {
name1 = "yard",
symbol = "yd",
utype = "length",
scale = 0.9144,
default = "m",
subdivs = { ["ft"] = { 3, default = "m" } },
},
["μin"] = {
name1 = "microinch",
name2 = "microinches",
symbol = "μin",
utype = "length",
scale = 0.0000000254,
default = "nm",
link = "SI prefix#Non-metric units",
},
["Å"] = {
name1 = "ångström",
symbol = "Å",
utype = "length",
scale = 0.0000000001,
default = "in",
},
["Hz"] = {
_name1 = "hertz",
_name2 = "hertz",
_symbol = "Hz",
utype = "length",
scale = 3.3356409519815204e-9,
invert = -1,
iscomplex= true,
prefixes = 1,
default = "m",
link = "Hertz",
},
["rpm"] = {
name1 = "revolution per minute",
name2 = "revolutions per minute",
symbol = "rpm",
utype = "length",
scale = 5.5594015866358675e-11,
invert = -1,
iscomplex= true,
default = "Hz",
link = "Revolutions per minute",
},
["-ft-frac"] = {
target = "ft",
link = "Fracture gradient",
},
["-in-stiff"] = {
target = "in",
link = "Stiffness",
},
["-m-frac"] = {
target = "m",
link = "Fracture gradient",
},
["-m-stiff"] = {
target = "m",
link = "Stiffness",
},
["100km"] = {
target = "km",
multiplier= 100,
},
["100mi"] = {
target = "mi",
multiplier= 100,
},
["100miles"] = {
target = "mi",
symbol = "miles",
multiplier= 100,
},
["admiralty nmi"] = {
target = "oldUKnmi",
},
["angstrom"] = {
target = "Å",
},
["au"] = {
target = "AU",
symbol = "au",
},
["feet"] = {
target = "ft",
},
["hands"] = {
target = "hand",
},
["inch"] = {
target = "in",
},
["inches"] = {
target = "in",
},
["light-year"] = {
target = "ly",
},
["meter"] = {
target = "m",
sp_us = true,
},
["meters"] = {
target = "m",
sp_us = true,
},
["metre"] = {
target = "m",
},
["metres"] = {
target = "m",
},
["micrometre"] = {
target = "μm",
},
["micron"] = {
target = "μm",
default = "μin",
},
["mile"] = {
target = "mi",
},
["miles"] = {
target = "mi",
},
["parsec"] = {
target = "pc",
},
["rod"] = {
target = "rd",
},
["smoot"] = {
target = "sm",
},
["uin"] = {
target = "μin",
},
["yard"] = {
target = "yd",
},
["yards"] = {
target = "yd",
},
["yds"] = {
target = "yd",
},
["dtex"] = {
name1 = "decitex",
name2 = "decitex",
symbol = "dtex",
utype = "linear density",
scale = 1e-7,
default = "lb/yd",
link = "Units of textile measurement#Units",
},
["kg/cm"] = {
name1 = "kilogram per centimetre",
name1_us = "kilogram per centimeter",
name2 = "kilograms per centimetre",
name2_us = "kilograms per centimeter",
symbol = "kg/cm",
utype = "linear density",
scale = 100,
default = "lb/yd",
link = "Linear density",
},
["kg/m"] = {
name1 = "kilogram per metre",
name1_us = "kilogram per meter",
name2 = "kilograms per metre",
name2_us = "kilograms per meter",
symbol = "kg/m",
utype = "linear density",
scale = 1,
default = "lb/yd",
link = "Linear density",
},
["lb/ft"] = {
name1 = "pound per foot",
name2 = "pounds per foot",
symbol = "lb/ft",
utype = "linear density",
scale = 1.4881639435695539,
default = "kg/m",
link = "Linear density",
},
["lb/yd"] = {
name1 = "pound per yard",
name2 = "pounds per yard",
symbol = "lb/yd",
utype = "linear density",
scale = 0.49605464785651798,
default = "kg/m",
link = "Linear density",
},
["G"] = {
_name1 = "gauss",
_name2 = "gauss",
_symbol = "G",
utype = "magnetic field strength",
scale = 0.0001,
prefixes = 1,
default = "T",
link = "Gauss (unit)",
},
["T"] = {
_name1 = "tesla",
_symbol = "T",
utype = "magnetic field strength",
scale = 1,
prefixes = 1,
default = "G",
link = "Tesla (unit)",
},
["A/m"] = {
name1 = "ampere per metre",
name1_us = "ampere per meter",
name2 = "amperes per metre",
name2_us = "amperes per meter",
symbol = "A/m",
utype = "magnetizing field",
scale = 1,
default = "Oe",
},
["kA/m"] = {
name1 = "kiloampere per metre",
name1_us = "kiloampere per meter",
name2 = "kiloamperes per metre",
name2_us = "kiloamperes per meter",
symbol = "kA/m",
utype = "magnetizing field",
scale = 1000,
default = "kOe",
link = "Ampere per metre",
},
["MA/m"] = {
name1 = "megaampere per metre",
name1_us = "megaampere per meter",
name2 = "megaamperes per metre",
name2_us = "megaamperes per meter",
symbol = "MA/m",
utype = "magnetizing field",
scale = 1e6,
default = "kOe",
link = "Ampere per metre",
},
["Oe"] = {
_name1 = "oersted",
_symbol = "Oe",
utype = "magnetizing field",
scale = 79.5774715,
prefixes = 1,
default = "kA/m",
link = "Oersted",
},
["-Lcwt"] = {
name1 = "hundredweight",
name2 = "hundredweight",
symbol = "cwt",
utype = "mass",
scale = 50.80234544,
default = "lb",
},
["-Scwt"] = {
name1 = "hundredweight",
name2 = "hundredweight",
symbol = "cwt",
utype = "mass",
scale = 45.359237,
default = "lb",
},
["-ST"] = {
name1 = "short ton",
symbol = "ST",
utype = "mass",
scale = 907.18474,
default = "t",
},
["carat"] = {
symbol = "carat",
usename = 1,
utype = "mass",
scale = 0.0002,
default = "g",
link = "Carat (mass)",
},
["drachm"] = {
name1_us = "dram",
symbol = "drachm",
usename = 1,
utype = "mass",
scale = 0.001771845195,
default = "g",
link = "Dram (unit)",
},
["dram"] = {
target = "drachm",
},
["dwt"] = {
name1 = "pennyweight",
symbol = "dwt",
utype = "mass",
scale = 0.00155517384,
default = "oz g",
},
["DWton"] = {
symbol = "deadweight ton",
usename = 1,
utype = "mass",
scale = 1016.0469088,
default = "DWtonne",
link = "Deadweight tonnage",
},
["DWtonne"] = {
name1_us = "deadweight metric ton",
symbol = "deadweight tonne",
sym_us = "~deadweight metric ton",
usename = 1,
utype = "mass",
scale = 1000,
default = "DWton",
link = "Deadweight tonnage",
},
["g"] = {
_name1 = "gram",
_symbol = "g",
utype = "mass",
scale = 0.001,
prefixes = 1,
default = "oz",
link = "Gram",
},
["gr"] = {
name1 = "grain",
symbol = "gr",
utype = "mass",
scale = 0.00006479891,
default = "g",
link = "Grain (unit)",
},
["Gt"] = {
name1 = "gigatonne",
symbol = "Gt",
utype = "mass",
scale = 1000000000000,
default = "LT ST",
link = "Tonne",
},
["impgalh2o"] = {
name1 = "imperial gallon of water",
name2 = "imperial gallons of water",
symbol = "imp gal H<sub>2</sub>O",
utype = "mass",
scale = 4.5359236999999499,
default = "lb kg",
link = "Imperial gallon",
},
["kt"] = {
name1 = "kilotonne",
symbol = "kt",
utype = "mass",
scale = 1000000,
default = "LT ST",
link = "Tonne",
},
["lb"] = {
name1 = "pound",
symbol = "lb",
utype = "mass",
scale = 0.45359237,
exception= "integer_more_precision",
default = "kg",
subdivs = { ["oz"] = { 16, default = "kg" } },
link = "Pound (mass)",
},
["Lcwt"] = {
name1 = "long hundredweight",
name2 = "long hundredweight",
symbol = "Lcwt",
usename = 1,
utype = "mass",
scale = 50.80234544,
default = "lb",
subdivs = { ["qtr"] = { 4, default = "kg" }, ["st"] = { 8, default = "kg" } },
link = "Hundredweight",
},
["long cwt"] = {
name1 = "long hundredweight",
name2 = "long hundredweight",
symbol = "long cwt",
utype = "mass",
scale = 50.80234544,
default = "lb kg",
subdivs = { ["qtr"] = { 4, default = "kg" } },
link = "Hundredweight",
},
["long qtr"] = {
name1 = "long quarter",
symbol = "long qtr",
utype = "mass",
scale = 12.70058636,
default = "lb kg",
},
["LT"] = {
symbol = "long ton",
usename = 1,
utype = "mass",
scale = 1016.0469088,
default = "t",
subdivs = { ["Lcwt"] = { 20, default = "t", unit = "-Lcwt" } },
},
["lt"] = {
name1 = "long ton",
symbol = "LT",
utype = "mass",
scale = 1016.0469088,
default = "t",
subdivs = { ["Lcwt"] = { 20, default = "t", unit = "-Lcwt" } },
},
["metric ton"] = {
symbol = "metric ton",
usename = 1,
utype = "mass",
scale = 1000,
default = "long ton",
link = "Tonne",
},
["MT"] = {
name1 = "metric ton",
symbol = "t",
utype = "mass",
scale = 1000,
default = "LT ST",
link = "Tonne",
},
["Mt"] = {
name1 = "megatonne",
symbol = "Mt",
utype = "mass",
scale = 1000000000,
default = "LT ST",
link = "Tonne",
},
["oz"] = {
name1 = "ounce",
symbol = "oz",
utype = "mass",
scale = 0.028349523125,
default = "g",
},
["ozt"] = {
name1 = "troy ounce",
symbol = "ozt",
utype = "mass",
scale = 0.0311034768,
default = "oz g",
},
["pdr"] = {
name1 = "pounder",
symbol = "pdr",
utype = "mass",
scale = 0.45359237,
default = "kg",
link = "Pound (mass)",
},
["qtr"] = {
name1 = "quarter",
symbol = "qtr",
utype = "mass",
scale = 12.70058636,
default = "lb kg",
subdivs = { ["lb"] = { 28, default = "kg" } },
link = "Long quarter",
},
["Scwt"] = {
name1 = "short hundredweight",
name2 = "short hundredweight",
symbol = "Scwt",
usename = 1,
utype = "mass",
scale = 45.359237,
default = "lb",
link = "Hundredweight",
},
["short cwt"] = {
name1 = "short hundredweight",
name2 = "short hundredweight",
symbol = "short cwt",
utype = "mass",
scale = 45.359237,
default = "lb kg",
link = "Hundredweight",
},
["short qtr"] = {
name1 = "short quarter",
symbol = "short qtr",
utype = "mass",
scale = 11.33980925,
default = "lb kg",
},
["ST"] = {
symbol = "short ton",
usename = 1,
utype = "mass",
scale = 907.18474,
default = "t",
subdivs = { ["Scwt"] = { 20, default = "t", unit = "-Scwt" } },
},
["shtn"] = {
name1 = "short ton",
symbol = "sh tn",
utype = "mass",
scale = 907.18474,
default = "t",
},
["shton"] = {
symbol = "ton",
usename = 1,
utype = "mass",
scale = 907.18474,
default = "t",
},
["solar mass"] = {
name1 = "solar mass",
name2 = "solar masses",
symbol = "''M''<sub>☉</sub>",
utype = "mass",
scale = 1.98855e30,
default = "kg",
},
["st"] = {
name1 = "stone",
name2 = "stone",
symbol = "st",
utype = "mass",
scale = 6.35029318,
default = "lb kg",
subdivs = { ["lb"] = { 14, default = "kg lb" } },
link = "Stone (unit)",
},
["t"] = {
name1 = "tonne",
name1_us = "metric ton",
symbol = "t",
utype = "mass",
scale = 1000,
default = "LT ST",
},
["tonne"] = {
name1 = "tonne",
name1_us = "metric ton",
symbol = "t",
utype = "mass",
scale = 1000,
default = "shton",
},
["troy pound"] = {
symbol = "troy pound",
usename = 1,
utype = "mass",
scale = 0.3732417216,
default = "lb kg",
link = "Troy weight",
},
["usgalh2o"] = {
name1 = "US gallon of water",
name1_us = "U.S. gallon of water",
name2 = "US gallons of water",
name2_us = "U.S. gallons of water",
symbol = "US gal H<sub>2</sub>O",
utype = "mass",
scale = 3.7776215836051126,
default = "lb kg",
link = "United States customary units#Fluid volume",
},
["viss"] = {
name2 = "viss",
symbol = "viss",
utype = "mass",
scale = 1.632932532,
default = "kg",
link = "Myanmar units of measurement#Mass",
},
["billion tonne"] = {
target = "e9t",
},
["kilogram"] = {
target = "kg",
},
["kilotonne"] = {
target = "kt",
},
["lbs"] = {
target = "lb",
},
["lbt"] = {
target = "troy pound",
},
["lcwt"] = {
target = "Lcwt",
},
["long ton"] = {
target = "LT",
},
["mcg"] = {
target = "μg",
},
["million tonne"] = {
target = "e6t",
},
["scwt"] = {
target = "Scwt",
},
["short ton"] = {
target = "ST",
},
["stone"] = {
target = "st",
},
["thousand tonne"] = {
target = "e3t",
},
["tonnes"] = {
target = "t",
},
["kg/kW"] = {
name1 = "kilogram per kilowatt",
name2 = "kilograms per kilowatt",
symbol = "kg/kW",
utype = "mass per unit power",
scale = 0.001,
default = "lb/hp",
link = "Kilowatt",
},
["lb/hp"] = {
name1 = "pound per horsepower",
name2 = "pounds per horsepower",
symbol = "lb/hp",
utype = "mass per unit power",
scale = 0.00060827738784176115,
default = "kg/kW",
link = "Horsepower",
},
["kg/h"] = {
per = { "kg", "h" },
utype = "mass per unit time",
default = "lb/h",
},
["lb/h"] = {
per = { "lb", "h" },
utype = "mass per unit time",
default = "kg/h",
},
["g-mol/d"] = {
name1 = "gram-mole per day",
name2 = "gram-moles per day",
symbol = "g‑mol/d",
utype = "molar rate",
scale = 1.1574074074074073e-5,
default = "μmol/s",
link = "Mole (unit)",
},
["g-mol/h"] = {
name1 = "gram-mole per hour",
name2 = "gram-moles per hour",
symbol = "g‑mol/h",
utype = "molar rate",
scale = 0.00027777777777777778,
default = "mmol/s",
link = "Mole (unit)",
},
["g-mol/min"] = {
name1 = "gram-mole per minute",
name2 = "gram-moles per minute",
symbol = "g‑mol/min",
utype = "molar rate",
scale = 0.016666666666666666,
default = "g-mol/s",
link = "Mole (unit)",
},
["g-mol/s"] = {
name1 = "gram-mole per second",
name2 = "gram-moles per second",
symbol = "g‑mol/s",
utype = "molar rate",
scale = 1,
default = "lb-mol/min",
link = "Mole (unit)",
},
["gmol/d"] = {
name1 = "gram-mole per day",
name2 = "gram-moles per day",
symbol = "gmol/d",
utype = "molar rate",
scale = 1.1574074074074073e-5,
default = "μmol/s",
link = "Mole (unit)",
},
["gmol/h"] = {
name1 = "gram-mole per hour",
name2 = "gram-moles per hour",
symbol = "gmol/h",
utype = "molar rate",
scale = 0.00027777777777777778,
default = "mmol/s",
link = "Mole (unit)",
},
["gmol/min"] = {
name1 = "gram-mole per minute",
name2 = "gram-moles per minute",
symbol = "gmol/min",
utype = "molar rate",
scale = 0.016666666666666666,
default = "gmol/s",
link = "Mole (unit)",
},
["gmol/s"] = {
name1 = "gram-mole per second",
name2 = "gram-moles per second",
symbol = "gmol/s",
utype = "molar rate",
scale = 1,
default = "lbmol/min",
link = "Mole (unit)",
},
["kmol/d"] = {
name1 = "kilomole per day",
name2 = "kilomoles per day",
symbol = "kmol/d",
utype = "molar rate",
scale = 0.011574074074074073,
default = "mmol/s",
link = "Mole (unit)",
},
["kmol/h"] = {
name1 = "kilomole per hour",
name2 = "kilomoles per hour",
symbol = "kmol/h",
utype = "molar rate",
scale = 0.27777777777777779,
default = "mol/s",
link = "Mole (unit)",
},
["kmol/min"] = {
name1 = "kilomole per minute",
name2 = "kilomoles per minute",
symbol = "kmol/min",
utype = "molar rate",
scale = 16.666666666666668,
default = "mol/s",
link = "Kilomole (unit)",
},
["kmol/s"] = {
name1 = "kilomole per second",
name2 = "kilomoles per second",
symbol = "kmol/s",
utype = "molar rate",
scale = 1000,
default = "lb-mol/s",
link = "Mole (unit)",
},
["lb-mol/d"] = {
name1 = "pound-mole per day",
name2 = "pound-moles per day",
symbol = "lb‑mol/d",
utype = "molar rate",
scale = 0.0052499116898148141,
default = "mmol/s",
link = "Pound-mole",
},
["lb-mol/h"] = {
name1 = "pound-mole per hour",
name2 = "pound-moles per hour",
symbol = "lb‑mol/h",
utype = "molar rate",
scale = 0.12599788055555555,
default = "mol/s",
link = "Pound-mole",
},
["lb-mol/min"] = {
name1 = "pound-mole per minute",
name2 = "pound-moles per minute",
symbol = "lb‑mol/min",
utype = "molar rate",
scale = 7.5598728333333334,
default = "mol/s",
link = "Pound-mole",
},
["lb-mol/s"] = {
name1 = "pound-mole per second",
name2 = "pound-moles per second",
symbol = "lb‑mol/s",
utype = "molar rate",
scale = 453.59237,
default = "kmol/s",
link = "Pound-mole",
},
["lbmol/d"] = {
name1 = "pound-mole per day",
name2 = "pound-moles per day",
symbol = "lbmol/d",
utype = "molar rate",
scale = 0.0052499116898148141,
default = "mmol/s",
link = "Pound-mole",
},
["lbmol/h"] = {
name1 = "pound-mole per hour",
name2 = "pound-moles per hour",
symbol = "lbmol/h",
utype = "molar rate",
scale = 0.12599788055555555,
default = "mol/s",
link = "Pound-mole",
},
["lbmol/min"] = {
name1 = "pound-mole per minute",
name2 = "pound-moles per minute",
symbol = "lbmol/min",
utype = "molar rate",
scale = 7.5598728333333334,
default = "mol/s",
link = "Pound-mole",
},
["lbmol/s"] = {
name1 = "pound-mole per second",
name2 = "pound-moles per second",
symbol = "lbmol/s",
utype = "molar rate",
scale = 453.59237,
default = "kmol/s",
link = "Pound-mole",
},
["mmol/s"] = {
name1 = "millimole per second",
name2 = "millimoles per second",
symbol = "mmol/s",
utype = "molar rate",
scale = 0.001,
default = "lb-mol/d",
link = "Mole (unit)",
},
["mol/d"] = {
name1 = "mole per day",
name2 = "moles per day",
symbol = "mol/d",
utype = "molar rate",
scale = 1.1574074074074073e-5,
default = "μmol/s",
link = "Mole (unit)",
},
["mol/h"] = {
name1 = "mole per hour",
name2 = "moles per hour",
symbol = "mol/h",
utype = "molar rate",
scale = 0.00027777777777777778,
default = "mmol/s",
link = "Mole (unit)",
},
["mol/min"] = {
name1 = "mole per minute",
name2 = "moles per minute",
symbol = "mol/min",
utype = "molar rate",
scale = 0.016666666666666666,
default = "mol/s",
link = "Mole (unit)",
},
["mol/s"] = {
name1 = "mole per second",
name2 = "moles per second",
symbol = "mol/s",
utype = "molar rate",
scale = 1,
default = "lb-mol/min",
link = "Mole (unit)",
},
["μmol/s"] = {
name1 = "micromole per second",
name2 = "micromoles per second",
symbol = "μmol/s",
utype = "molar rate",
scale = 0.000001,
default = "lb-mol/d",
link = "Mole (unit)",
},
["umol/s"] = {
target = "μmol/s",
},
["/acre"] = {
name1 = "per acre",
name2 = "per acre",
symbol = "/acre",
utype = "per unit area",
scale = 0.00024710538146716532,
default = "/ha",
link = "Acre",
},
["/ha"] = {
name1 = "per hectare",
name2 = "per hectare",
symbol = "/ha",
utype = "per unit area",
scale = 100e-6,
default = "/acre",
link = "Hectare",
},
["/sqcm"] = {
name1 = "per square centimetre",
name1_us = "per square centimeter",
name2 = "per square centimetre",
name2_us = "per square centimeter",
symbol = "/cm<sup>2</sup>",
utype = "per unit area",
scale = 1e4,
default = "/sqin",
link = "Square centimetre",
},
["/sqin"] = {
name1 = "per square inch",
name2 = "per square inch",
symbol = "/in<sup>2</sup>",
utype = "per unit area",
scale = 1550.0031000062002,
default = "/sqcm",
link = "Square inch",
},
["/sqkm"] = {
name1 = "per square kilometre",
name1_us = "per square kilometer",
name2 = "per square kilometre",
name2_us = "per square kilometer",
symbol = "/km<sup>2</sup>",
utype = "per unit area",
scale = 1e-6,
default = "/sqmi",
link = "Square kilometre",
},
["/sqmi"] = {
name1 = "per square mile",
name2 = "per square mile",
symbol = "/sq mi",
utype = "per unit area",
scale = 3.8610215854244582e-7,
default = "/sqkm",
link = "Square mile",
},
["PD/acre"] = {
name1 = "inhabitant per acre",
name2 = "inhabitants per acre",
symbol = "/acre",
utype = "per unit area",
scale = 0.00024710538146716532,
default = "PD/ha",
link = "Acre",
},
["PD/ha"] = {
name1 = "inhabitant per hectare",
name2 = "inhabitants per hectare",
symbol = "/ha",
utype = "per unit area",
scale = 100e-6,
default = "PD/acre",
link = "Hectare",
},
["PD/sqkm"] = {
name1 = "inhabitant per square kilometre",
name1_us = "inhabitant per square kilometer",
name2 = "inhabitants per square kilometre",
name2_us = "inhabitants per square kilometer",
symbol = "/km<sup>2</sup>",
utype = "per unit area",
scale = 1e-6,
default = "PD/sqmi",
link = "Square kilometre",
},
["PD/sqmi"] = {
name1 = "inhabitant per square mile",
name2 = "inhabitants per square mile",
symbol = "/sq mi",
utype = "per unit area",
scale = 3.8610215854244582e-7,
default = "PD/sqkm",
link = "Square mile",
},
["/cm2"] = {
target = "/sqcm",
},
["/in2"] = {
target = "/sqin",
},
["/km2"] = {
target = "/sqkm",
},
["pd/acre"] = {
target = "PD/acre",
},
["pd/ha"] = {
target = "PD/ha",
},
["PD/km2"] = {
target = "PD/sqkm",
},
["pd/km2"] = {
target = "PD/sqkm",
},
["PD/km²"] = {
target = "PD/sqkm",
},
["pd/sqkm"] = {
target = "PD/sqkm",
},
["pd/sqmi"] = {
target = "PD/sqmi",
},
["/l"] = {
name1 = "per litre",
name1_us = "per liter",
name2 = "per litre",
name2_us = "per liter",
symbol = "/l",
utype = "per unit volume",
scale = 1000,
default = "/usgal",
link = "Litre",
},
["/L"] = {
name1 = "per litre",
name1_us = "per liter",
name2 = "per litre",
name2_us = "per liter",
symbol = "/L",
utype = "per unit volume",
scale = 1000,
default = "/usgal",
link = "Litre",
},
["/USgal"] = {
name1 = "per gallon",
name2 = "per gallon",
symbol = "/gal",
utype = "per unit volume",
scale = 264.172052,
default = "/L",
link = "US gallon",
customary= 2,
},
["/usgal"] = {
target = "/USgal",
},
["bhp"] = {
name1 = "brake horsepower",
name2 = "brake horsepower",
symbol = "bhp",
utype = "power",
scale = 745.69987158227022,
default = "kW",
link = "Horsepower#Brake horsepower",
},
["Cal/d"] = {
name1 = "large calorie per day",
name2 = "large calories per day",
symbol = "Cal/d",
utype = "power",
scale = 0.048425925925925928,
default = "kJ/d",
link = "Calorie",
},
["Cal/h"] = {
name1 = "large calorie per hour",
name2 = "large calories per hour",
symbol = "Cal/h",
utype = "power",
scale = 1.1622222222222223,
default = "kJ/h",
link = "Calorie",
},
["cal/h"] = {
name1 = "calorie per hour",
name2 = "calories per hour",
symbol = "cal/h",
utype = "power",
scale = 0.0011622222222222223,
default = "W",
link = "Calorie",
},
["CV"] = {
name1 = "metric horsepower",
name2 = "metric horsepower",
symbol = "CV",
utype = "power",
scale = 735.49875,
default = "kW",
},
["hk"] = {
name1 = "metric horsepower",
name2 = "metric horsepower",
symbol = "hk",
utype = "power",
scale = 735.49875,
default = "kW",
},
["hp"] = {
name1 = "horsepower",
name2 = "horsepower",
symbol = "hp",
utype = "power",
scale = 745.69987158227022,
default = "kW",
},
["hp-electric"] = {
name1 = "electric horsepower",
name2 = "electric horsepower",
symbol = "hp",
utype = "power",
scale = 746,
default = "kW",
link = "Horsepower#Electrical horsepower",
},
["hp-electrical"] = {
name1 = "electrical horsepower",
name2 = "electrical horsepower",
symbol = "hp",
utype = "power",
scale = 746,
default = "kW",
link = "Horsepower#Electrical horsepower",
},
["hp-metric"] = {
name1 = "metric horsepower",
name2 = "metric horsepower",
symbol = "hp",
utype = "power",
scale = 735.49875,
default = "kW",
},
["ihp"] = {
name1 = "indicated horsepower",
name2 = "indicated horsepower",
symbol = "ihp",
utype = "power",
scale = 745.69987158227022,
default = "kW",
link = "Horsepower#Indicated horsepower",
},
["kcal/h"] = {
name1 = "kilocalorie per hour",
name2 = "kilocalories per hour",
symbol = "kcal/h",
utype = "power",
scale = 1.1622222222222223,
default = "kW",
link = "Calorie",
},
["kJ/d"] = {
name1 = "kilojoule per day",
name2 = "kilojoules per day",
symbol = "kJ/d",
utype = "power",
scale = 0.011574074074074073,
default = "Cal/d",
link = "Kilojoule",
},
["kJ/h"] = {
name1 = "kilojoule per hour",
name2 = "kilojoules per hour",
symbol = "kJ/h",
utype = "power",
scale = 0.27777777777777779,
default = "W",
link = "Kilojoule",
},
["PS"] = {
name1 = "metric horsepower",
name2 = "metric horsepower",
symbol = "PS",
utype = "power",
scale = 735.49875,
default = "kW",
},
["shp"] = {
name1 = "shaft horsepower",
name2 = "shaft horsepower",
symbol = "shp",
utype = "power",
scale = 745.69987158227022,
default = "kW",
link = "Horsepower#Shaft horsepower",
},
["W"] = {
_name1 = "watt",
_symbol = "W",
utype = "power",
scale = 1,
prefixes = 1,
default = "hp",
link = "Watt",
},
["BTU/h"] = {
per = { "BTU", "h" },
utype = "power",
default = "W",
},
["Btu/h"] = {
per = { "Btu", "h" },
utype = "power",
default = "W",
},
["BHP"] = {
target = "bhp",
},
["btu/h"] = {
target = "BTU/h",
},
["HP"] = {
target = "hp",
},
["Hp"] = {
target = "hp",
},
["hp-mechanical"] = {
target = "hp",
},
["IHP"] = {
target = "ihp",
},
["SHP"] = {
target = "shp",
},
["whp"] = {
target = "hp",
},
["hp/lb"] = {
name1 = "horsepower per pound",
name2 = "horsepower per pound",
symbol = "hp/lb",
utype = "power per unit mass",
scale = 1643.986806,
default = "kW/kg",
link = "Power-to-weight ratio",
},
["hp/LT"] = {
name1 = "horsepower per long ton",
name2 = "horsepower per long ton",
symbol = "hp/LT",
utype = "power per unit mass",
scale = 0.73392268125000004,
default = "kW/t",
link = "Power-to-weight ratio",
},
["hp/ST"] = {
name1 = "horsepower per short ton",
name2 = "horsepower per short ton",
symbol = "hp/ST",
utype = "power per unit mass",
scale = 0.821993403,
default = "kW/t",
link = "Power-to-weight ratio",
},
["hp/t"] = {
name1 = "horsepower per tonne",
name2 = "horsepower per tonne",
symbol = "hp/t",
utype = "power per unit mass",
scale = 0.74569987158227022,
default = "kW/t",
link = "Power-to-weight ratio",
},
["kW/kg"] = {
name1 = "kilowatt per kilogram",
name2 = "kilowatts per kilogram",
symbol = "kW/kg",
utype = "power per unit mass",
scale = 1000,
default = "hp/lb",
link = "Power-to-weight ratio",
},
["kW/t"] = {
name1 = "kilowatt per tonne",
name2 = "kilowatts per tonne",
symbol = "kW/t",
utype = "power per unit mass",
scale = 1,
default = "PS/t",
link = "Power-to-weight ratio",
},
["PS/t"] = {
name1 = "metric horsepower per tonne",
name2 = "metric horsepower per tonne",
symbol = "PS/t",
utype = "power per unit mass",
scale = 0.73549875,
default = "kW/t",
link = "Power-to-weight ratio",
},
["shp/lb"] = {
name1 = "shaft horsepower per pound",
name2 = "shaft horsepower per pound",
symbol = "shp/lb",
utype = "power per unit mass",
scale = 1643.986806,
default = "kW/kg",
link = "Power-to-weight ratio",
},
["hp/tonne"] = {
target = "hp/t",
symbol = "hp/tonne",
default = "kW/tonne",
},
["kW/tonne"] = {
target = "kW/t",
symbol = "kW/tonne",
},
["-lb/in2"] = {
name1 = "pound per square inch",
name2 = "pounds per square inch",
symbol = "lb/in<sup>2</sup>",
utype = "pressure",
scale = 6894.7572931683608,
default = "kPa kgf/cm2",
},
["atm"] = {
name1 = "standard atmosphere",
symbol = "atm",
utype = "pressure",
scale = 101325,
default = "kPa",
link = "Atmosphere (unit)",
},
["Ba"] = {
name1 = "barye",
symbol = "Ba",
utype = "pressure",
scale = 0.1,
default = "Pa",
},
["bar"] = {
symbol = "bar",
utype = "pressure",
scale = 100000,
default = "kPa",
link = "Bar (unit)",
},
["dbar"] = {
name1 = "decibar",
symbol = "dbar",
utype = "pressure",
scale = 10000,
default = "kPa",
link = "Bar (unit)",
},
["inHg"] = {
name1 = "inch of mercury",
name2 = "inches of mercury",
symbol = "inHg",
utype = "pressure",
scale = 3386.388640341,
default = "kPa",
},
["kBa"] = {
name1 = "kilobarye",
symbol = "kBa",
utype = "pressure",
scale = 100,
default = "hPa",
link = "Barye",
},
["kg-f/cm2"] = {
name1 = "kilogram-force per square centimetre",
name1_us = "kilogram-force per square centimeter",
name2 = "kilograms-force per square centimetre",
name2_us = "kilograms-force per square centimeter",
symbol = "kg<sub>f</sub>/cm<sup>2</sup>",
utype = "pressure",
scale = 98066.5,
default = "psi",
link = "Kilogram-force",
},
["kg/cm2"] = {
name1 = "kilogram per square centimetre",
name1_us = "kilogram per square centimeter",
name2 = "kilograms per square centimetre",
name2_us = "kilograms per square centimeter",
symbol = "kg/cm<sup>2</sup>",
utype = "pressure",
scale = 98066.5,
default = "psi",
link = "Kilogram-force",
},
["kgf/cm2"] = {
name1 = "kilogram-force per square centimetre",
name1_us = "kilogram-force per square centimeter",
name2 = "kilograms-force per square centimetre",
name2_us = "kilograms-force per square centimeter",
symbol = "kgf/cm<sup>2</sup>",
utype = "pressure",
scale = 98066.5,
default = "psi",
link = "Kilogram-force",
},
["ksi"] = {
name1 = "kilopound per square inch",
name2 = "kilopounds per square inch",
symbol = "ksi",
utype = "pressure",
scale = 6894757.2931683613,
default = "MPa",
link = "Pound per square inch",
},
["lbf/in2"] = {
name1 = "pound-force per square inch",
name2 = "pounds-force per square inch",
symbol = "lbf/in<sup>2</sup>",
utype = "pressure",
scale = 6894.7572931683608,
default = "kPa kgf/cm2",
},
["mb"] = {
name1 = "millibar",
symbol = "mb",
utype = "pressure",
scale = 100,
default = "hPa",
link = "Bar (unit)",
},
["mbar"] = {
name1 = "millibar",
symbol = "mbar",
utype = "pressure",
scale = 100,
default = "hPa",
link = "Bar (unit)",
},
["mmHg"] = {
name1 = "millimetre of mercury",
name1_us = "millimeter of mercury",
name2 = "millimetres of mercury",
name2_us = "millimeters of mercury",
symbol = "mmHg",
utype = "pressure",
scale = 133.322387415,
default = "kPa",
},
["Pa"] = {
_name1 = "pascal",
_symbol = "Pa",
utype = "pressure",
scale = 1,
prefixes = 1,
default = "psi",
link = "Pascal (unit)",
},
["psf"] = {
name1 = "pound per square foot",
name2 = "pounds per square foot",
symbol = "psf",
utype = "pressure",
scale = 47.880258980335839,
default = "kPa",
link = "Pound per square inch",
},
["psi"] = {
name1 = "pound per square inch",
name2 = "pounds per square inch",
symbol = "psi",
utype = "pressure",
scale = 6894.7572931683608,
default = "kPa",
},
["Torr"] = {
name1 = "torr",
symbol = "Torr",
utype = "pressure",
scale = 133.32236842105263,
default = "kPa",
},
["N/cm2"] = {
per = { "N", "cm2" },
utype = "pressure",
default = "psi",
},
["N/m2"] = {
per = { "N", "m2" },
utype = "pressure",
default = "psi",
},
["g/cm2"] = {
per = { "g", "cm2" },
utype = "pressure",
default = "lb/sqft",
multiplier= 9.80665,
},
["g/m2"] = {
per = { "g", "m2" },
utype = "pressure",
default = "lb/sqft",
multiplier= 9.80665,
},
["kg/ha"] = {
per = { "kg", "ha" },
utype = "pressure",
default = "lb/acre",
multiplier= 9.80665,
},
["kg/m2"] = {
per = { "kg", "m2" },
utype = "pressure",
default = "lb/sqft",
multiplier= 9.80665,
},
["lb/1000sqft"] = {
per = { "lb", "1000sqft" },
utype = "pressure",
default = "g/m2",
multiplier= 9.80665,
},
["lb/acre"] = {
per = { "lb", "acre" },
utype = "pressure",
default = "kg/ha",
multiplier= 9.80665,
},
["lb/sqft"] = {
per = { "lb", "sqft" },
utype = "pressure",
default = "kg/m2",
multiplier= 9.80665,
},
["lb/sqyd"] = {
per = { "lb", "sqyd" },
utype = "pressure",
default = "kg/m2",
multiplier= 9.80665,
},
["LT/acre"] = {
per = { "LT", "acre" },
utype = "pressure",
default = "t/ha",
multiplier= 9.80665,
},
["MT/ha"] = {
per = { "MT", "ha" },
utype = "pressure",
default = "LT/acre ST/acre",
multiplier= 9.80665,
},
["oz/sqft"] = {
per = { "oz", "sqft" },
utype = "pressure",
default = "g/m2",
multiplier= 9.80665,
},
["oz/sqyd"] = {
per = { "oz", "sqyd" },
utype = "pressure",
default = "g/m2",
multiplier= 9.80665,
},
["ST/acre"] = {
per = { "ST", "acre" },
utype = "pressure",
default = "t/ha",
multiplier= 9.80665,
},
["t/ha"] = {
per = { "t", "ha" },
utype = "pressure",
default = "LT/acre ST/acre",
multiplier= 9.80665,
},
["tonne/acre"] = {
per = { "tonne", "acre" },
utype = "pressure",
default = "tonne/ha",
multiplier= 9.80665,
},
["tonne/ha"] = {
per = { "tonne", "ha" },
utype = "pressure",
default = "tonne/acre",
multiplier= 9.80665,
},
["kgfpsqcm"] = {
target = "kgf/cm2",
},
["kgpsqcm"] = {
target = "kg/cm2",
},
["kN/m2"] = {
target = "kPa",
},
["lb/in2"] = {
target = "lbf/in2",
},
["torr"] = {
target = "Torr",
},
["Bq"] = {
_name1 = "becquerel",
_symbol = "Bq",
utype = "radioactivity",
scale = 1,
prefixes = 1,
default = "pCi",
link = "Becquerel",
},
["Ci"] = {
_name1 = "curie",
_symbol = "Ci",
utype = "radioactivity",
scale = 3.7e10,
prefixes = 1,
default = "GBq",
link = "Curie (unit)",
},
["Rd"] = {
_name1 = "rutherford",
_symbol = "Rd",
utype = "radioactivity",
scale = 1e6,
prefixes = 1,
default = "MBq",
link = "Rutherford (unit)",
},
["cm/h"] = {
name1 = "centimetre per hour",
name1_us = "centimeter per hour",
name2 = "centimetres per hour",
name2_us = "centimeters per hour",
symbol = "cm/h",
utype = "speed",
scale = 2.7777777777777775e-6,
default = "in/h",
link = "Metre per second",
},
["cm/s"] = {
name1 = "centimetre per second",
name1_us = "centimeter per second",
name2 = "centimetres per second",
name2_us = "centimeters per second",
symbol = "cm/s",
utype = "speed",
scale = 0.01,
default = "in/s",
link = "Metre per second",
},
["cm/year"] = {
name1 = "centimetre per year",
name1_us = "centimeter per year",
name2 = "centimetres per year",
name2_us = "centimeters per year",
symbol = "cm/year",
utype = "speed",
scale = 3.168873850681143e-10,
default = "in/year",
link = "Orders of magnitude (speed)",
},
["foot/s"] = {
name1 = "foot per second",
name2 = "foot per second",
symbol = "ft/s",
utype = "speed",
scale = 0.3048,
default = "m/s",
},
["ft/min"] = {
name1 = "foot per minute",
name2 = "feet per minute",
symbol = "ft/min",
utype = "speed",
scale = 0.00508,
default = "m/min",
link = "Feet per second",
},
["ft/s"] = {
name1 = "foot per second",
name2 = "feet per second",
symbol = "ft/s",
utype = "speed",
scale = 0.3048,
default = "m/s",
link = "Feet per second",
},
["furlong per fortnight"] = {
name2 = "furlongs per fortnight",
symbol = "furlong per fortnight",
usename = 1,
utype = "speed",
scale = 0.00016630952380952381,
default = "km/h mph",
link = "FFF system",
},
["in/h"] = {
name1 = "inch per hour",
name2 = "inches per hour",
symbol = "in/h",
utype = "speed",
scale = 7.0555555555555559e-6,
default = "cm/h",
link = "Inch",
},
["in/s"] = {
name1 = "inch per second",
name2 = "inches per second",
symbol = "in/s",
utype = "speed",
scale = 0.0254,
default = "cm/s",
link = "Inch",
},
["in/year"] = {
name1 = "inch per year",
name2 = "inches per year",
symbol = "in/year",
utype = "speed",
scale = 8.0489395807301024e-10,
default = "cm/year",
link = "Orders of magnitude (speed)",
},
["isp"] = {
name1 = "second",
symbol = "s",
utype = "speed",
scale = 9.80665,
default = "km/s",
link = "Specific impulse",
},
["km/d"] = {
name1 = "kilometre per day",
name1_us = "kilometer per day",
name2 = "kilometres per day",
name2_us = "kilometers per day",
symbol = "km/d",
utype = "speed",
scale = 1.1574074074074074e-2,
default = "mi/d",
link = "Orders of magnitude (speed)",
},
["km/h"] = {
name1 = "kilometre per hour",
name1_us = "kilometer per hour",
name2 = "kilometres per hour",
name2_us = "kilometers per hour",
symbol = "km/h",
utype = "speed",
scale = 0.27777777777777779,
default = "mph",
link = "Kilometres per hour",
},
["km/s"] = {
name1 = "kilometre per second",
name1_us = "kilometer per second",
name2 = "kilometres per second",
name2_us = "kilometers per second",
symbol = "km/s",
utype = "speed",
scale = 1000,
default = "mi/s",
link = "Metre per second",
},
["kn"] = {
name1 = "knot",
symbol = "kn",
utype = "speed",
scale = 0.51444444444444448,
default = "km/h mph",
link = "Knot (unit)",
},
["kNs/kg"] = {
name2 = "kN‑s/kg",
symbol = "kN‑s/kg",
utype = "speed",
scale = 1000,
default = "isp",
link = "Specific impulse",
},
["m/min"] = {
name1 = "metre per minute",
name1_us = "meter per minute",
name2 = "metres per minute",
name2_us = "meters per minute",
symbol = "m/min",
utype = "speed",
scale = 0.016666666666666666,
default = "ft/min",
link = "Metre per second",
},
["m/s"] = {
name1 = "metre per second",
name1_us = "meter per second",
name2 = "metres per second",
name2_us = "meters per second",
symbol = "m/s",
utype = "speed",
scale = 1,
default = "ft/s",
},
["Mach"] = {
name2 = "Mach",
symbol = "Mach",
utype = "speed",
builtin = "mach",
scale = 0,
iscomplex= true,
default = "km/h mph",
link = "Mach number",
},
["mi/d"] = {
name1 = "mile per day",
name2 = "miles per day",
symbol = "mi/d",
utype = "speed",
scale = 1.8626666666666667e-2,
default = "km/d",
link = "Orders of magnitude (speed)",
},
["mi/s"] = {
name1 = "mile per second",
name2 = "miles per second",
symbol = "mi/s",
utype = "speed",
scale = 1609.344,
default = "km/s",
link = "Mile",
},
["mm/h"] = {
name1 = "millimetre per hour",
name1_us = "millimeter per hour",
name2 = "millimetres per hour",
name2_us = "millimeters per hour",
symbol = "mm/h",
utype = "speed",
scale = 2.7777777777777781e-7,
default = "in/h",
link = "Metre per second",
},
["mph"] = {
name1 = "mile per hour",
name2 = "miles per hour",
symbol = "mph",
utype = "speed",
scale = 0.44704,
default = "km/h",
link = "Miles per hour",
},
["Ns/kg"] = {
name2 = "N‑s/kg",
symbol = "N‑s/kg",
utype = "speed",
scale = 1,
default = "isp",
link = "Specific impulse",
},
["si tsfc"] = {
name2 = "g/(kN⋅s)",
symbol = "g/(kN⋅s)",
utype = "speed",
scale = 9.9999628621379242e-7,
invert = -1,
iscomplex= true,
default = "tsfc",
link = "Thrust specific fuel consumption",
},
["tsfc"] = {
name2 = "lb/(lbf⋅h)",
symbol = "lb/(lbf⋅h)",
utype = "speed",
scale = 2.832545036049801e-5,
invert = -1,
iscomplex= true,
default = "si tsfc",
link = "Thrust specific fuel consumption",
},
["cm/y"] = {
target = "cm/year",
},
["cm/yr"] = {
target = "cm/year",
},
["in/y"] = {
target = "in/year",
},
["in/yr"] = {
target = "in/year",
},
["knot"] = {
target = "kn",
},
["knots"] = {
target = "kn",
},
["kph"] = {
target = "km/h",
},
["mi/h"] = {
target = "mph",
},
["mm/s"] = {
per = { "mm", "s" },
utype = "speed",
default = "in/s",
link = "Metre per second",
},
["C"] = {
name1 = "degree Celsius",
name2 = "degrees Celsius",
symbol = "°C",
usesymbol= 1,
utype = "temperature",
scale = 1,
offset = -273.15,
iscomplex= true,
istemperature= true,
default = "F",
link = "Celsius",
},
["F"] = {
name1 = "degree Fahrenheit",
name2 = "degrees Fahrenheit",
symbol = "°F",
usesymbol= 1,
utype = "temperature",
scale = 0.55555555555555558,
offset = 32-273.15*(9/5),
iscomplex= true,
istemperature= true,
default = "C",
link = "Fahrenheit",
},
["K"] = {
_name1 = "kelvin",
_symbol = "K",
usesymbol= 1,
utype = "temperature",
scale = 1,
offset = 0,
iscomplex= true,
istemperature= true,
prefixes = 1,
default = "C F",
link = "Kelvin",
},
["keVT"] = {
name1 = "kiloelectronvolt",
symbol = "keV",
utype = "temperature",
scale = 11.604505e6,
offset = 0,
iscomplex= true,
default = "MK",
link = "Electronvolt",
},
["R"] = {
name1 = "degree Rankine",
name2 = "degrees Rankine",
symbol = "°R",
usesymbol= 1,
utype = "temperature",
scale = 0.55555555555555558,
offset = 0,
iscomplex= true,
istemperature= true,
default = "K F C",
link = "Rankine scale",
},
["Celsius"] = {
target = "C",
},
["°C"] = {
target = "C",
},
["°F"] = {
target = "F",
},
["°R"] = {
target = "R",
},
["C-change"] = {
name1 = "degree Celsius change",
name2 = "degrees Celsius change",
symbol = "°C",
usesymbol= 1,
utype = "temperature change",
scale = 1,
default = "F-change",
link = "Celsius",
},
["F-change"] = {
name1 = "degree Fahrenheit change",
name2 = "degrees Fahrenheit change",
symbol = "°F",
usesymbol= 1,
utype = "temperature change",
scale = 0.55555555555555558,
default = "C-change",
link = "Fahrenheit",
},
["K-change"] = {
name1 = "kelvin change",
name2 = "kelvins change",
symbol = "K",
usesymbol= 1,
utype = "temperature change",
scale = 1,
default = "F-change",
link = "Kelvin",
},
["°C-change"] = {
target = "C-change",
},
["°F-change"] = {
target = "F-change",
},
["century"] = {
name1 = "century",
name2 = "centuries",
symbol = "ha",
utype = "time",
scale = 3155760000,
default = "Gs",
},
["d"] = {
name1 = "day",
symbol = "d",
utype = "time",
scale = 86400,
default = "ks",
},
["decade"] = {
name1 = "decade",
symbol = "daa",
utype = "time",
scale = 315576000,
default = "Ms",
},
["dog year"] = {
name1 = "dog year",
symbol = "dog yr",
utype = "time",
scale = 220903200,
default = "years",
link = "List of unusual units of measurement#Dog year",
},
["fortnight"] = {
symbol = "fortnight",
usename = 1,
utype = "time",
scale = 1209600,
default = "week",
},
["h"] = {
name1 = "hour",
symbol = "h",
utype = "time",
scale = 3600,
default = "ks",
},
["long billion year"] = {
name1 = "billion years",
name2 = "billion years",
symbol = "Ta",
utype = "time",
scale = 31557600000000000000,
default = "Es",
link = "Annum",
},
["millennium"] = {
name1 = "millennium",
name2 = "millennia",
symbol = "ka",
utype = "time",
scale = 31557600000,
default = "Gs",
},
["milliard year"] = {
name1 = "milliard years",
name2 = "milliard years",
symbol = "Ga",
utype = "time",
scale = 31557600000000000,
default = "Ps",
link = "Annum",
},
["million year"] = {
name1 = "million years",
name2 = "million years",
symbol = "Ma",
utype = "time",
scale = 31557600000000,
default = "Ts",
link = "Annum",
},
["min"] = {
name1 = "minute",
symbol = "min",
utype = "time",
scale = 60,
default = "s",
},
["month"] = {
symbol = "month",
usename = 1,
utype = "time",
scale = 2629800,
default = "Ms",
},
["months"] = {
name1 = "month",
symbol = "mo",
utype = "time",
scale = 2629800,
default = "year",
},
["s"] = {
_name1 = "second",
_symbol = "s",
utype = "time",
scale = 1,
prefixes = 1,
default = "v < 7200 ! min ! h",
link = "Second",
},
["short billion year"] = {
name1 = "billion years",
name2 = "billion years",
symbol = "Ga",
utype = "time",
scale = 31557600000000000,
default = "Ps",
link = "Annum",
},
["short trillion year"] = {
name1 = "trillion years",
name2 = "trillion years",
symbol = "Ta",
utype = "time",
scale = 31557600000000000000,
default = "Es",
link = "Annum",
},
["thousand million year"] = {
name1 = "thousand million years",
name2 = "thousand million years",
symbol = "Ga",
utype = "time",
scale = 31557600000000000,
default = "Ps",
link = "Annum",
},
["wk"] = {
symbol = "week",
usename = 1,
utype = "time",
scale = 604800,
default = "Ms",
},
["year"] = {
name1 = "year",
symbol = "a",
utype = "time",
scale = 31557600,
default = "Ms",
link = "Annum",
},
["years"] = {
name1 = "year",
symbol = "yr",
utype = "time",
scale = 31557600,
default = "Ms",
link = "Annum",
},
["byr"] = {
target = "short billion year",
},
["day"] = {
target = "d",
},
["days"] = {
target = "d",
},
["dog yr"] = {
target = "dog year",
},
["Gyr"] = {
target = "thousand million year",
},
["hour"] = {
target = "h",
},
["hours"] = {
target = "h",
},
["kMyr"] = {
target = "thousand million year",
},
["kmyr"] = {
target = "thousand million year",
},
["kyr"] = {
target = "millennium",
},
["long byr"] = {
target = "long billion year",
},
["minute"] = {
target = "min",
},
["minutes"] = {
target = "min",
},
["mth"] = {
target = "month",
},
["Myr"] = {
target = "million year",
},
["myr"] = {
target = "million year",
},
["sec"] = {
target = "s",
},
["second"] = {
target = "s",
},
["seconds"] = {
target = "s",
},
["tmyr"] = {
target = "thousand million year",
},
["tryr"] = {
target = "short trillion year",
},
["tyr"] = {
target = "millennium",
},
["week"] = {
target = "wk",
},
["weeks"] = {
target = "wk",
},
["yr"] = {
target = "year",
},
["kg.m"] = {
name1 = "kilogram metre",
name1_us = "kilogram meter",
symbol = "kg⋅m",
utype = "torque",
scale = 9.80665,
default = "Nm lbft",
link = "Kilogram metre (torque)",
},
["kgf.m"] = {
name1 = "kilogram force-metre",
name1_us = "kilogram force-meter",
symbol = "kgf⋅m",
utype = "torque",
scale = 9.80665,
default = "Nm lbfft",
link = "Kilogram metre (torque)",
},
["kgm"] = {
name1 = "kilogram metre",
name1_us = "kilogram meter",
symbol = "kg⋅m",
utype = "torque",
scale = 9.80665,
default = "Nm lbfft",
link = "Kilogram metre (torque)",
},
["kpm"] = {
name1 = "kilopond metre",
name1_us = "kilopond meter",
symbol = "kp⋅m",
utype = "torque",
scale = 9.80665,
default = "Nm lbft",
link = "Kilogram metre (torque)",
},
["lb-fft"] = {
name1 = "pound force-foot",
name2 = "pound force-feet",
symbol = "ft⋅lb<sub>f</sub>",
utype = "torque",
scale = 1.3558179483314004,
default = "Nm",
link = "Pound-foot (torque)",
},
["lb.ft"] = {
name1 = "pound force-foot",
name2 = "pound force-feet",
symbol = "lb⋅ft",
utype = "torque",
scale = 1.3558179483314004,
default = "Nm",
link = "Pound-foot (torque)",
},
["lb.in"] = {
name1 = "pound force-inch",
symbol = "lb⋅in",
utype = "torque",
scale = 0.1129848290276167,
default = "mN.m",
link = "Pound-foot (torque)",
},
["lbfft"] = {
name1 = "pound force-foot",
name2 = "pound force-feet",
symbol = "lbf⋅ft",
utype = "torque",
scale = 1.3558179483314004,
default = "Nm",
link = "Pound-foot (torque)",
},
["lbft"] = {
name1 = "pound-foot",
name2 = "pound-feet",
symbol = "lb⋅ft",
utype = "torque",
scale = 1.3558179483314004,
default = "Nm",
link = "Pound-foot (torque)",
},
["m.kg-f"] = {
name1 = "metre kilogram-force",
name1_us = "meter kilogram-force",
name2 = "metre kilograms-force",
name2_us = "meter kilograms-force",
symbol = "m⋅kg<sub>f</sub>",
utype = "torque",
scale = 9.80665,
default = "Nm lbfft",
link = "Kilogram metre (torque)",
},
["m.kgf"] = {
name1 = "metre kilogram-force",
name1_us = "meter kilogram-force",
name2 = "metre kilograms-force",
name2_us = "meter kilograms-force",
symbol = "m⋅kgf",
utype = "torque",
scale = 9.80665,
default = "Nm lbfft",
link = "Kilogram metre (torque)",
},
["mN.m"] = {
name1 = "millinewton-metre",
name1_us = "millinewton-meter",
symbol = "mN⋅m",
utype = "torque",
scale = 0.001,
default = "lb.in",
link = "Newton-metre",
},
["Nm"] = {
_name1 = "newton-metre",
_name1_us= "newton-meter",
_symbol = "N⋅m",
utype = "torque",
alttype = "energy",
scale = 1,
prefixes = 1,
default = "lbfft",
link = "Newton-metre",
},
["kN/m"] = {
per = { "kN", "-m-stiff" },
utype = "torque",
default = "lbf/in",
},
["lbf/in"] = {
per = { "lbf", "-in-stiff" },
utype = "torque",
default = "kN/m",
},
["lb-f.ft"] = {
target = "lb-fft",
},
["lbf.ft"] = {
target = "lbfft",
},
["lbf·ft"] = {
target = "lbfft",
},
["lb·ft"] = {
target = "lb.ft",
},
["mkg-f"] = {
target = "m.kg-f",
},
["mkgf"] = {
target = "m.kgf",
},
["N.m"] = {
target = "Nm",
},
["N·m"] = {
target = "Nm",
},
["ton-mile"] = {
symbol = "ton-mile",
usename = 1,
utype = "transportation",
scale = 1.4599723182105602,
default = "tkm",
},
["tkm"] = {
name1 = "tonne-kilometre",
name1_us = "tonne-kilometer",
symbol = "tkm",
utype = "transportation",
scale = 1,
default = "ton-mile",
},
["-12USoz(mL)serve"] = {
name1_us = "12 U.S. fl oz (355 mL) serving",
symbol = "12 US fl oz (355 mL) serving",
sym_us = "12 U.S. fl oz (355 mL) serving",
utype = "volume",
scale = 0.00035488235475000004,
default = "mL",
link = "Beverage can#Standard sizes",
},
["-12USoz(ml)serve"] = {
name1_us = "12 U.S. fl oz (355 ml) serving",
symbol = "12 US fl oz (355 ml) serving",
sym_us = "12 U.S. fl oz (355 ml) serving",
utype = "volume",
scale = 0.00035488235475000004,
default = "ml",
link = "Beverage can#Standard sizes",
},
["-12USozserve"] = {
name1_us = "12 U.S. fl oz serving",
symbol = "12 US fl oz serving",
sym_us = "12 U.S. fl oz serving",
utype = "volume",
scale = 0.00035488235475000004,
default = "mL",
link = "Beverage can#Standard sizes",
},
["acre-foot"] = {
name1 = "acre-foot",
name2 = "acre-foot",
symbol = "acre⋅ft",
utype = "volume",
scale = 1233.48183754752,
default = "m3",
},
["acre-ft"] = {
name1 = "acre-foot",
name2 = "acre-feet",
symbol = "acre⋅ft",
utype = "volume",
scale = 1233.48183754752,
default = "m3",
},
["AUtbsp"] = {
name1 = "Australian tablespoon",
symbol = "AU tbsp",
utype = "volume",
scale = 0.000020,
default = "ml",
},
["Bcuft"] = {
name1 = "billion cubic foot",
name2 = "billion cubic feet",
symbol = "billion cu ft",
utype = "volume",
scale = 28316846.592,
default = "Gl",
link = "Cubic foot",
},
["bdft"] = {
name1 = "board foot",
name2 = "board feet",
symbol = "bd ft",
utype = "volume",
scale = 0.0023597372167,
default = "m3",
},
["board feet"] = {
name2 = "board feet",
symbol = "board foot",
usename = 1,
utype = "volume",
scale = 0.0023597372167,
default = "m3",
},
["board foot"] = {
name2 = "board foot",
symbol = "board foot",
usename = 1,
utype = "volume",
scale = 0.0023597372167,
default = "m3",
},
["cc"] = {
name1 = "cubic centimetre",
name1_us = "cubic centimeter",
symbol = "cc",
utype = "volume",
scale = 0.000001,
default = "cuin",
},
["CID"] = {
name1 = "cubic inch",
name2 = "cubic inches",
symbol = "cu in",
utype = "volume",
scale = 0.000016387064,
default = "cc",
link = "Cubic inch#Engine displacement",
},
["cord"] = {
symbol = "cord",
utype = "volume",
scale = 3.624556363776,
default = "m3",
link = "Cord (unit)",
},
["cufoot"] = {
name1 = "cubic foot",
name2 = "cubic foot",
symbol = "cu ft",
utype = "volume",
scale = 0.028316846592,
default = "m3",
},
["cuft"] = {
name1 = "cubic foot",
name2 = "cubic feet",
symbol = "cu ft",
utype = "volume",
scale = 0.028316846592,
default = "m3",
},
["cuin"] = {
name1 = "cubic inch",
name2 = "cubic inches",
symbol = "cu in",
utype = "volume",
scale = 0.000016387064,
default = "cm3",
},
["cumi"] = {
name1 = "cubic mile",
symbol = "cu mi",
utype = "volume",
scale = 4168181825.440579584,
default = "km3",
},
["cuyd"] = {
name1 = "cubic yard",
symbol = "cu yd",
utype = "volume",
scale = 0.764554857984,
default = "m3",
},
["firkin"] = {
symbol = "firkin",
usename = 1,
utype = "volume",
scale = 0.04091481,
default = "L impgal USgal",
link = "Firkin (unit)",
},
["foot3"] = {
target = "cufoot",
},
["Goilbbl"] = {
name1 = "billion barrels",
name2 = "billion barrels",
symbol = "Gbbl",
utype = "volume",
scale = 158987294.928,
default = "v * 1.58987294928 < 10 ! e6 ! e9 ! m3",
link = "Barrel (unit)#Oil barrel",
},
["gr water"] = {
name1 = "grains water",
name2 = "grains water",
symbol = "gr H<sub>2</sub>O",
utype = "volume",
scale = 0.00000006479891,
default = "cm3",
link = "Grain (unit)",
},
["grt"] = {
name1 = "gross register ton",
symbol = "grt",
utype = "volume",
scale = 2.8316846592,
default = "m3",
link = "Gross register tonnage",
},
["impbbl"] = {
name1 = "imperial barrel",
symbol = "imp bbl",
utype = "volume",
scale = 0.16365924,
default = "L impgal USgal",
link = "Barrel (unit)",
},
["impbsh"] = {
name1 = "imperial bushel",
symbol = "imp bsh",
utype = "volume",
scale = 0.03636872,
default = "L impgal USdrygal",
},
["impbu"] = {
name1 = "imperial bushel",
symbol = "imp bu",
utype = "volume",
scale = 0.03636872,
default = "m3",
},
["impgal"] = {
name1 = "imperial gallon",
symbol = "imp gal",
utype = "volume",
scale = 0.00454609,
default = "L USgal",
},
["impgi"] = {
name1 = "gill",
symbol = "gi",
utype = "volume",
scale = 0.0001420653125,
default = "ml USoz",
link = "Gill (unit)",
},
["impkenning"] = {
name1 = "imperial kenning",
symbol = "kenning",
utype = "volume",
scale = 0.01818436,
default = "L USdrygal",
link = "Kenning (unit)",
},
["impoz"] = {
name1 = "imperial fluid ounce",
symbol = "imp fl oz",
utype = "volume",
scale = 0.0000284130625,
default = "ml USoz",
},
["imppk"] = {
name1 = "imperial peck",
symbol = "pk",
utype = "volume",
scale = 0.00909218,
default = "L USdrygal",
link = "Peck",
},
["imppt"] = {
name1 = "imperial pint",
symbol = "imp pt",
utype = "volume",
scale = 0.00056826125,
default = "L",
},
["impqt"] = {
name1 = "imperial quart",
symbol = "imp qt",
utype = "volume",
scale = 0.0011365225,
default = "ml USoz",
customary= 3,
},
["kilderkin"] = {
symbol = "kilderkin",
usename = 1,
utype = "volume",
scale = 0.08182962,
default = "L impgal USgal",
},
["koilbbl"] = {
name1 = "thousand barrels",
name2 = "thousand barrels",
symbol = "kbbl",
utype = "volume",
scale = 158.987294928,
default = "v * 1.58987294928 < 10 ! ! e3 ! m3",
link = "Barrel (unit)#Oil barrel",
},
["L"] = {
_name1 = "litre",
_name1_us= "liter",
_symbol = "L",
utype = "volume",
scale = 0.001,
prefixes = 1,
default = "impgal USgal",
link = "Litre",
},
["l"] = {
_name1 = "litre",
_name1_us= "liter",
_symbol = "l",
utype = "volume",
scale = 0.001,
prefixes = 1,
default = "impgal USgal",
link = "Litre",
},
["ll"] = {
name1 = "litre",
name1_us = "liter",
symbol = "l",
utype = "volume",
scale = 0.001,
default = "impgal USgal",
},
["m3"] = {
_name1 = "cubic metre",
_name1_us= "cubic meter",
_symbol = "m<sup>3</sup>",
prefix_position= 7,
utype = "volume",
scale = 1,
prefixes = 3,
default = "cuft",
link = "Cubic metre",
},
["Mbbl"] = {
name1 = "thousand barrels",
name2 = "thousand barrels",
symbol = "Mbbl",
utype = "volume",
scale = 158.987294928,
default = "v * 1.58987294928 < 10 ! e3 ! ! m3",
link = "Barrel (unit)#Oil barrel",
},
["MMoilbbl"] = {
name1 = "million barrels",
name2 = "million barrels",
symbol = "MMbbl",
utype = "volume",
scale = 158987.294928,
default = "v * 1.58987294928 < 10 ! e3 ! e6 ! m3",
link = "Barrel (unit)#Oil barrel",
},
["Moilbbl"] = {
name1 = "million barrels",
name2 = "million barrels",
symbol = "Mbbl",
utype = "volume",
scale = 158987.294928,
default = "v * 1.58987294928 < 10 ! e3 ! e6 ! m3",
link = "Barrel (unit)#Oil barrel",
},
["MTON"] = {
name1 = "measurement ton",
symbol = "MTON",
utype = "volume",
scale = 1.13267386368,
default = "m3",
},
["MUSgal"] = {
name1 = "million US gallons",
name1_us = "million U.S. gallons",
name2 = "million US gallons",
name2_us = "million U.S. gallons",
symbol = "million US gal",
sym_us = "million U.S. gal",
utype = "volume",
scale = 3785.411784,
default = "Ml",
link = "US gallon",
},
["oilbbl"] = {
name1 = "barrel",
symbol = "bbl",
utype = "volume",
scale = 0.158987294928,
default = "m3",
link = "Barrel (unit)#Oil barrel",
},
["stere"] = {
symbol = "stere",
usename = 1,
utype = "volume",
scale = 1,
default = "cuft",
},
["Toilbbl"] = {
name1 = "trillion barrels",
name2 = "trillion barrels",
symbol = "Tbbl",
utype = "volume",
scale = 158987294928,
default = "v * 1.58987294928 < 10 ! e9 ! e12 ! m3",
link = "Barrel (unit)#Oil barrel",
},
["USbbl"] = {
name1 = "US barrel",
name1_us = "U.S. barrel",
symbol = "US bbl",
sym_us = "U.S. bbl",
utype = "volume",
scale = 0.119240471196,
default = "L USgal impgal",
link = "Barrel (unit)",
},
["USbeerbbl"] = {
name1 = "US beer barrel",
name1_us = "U.S. beer barrel",
symbol = "US bbl",
sym_us = "U.S. bbl",
utype = "volume",
scale = 0.117347765304,
default = "L USgal impgal",
link = "Barrel (unit)",
},
["USbsh"] = {
name1 = "US bushel",
name1_us = "U.S. bushel",
symbol = "US bsh",
sym_us = "U.S. bsh",
utype = "volume",
scale = 0.03523907016688,
default = "L USdrygal impgal",
link = "Bushel",
},
["USbu"] = {
name1 = "US bushel",
name1_us = "U.S. bushel",
symbol = "US bu",
sym_us = "U.S. bu",
utype = "volume",
scale = 0.03523907016688,
default = "L USdrygal impgal",
link = "Bushel",
},
["USdrybbl"] = {
name1 = "US dry barrel",
name1_us = "U.S. dry barrel",
symbol = "US dry bbl",
sym_us = "U.S. dry bbl",
utype = "volume",
scale = 0.11562819898508,
default = "m3",
link = "Barrel (unit)",
},
["USdrygal"] = {
name1 = "US dry gallon",
name1_us = "U.S. dry gallon",
symbol = "US dry gal",
sym_us = "U.S. dry gal",
utype = "volume",
scale = 0.00440488377086,
default = "L",
link = "Gallon",
},
["USdrypt"] = {
name1 = "US dry pint",
name1_us = "U.S. dry pint",
symbol = "US dry pt",
sym_us = "U.S. dry pt",
utype = "volume",
scale = 0.0005506104713575,
default = "ml",
link = "Pint",
},
["USdryqt"] = {
name1 = "US dry quart",
name1_us = "U.S. dry quart",
symbol = "US dry qt",
sym_us = "U.S. dry qt",
utype = "volume",
scale = 0.001101220942715,
default = "ml",
link = "Quart",
},
["USflgal"] = {
name1 = "US gallon",
name1_us = "U.S. gallon",
symbol = "US fl gal",
sym_us = "U.S. fl gal",
utype = "volume",
scale = 0.003785411784,
default = "L impgal",
link = "Gallon",
},
["USgal"] = {
name1 = "US gallon",
name1_us = "U.S. gallon",
symbol = "US gal",
sym_us = "U.S. gal",
utype = "volume",
scale = 0.003785411784,
default = "L impgal",
},
["USgi"] = {
name1 = "gill",
symbol = "gi",
utype = "volume",
scale = 0.0001182941183,
default = "ml impoz",
link = "Gill (unit)",
},
["USkenning"] = {
name1 = "US kenning",
name1_us = "U.S. kenning",
symbol = "US kenning",
sym_us = "U.S. kenning",
utype = "volume",
scale = 0.01761953508344,
default = "L impgal",
link = "Kenning (unit)",
},
["USmin"] = {
name1 = "US minim",
name1_us = "U.S. minim",
symbol = "US min",
sym_us = "U.S. min",
utype = "volume",
scale = 0.000000061611519921875,
default = "ml",
link = "Minim (unit)",
},
["USoz"] = {
name1 = "US fluid ounce",
name1_us = "U.S. fluid ounce",
symbol = "US fl oz",
sym_us = "U.S. fl oz",
utype = "volume",
scale = 0.0000295735295625,
default = "ml",
},
["USpk"] = {
name1 = "US peck",
name1_us = "U.S. peck",
symbol = "US pk",
sym_us = "U.S. pk",
utype = "volume",
scale = 0.00880976754172,
default = "L impgal",
link = "Peck",
},
["USpt"] = {
name1 = "US pint",
name1_us = "U.S. pint",
symbol = "US pt",
sym_us = "U.S. pt",
utype = "volume",
scale = 0.000473176473,
default = "L imppt",
link = "Pint",
},
["USqt"] = {
name1 = "US quart",
name1_us = "U.S. quart",
symbol = "US qt",
sym_us = "U.S. qt",
utype = "volume",
scale = 0.000946352946,
default = "ml",
link = "Quart",
customary= 1,
},
["USquart"] = {
name1 = "US quart",
name1_us = "U.S. quart",
symbol = "US qt",
sym_us = "U.S. qt",
utype = "volume",
scale = 0.000946352946,
default = "ml impoz",
link = "Quart",
},
["UStbsp"] = {
name1 = "US tablespoon",
name1_us = "U.S. tablespoon",
symbol = "US tbsp",
sym_us = "U.S. tbsp",
utype = "volume",
scale = 1.4786764781250001e-5,
default = "ml",
},
["winecase"] = {
symbol = "case",
usename = 1,
utype = "volume",
scale = 0.009,
default = "L",
link = "Case (goods)",
},
["*U.S.drygal"] = {
target = "USdrygal",
sp_us = true,
customary= 2,
},
["*U.S.gal"] = {
target = "USgal",
sp_us = true,
customary= 2,
},
["+USdrygal"] = {
target = "USdrygal",
customary= 1,
},
["+usfloz"] = {
target = "USoz",
link = "Fluid ounce",
customary= 1,
},
["+USgal"] = {
target = "USgal",
customary= 1,
},
["+USoz"] = {
target = "USoz",
customary= 1,
},
["@impgal"] = {
target = "impgal",
link = "Gallon",
customary= 3,
},
["acre feet"] = {
target = "acre-ft",
},
["acre foot"] = {
target = "acre-foot",
},
["acre ft"] = {
target = "acre-ft",
},
["acre-feet"] = {
target = "acre-ft",
},
["acre.foot"] = {
target = "acre-foot",
},
["acre.ft"] = {
target = "acre-ft",
},
["acre·ft"] = {
target = "acre-ft",
},
["bushels"] = {
target = "USbsh",
},
["cid"] = {
target = "CID",
},
["ft3"] = {
target = "cuft",
},
["gal"] = {
target = "USgal",
},
["gallon"] = {
shouldbe = "Use %{USgal%} for US gallons or %{impgal%} for imperial gallons (not %{gallon%})",
},
["gallons"] = {
shouldbe = "Use %{USgal%} for US gallons or %{impgal%} for imperial gallons (not %{gallons%})",
},
["Gcuft"] = {
target = "e9cuft",
},
["impfloz"] = {
target = "impoz",
},
["Impgal"] = {
target = "impgal",
},
["in3"] = {
target = "cuin",
symbol = "in<sup>3</sup>",
},
["hm³"] = {
target = "hm3",
},
["kcuft"] = {
target = "e3cuft",
},
["kcum"] = {
target = "e3m3",
},
["km³"] = {
target = "km3",
},
["liter"] = {
target = "L",
sp_us = true,
},
["liters"] = {
target = "L",
sp_us = true,
},
["litre"] = {
target = "L",
},
["litres"] = {
target = "L",
},
["Mcuft"] = {
target = "e6cuft",
},
["Mcum"] = {
target = "e6m3",
},
["Mft3"] = {
target = "e6cuft",
},
["mi3"] = {
target = "cumi",
},
["m³"] = {
target = "m3",
},
["Pcuft"] = {
target = "e15cuft",
},
["pt"] = {
shouldbe = "Use %{USpt%} for US pints or %{imppt%} for imperial pints (not %{pt%})",
},
["qt"] = {
shouldbe = "Use %{USqt%} for US quarts or %{impqt%} for imperial quarts (not %{qt%})",
},
["Tcuft"] = {
target = "e12cuft",
},
["Tft3"] = {
target = "e12cuft",
},
["U.S.bbl"] = {
target = "USbbl",
sp_us = true,
default = "L U.S.gal impgal",
},
["U.S.beerbbl"] = {
target = "USbeerbbl",
sp_us = true,
default = "L U.S.gal impgal",
},
["U.S.bsh"] = {
target = "USbsh",
sp_us = true,
default = "L U.S.drygal impgal",
},
["U.S.bu"] = {
target = "USbu",
sp_us = true,
default = "L U.S.drygal impgal",
},
["U.S.drybbl"] = {
target = "USdrybbl",
sp_us = true,
},
["U.S.drygal"] = {
target = "USdrygal",
sp_us = true,
},
["U.S.drypt"] = {
target = "USdrypt",
sp_us = true,
},
["U.S.dryqt"] = {
target = "USdryqt",
sp_us = true,
},
["U.S.flgal"] = {
target = "USflgal",
sp_us = true,
},
["U.S.floz"] = {
target = "USoz",
sp_us = true,
},
["U.S.gal"] = {
target = "USgal",
sp_us = true,
link = "U.S. gallon",
},
["u.s.gal"] = {
target = "USgal",
sp_us = true,
link = "U.S. gallon",
},
["U.S.gi"] = {
target = "USgi",
sp_us = true,
},
["U.S.kenning"] = {
target = "USkenning",
sp_us = true,
},
["U.S.oz"] = {
target = "USoz",
sp_us = true,
},
["U.S.pk"] = {
target = "USpk",
sp_us = true,
},
["U.S.pt"] = {
target = "USpt",
sp_us = true,
},
["U.S.qt"] = {
target = "USqt",
sp_us = true,
default = "L impqt",
customary= 2,
},
["usbbl"] = {
target = "USbbl",
},
["usbeerbbl"] = {
target = "USbeerbbl",
},
["usbsh"] = {
target = "USbsh",
},
["usbu"] = {
target = "USbu",
},
["usdrybbl"] = {
target = "USdrybbl",
},
["usdrygal"] = {
target = "USdrygal",
},
["usdrypt"] = {
target = "USdrypt",
},
["usdryqt"] = {
target = "USdryqt",
},
["USfloz"] = {
target = "USoz",
},
["usfloz"] = {
target = "USoz",
},
["USGAL"] = {
target = "USgal",
},
["usgal"] = {
target = "USgal",
},
["usgi"] = {
target = "USgi",
},
["uskenning"] = {
target = "USkenning",
},
["usoz"] = {
target = "USoz",
},
["uspk"] = {
target = "USpk",
},
["uspt"] = {
target = "USpt",
},
["usqt"] = {
target = "USqt",
},
["yd3"] = {
target = "cuyd",
},
["cuft/sqmi"] = {
per = { "cuft", "sqmi" },
utype = "volume per unit area",
default = "m3/km2",
},
["m3/ha"] = {
name1 = "cubic metre per hectare",
name1_us = "cubic meter per hectare",
name2 = "cubic metres per hectare",
name2_us = "cubic meters per hectare",
symbol = "m<sup>3</sup>/ha",
utype = "volume per unit area",
scale = 0.0001,
default = "USbu/acre",
link = "Hectare",
},
["m3/km2"] = {
per = { "m3", "km2" },
utype = "volume per unit area",
default = "cuft/sqmi",
},
["U.S.gal/acre"] = {
per = { "U.S.gal", "acre" },
utype = "volume per unit area",
default = "m3/km2",
},
["USbu/acre"] = {
name2 = "US bushels per acre",
symbol = "US bushel per acre",
usename = 1,
utype = "volume per unit area",
scale = 8.7077638761350888e-6,
default = "m3/ha",
link = "Bushel",
},
["USgal/acre"] = {
per = { "USgal", "acre" },
utype = "volume per unit area",
default = "m3/km2",
},
["cuyd/mi"] = {
per = { "cuyd", "mi" },
utype = "volume per unit length",
default = "m3/km",
},
["m3/km"] = {
per = { "m3", "km" },
utype = "volume per unit length",
default = "cuyd/mi",
},
["mich"] = {
combination= { "ch", "mi" },
multiple = { 80 },
utype = "length",
},
["michlk"] = {
combination= { "chlk", "mi" },
multiple = { 80 },
utype = "length",
},
["michainlk"] = {
combination= { "chainlk", "mi" },
multiple = { 80 },
utype = "length",
},
["miyd"] = {
combination= { "yd", "mi" },
multiple = { 1760 },
utype = "length",
},
["miydftin"] = {
combination= { "in", "ft", "yd", "mi" },
multiple = { 12, 3, 1760 },
utype = "length",
},
["mift"] = {
combination= { "ft", "mi" },
multiple = { 5280 },
utype = "length",
},
["ydftin"] = {
combination= { "in", "ft", "yd" },
multiple = { 12, 3 },
utype = "length",
},
["ydft"] = {
combination= { "ft", "yd" },
multiple = { 3 },
utype = "length",
},
["ftin"] = {
combination= { "in", "ft" },
multiple = { 12 },
utype = "length",
},
["footin"] = {
combination= { "in", "foot" },
multiple = { 12 },
utype = "length",
},
["handin"] = {
combination= { "in", "hand" },
multiple = { 4 },
utype = "length",
},
["lboz"] = {
combination= { "oz", "lb" },
multiple = { 16 },
utype = "mass",
},
["stlb"] = {
combination= { "lb", "st" },
multiple = { 14 },
utype = "mass",
},
["stlboz"] = {
combination= { "oz", "lb", "st" },
multiple = { 16, 14 },
utype = "mass",
},
["st and lb"] = {
combination= { "lb", "st" },
multiple = { 14 },
utype = "mass",
},
["GN LTf"] = {
combination= { "GN", "-LTf" },
utype = "force",
},
["GN LTf STf"] = {
combination= { "GN", "-LTf", "-STf" },
utype = "force",
},
["GN STf"] = {
combination= { "GN", "-STf" },
utype = "force",
},
["GN STf LTf"] = {
combination= { "GN", "-STf", "-LTf" },
utype = "force",
},
["kN LTf"] = {
combination= { "kN", "-LTf" },
utype = "force",
},
["kN LTf STf"] = {
combination= { "kN", "-LTf", "-STf" },
utype = "force",
},
["kN STf"] = {
combination= { "kN", "-STf" },
utype = "force",
},
["kN STf LTf"] = {
combination= { "kN", "-STf", "-LTf" },
utype = "force",
},
["LTf STf"] = {
combination= { "-LTf", "-STf" },
utype = "force",
},
["MN LTf"] = {
combination= { "MN", "-LTf" },
utype = "force",
},
["MN LTf STf"] = {
combination= { "MN", "-LTf", "-STf" },
utype = "force",
},
["MN STf"] = {
combination= { "MN", "-STf" },
utype = "force",
},
["MN STf LTf"] = {
combination= { "MN", "-STf", "-LTf" },
utype = "force",
},
["STf LTf"] = {
combination= { "-STf", "-LTf" },
utype = "force",
},
["L/100 km mpgimp"] = {
combination= { "L/100 km", "mpgimp" },
utype = "fuel efficiency",
},
["l/100 km mpgimp"] = {
combination= { "l/100 km", "mpgimp" },
utype = "fuel efficiency",
},
["L/100 km mpgUS"] = {
combination= { "L/100 km", "mpgus" },
utype = "fuel efficiency",
},
["L/100 km mpgus"] = {
combination= { "L/100 km", "mpgus" },
utype = "fuel efficiency",
},
["l/100 km mpgus"] = {
combination= { "l/100 km", "mpgus" },
utype = "fuel efficiency",
},
["mpgimp L/100 km"] = {
combination= { "mpgimp", "L/100 km" },
utype = "fuel efficiency",
},
["LT ST t"] = {
combination= { "lt", "-ST", "t" },
utype = "mass",
},
["LT t ST"] = {
combination= { "lt", "t", "-ST" },
utype = "mass",
},
["ST LT t"] = {
combination= { "-ST", "lt", "t" },
utype = "mass",
},
["ST t LT"] = {
combination= { "-ST", "t", "lt" },
utype = "mass",
},
["t LT ST"] = {
combination= { "t", "lt", "-ST" },
utype = "mass",
},
["ton"] = {
combination= { "LT", "ST" },
utype = "mass",
},
["kPa kg/cm2"] = {
combination= { "kPa", "kgf/cm2" },
utype = "pressure",
},
["kPa lb/in2"] = {
combination= { "kPa", "-lb/in2" },
utype = "pressure",
},
["floz"] = {
combination= { "impoz", "USoz" },
utype = "volume",
},
}
---------------------------------------------------------------------------
-- Do not change the data in this table because it is created by running --
-- a script that reads the wikitext from a wiki page (see note above). --
---------------------------------------------------------------------------
local default_exceptions = {
-- Prefixed units with a default different from that of the base unit.
-- Each key item is a prefixed symbol (unitcode for engineering notation).
["cm<sup>2</sup>"] = "sqin",
["dm<sup>2</sup>"] = "sqin",
["e3acre"] = "km2",
["e3m2"] = "e6sqft",
["e6acre"] = "km2",
["e6ha"] = "e6acre",
["e6km2"] = "e6sqmi",
["e6m2"] = "e6sqft",
["e6sqft"] = "v * 9.290304 < 100 ! e3 ! e6 ! m2",
["e6sqmi"] = "e6km2",
["hm<sup>2</sup>"] = "acre",
["km<sup>2</sup>"] = "sqmi",
["mm<sup>2</sup>"] = "sqin",
["aJ"] = "eV",
["e3BTU"] = "MJ",
["e6BTU"] = "GJ",
["EJ"] = "kWh",
["fJ"] = "keV",
["GJ"] = "kWh",
["MJ"] = "kWh",
["PJ"] = "kWh",
["pJ"] = "MeV",
["TJ"] = "kWh",
["YJ"] = "kWh",
["yJ"] = "μeV",
["ZJ"] = "kWh",
["zJ"] = "meV",
["e12cuft/a"] = "v * 2.8316846592 < 100 ! e9 ! e12 ! m3/a",
["e12cuft/d"] = "v * 2.8316846592 < 100 ! e9 ! e12 ! m3/d",
["e12m3/a"] = "Tcuft/a",
["e12m3/d"] = "Tcuft/d",
["e3cuft/a"] = "v * 2.8316846592 < 100 ! ! e3 ! m3/a",
["e3cuft/d"] = "v * 2.8316846592 < 100 ! ! e3 ! m3/d",
["e3cuft/s"] = "v * 2.8316846592 < 100 ! ! e3 ! m3/s",
["e3m3/a"] = "v < 28.316846592 ! k ! M ! cuft/a",
["e3m3/d"] = "v < 28.316846592 ! k ! M ! cuft/d",
["e3m3/s"] = "v < 28.316846592 ! k ! M ! cuft/s",
["e3USgal/a"] = "v * 3.785411784 < 1000 ! ! e3 ! m3/a",
["e6cuft/a"] = "v * 2.8316846592 < 100 ! e3 ! e6 ! m3/a",
["e6cuft/d"] = "v * 2.8316846592 < 100 ! e3 ! e6 ! m3/d",
["e6cuft/s"] = "v * 2.8316846592 < 100 ! e3 ! e6 ! m3/s",
["e6m3/a"] = "v < 28.316846592 ! M ! G ! cuft/a",
["e6m3/d"] = "v < 28.316846592 ! M ! G ! cuft/d",
["e6m3/s"] = "v < 28.316846592 ! e6 ! e9 ! cuft/s",
["e6USgal/a"] = "v * 3.785411784 < 1000 ! e3 ! e6 ! m3/a",
["e9cuft/a"] = "m3/a",
["e9cuft/d"] = "v * 2.8316846592 < 100 ! e6 ! e9 ! m3/d",
["e9m3/a"] = "v < 28.316846592 ! G ! T ! cuft/a",
["e9m3/d"] = "v < 28.316846592 ! G ! T ! cuft/d",
["e9m3/s"] = "v < 28.316846592 ! e9 ! e12 ! cuft/s",
["e9USgal/a"] = "v * 3.785411784 < 1000 ! e6 ! e9 ! m3/a",
["e9USgal/s"] = "v * 3.785411784 < 1000 ! e6 ! e9 ! m3/s",
["nN"] = "gr-f",
["μN"] = "gr-f",
["mN"] = "oz-f",
["am"] = "in",
["cm"] = "in",
["dam"] = "ft",
["dm"] = "in",
["e12km"] = "e12mi",
["e12mi"] = "e12km",
["e3AU"] = "ly",
["e3km"] = "e3mi",
["e3mi"] = "e3km",
["e6km"] = "e6mi",
["e6mi"] = "e6km",
["e9km"] = "AU",
["e9mi"] = "e9km",
["Em"] = "mi",
["fm"] = "in",
["Gm"] = "mi",
["hm"] = "ft",
["km"] = "mi",
["mm"] = "in",
["Mm"] = "mi",
["nm"] = "in",
["Pm"] = "mi",
["pm"] = "in",
["Tm"] = "mi",
["Ym"] = "mi",
["ym"] = "in",
["Zm"] = "mi",
["zm"] = "in",
["μm"] = "in",
["e12lb"] = "v * 4.5359237 < 10 ! Mt ! Gt",
["e3lb"] = "v * 4.5359237 < 10 ! kg ! t",
["e3ozt"] = "v * 0.311034768 < 10 ! kg ! t",
["e3t"] = "LT ST",
["e6carat"] = "t",
["e6lb"] = "v * 4.5359237 < 10 ! t ! kilotonne",
["e6ozt"] = "lb kg",
["e6ST"] = "Mt",
["e6t"] = "LT ST",
["e9lb"] = "v * 4.5359237 < 10 ! kilotonne ! Mt",
["e9t"] = "LT ST",
["Gg"] = "lb",
["kg"] = "lb",
["mg"] = "gr",
["Mg"] = "LT ST",
["ng"] = "gr",
["μg"] = "gr",
["mBq"] = "fCi",
["kBq"] = "nCi",
["MBq"] = "μCi",
["GBq"] = "mCi",
["TBq"] = "Ci",
["PBq"] = "kCi",
["EBq"] = "kCi",
["fCi"] = "mBq",
["pCi"] = "Bq",
["nCi"] = "Bq",
["μCi"] = "kBq",
["mCi"] = "MBq",
["kCi"] = "TBq",
["MCi"] = "PBq",
["ns"] = "μs",
["μs"] = "ms",
["ms"] = "s",
["ks"] = "h",
["Ms"] = "week",
["Gs"] = "decade",
["Ts"] = "millennium",
["Ps"] = "million year",
["Es"] = "thousand million year",
["MK"] = "keVT",
["cL"] = "impoz usoz",
["cl"] = "impoz usoz",
["cm<sup>3</sup>"] = "cuin",
["dL"] = "impoz usoz",
["dl"] = "impoz usoz",
["mm<sup>3</sup>"] = "cuin",
["dm<sup>3</sup>"] = "cuin",
["e12cuft"] = "v * 2.8316846592 < 100 ! e9 ! e12 ! m3",
["e12impgal"] = "v * 4.54609 < 1000 ! T ! P ! l",
["e12m3"] = "v < 28.316846592 ! T ! P ! cuft",
["e12U.S.gal"] = "v * 3.785411784 < 1000 ! T ! P ! l",
["e12USgal"] = "v * 3.785411784 < 1000 ! T ! P ! l",
["e15cuft"] = "v * 2.8316846592 < 100 ! e12 ! e15 ! m3",
["e15m3"] = "Pcuft",
["e3bdft"] = "v * 0.23597372167 < 100 ! e3 ! e6 ! m3",
["e3cuft"] = "v * 2.8316846592 < 100 ! ! e3 ! m3",
["e3impgal"] = "v * 4.54609 < 1000 ! k ! M ! l",
["e3m3"] = "v < 28.316846592 ! k ! M ! cuft",
["e3U.S.gal"] = "v * 3.785411784 < 1000 ! k ! M ! l",
["e3USgal"] = "v * 3.785411784 < 1000 ! k ! M ! l",
["e6bdft"] = "v * 0.23597372167 < 100 ! e3 ! e6 ! m3",
["e6cuft"] = "v * 2.8316846592 < 100 ! e3 ! e6 ! m3",
["e6cuyd"] = "v * 7.64554857984 < 10 ! e3 ! e6 ! m3",
["e6impgal"] = "v * 4.54609 < 1000 ! M ! G ! l",
["e6L"] = "USgal",
["e6m3"] = "v < 28.316846592 ! M ! G ! cuft",
["e6U.S.gal"] = "v * 3.785411784 < 1000 ! M ! G ! l",
["e6USgal"] = "v * 3.785411784 < 1000 ! M ! G ! l",
["e9bdft"] = "v * 0.23597372167 < 100 ! e6 ! e9 ! m3",
["e9cuft"] = "v * 2.8316846592 < 100 ! e6 ! e9 ! m3",
["e9impgal"] = "v * 4.54609 < 1000 ! G ! T ! l",
["e9m3"] = "v < 28.316846592 ! G ! T ! cuft",
["e9U.S.gal"] = "v * 3.785411784 < 1000 ! G ! T ! l",
["e9USgal"] = "v * 3.785411784 < 1000 ! G ! T ! l",
["GL"] = "cuft",
["Gl"] = "cuft",
["kL"] = "cuft",
["kl"] = "cuft",
["km<sup>3</sup>"] = "cumi",
["mL"] = "impoz usoz",
["ml"] = "impoz usoz",
["Ml"] = "v < 28.316846592 ! e3 ! e6 ! cuft",
["ML"] = "v < 28.316846592 ! e3 ! e6 ! cuft",
["TL"] = "cumi",
["Tl"] = "cumi",
["μL"] = "cuin",
["μl"] = "cuin",
}
---------------------------------------------------------------------------
-- Do not change the data in this table because it is created by running --
-- a script that reads the wikitext from a wiki page (see note above). --
---------------------------------------------------------------------------
local link_exceptions = {
-- Prefixed units with a linked article different from that of the base unit.
-- Each key item is a prefixed symbol (not unitcode).
["mm<sup>2</sup>"] = "Square millimetre",
["cm<sup>2</sup>"] = "Square centimetre",
["dm<sup>2</sup>"] = "Square decimetre",
["km<sup>2</sup>"] = "Square kilometre",
["kJ"] = "Kilojoule",
["MJ"] = "Megajoule",
["GJ"] = "Gigajoule",
["TJ"] = "Terajoule",
["fm"] = "Femtometre",
["pm"] = "Picometre",
["nm"] = "Nanometre",
["μm"] = "Micrometre",
["mm"] = "Millimetre",
["cm"] = "Centimetre",
["dm"] = "Decimetre",
["dam"] = "Decametre",
["hm"] = "Hectometre",
["km"] = "Kilometre",
["Mm"] = "Megametre",
["Gm"] = "Gigametre",
["Tm"] = "Terametre",
["Pm"] = "Petametre",
["Em"] = "Exametre",
["Zm"] = "Zettametre",
["Ym"] = "Yottametre",
["μg"] = "Microgram",
["mg"] = "Milligram",
["kg"] = "Kilogram",
["Mg"] = "Tonne",
["yW"] = "Yoctowatt",
["zW"] = "Zeptowatt",
["aW"] = "Attowatt",
["fW"] = "Femtowatt",
["pW"] = "Picowatt",
["nW"] = "Nanowatt",
["μW"] = "Microwatt",
["mW"] = "Milliwatt",
["kW"] = "Kilowatt",
["MW"] = "Megawatt",
["GW"] = "Gigawatt",
["TW"] = "Terawatt",
["PW"] = "Petawatt",
["EW"] = "Exawatt",
["ZW"] = "Zettawatt",
["YW"] = "Yottawatt",
["as"] = "Attosecond",
["fs"] = "Femtosecond",
["ps"] = "Picosecond",
["ns"] = "Nanosecond",
["μs"] = "Microsecond",
["ms"] = "Millisecond",
["ks"] = "Kilosecond",
["Ms"] = "Megasecond",
["Gs"] = "Gigasecond",
["Ts"] = "Terasecond",
["Ps"] = "Petasecond",
["Es"] = "Exasecond",
["Zs"] = "Zettasecond",
["Ys"] = "Yottasecond",
["mm<sup>3</sup>"] = "Cubic millimetre",
["cm<sup>3</sup>"] = "Cubic centimetre",
["dm<sup>3</sup>"] = "Cubic decimetre",
["dam<sup>3</sup>"] = "Cubic decametre",
["km<sup>3</sup>"] = "Cubic kilometre",
["μL"] = "Microlitre",
["μl"] = "Microlitre",
["mL"] = "Millilitre",
["ml"] = "Millilitre",
["cL"] = "Centilitre",
["cl"] = "Centilitre",
["dL"] = "Decilitre",
["dl"] = "Decilitre",
["daL"] = "Decalitre",
["dal"] = "Decalitre",
["hL"] = "Hectolitre",
["hl"] = "Hectolitre",
["kL"] = "Kilolitre",
["kl"] = "Kilolitre",
["ML"] = "Megalitre",
["Ml"] = "Megalitre",
["GL"] = "Gigalitre",
["Gl"] = "Gigalitre",
["TL"] = "Teralitre",
["Tl"] = "Teralitre",
["PL"] = "Petalitre",
["Pl"] = "Petalitre",
}
---------------------------------------------------------------------------
-- Do not change the data in this table because it is created by running --
-- a script that reads the wikitext from a wiki page (see note above). --
---------------------------------------------------------------------------
local per_unit_fixups = {
-- Automatically created per units of form "x/y" may have their unit type
-- changed, for example, "length/time" is changed to "speed".
-- Other adjustments can also be specified.
["/area"] = "per unit area",
["/volume"] = "per unit volume",
["area/area"] = "area per unit area",
["energy/length"] = "energy per unit length",
["energy/mass"] = "energy per unit mass",
["energy/time"] = { utype = "power", link = "Power (physics)" },
["energy/volume"] = "energy per unit volume",
["force/area"] = { utype = "pressure", link = "Pressure" },
["length/length"] = { utype = "gradient", link = "Grade (slope)" },
["length/time"] = { utype = "speed", link = "Speed" },
["length/time/time"] = { utype = "acceleration", link = "Acceleration" },
["mass/area"] = { utype = "pressure", multiplier = 9.80665 },
["mass/length"] = "linear density",
["mass/mass"] = "concentration",
["mass/power"] = "mass per unit power",
["mass/time"] = "mass per unit time",
["mass/volume"] = { utype = "density", link = "Density" },
["power/mass"] = "power per unit mass",
["power/volume"] = { link = "Power density" },
["pressure/length"] = "fracture gradient",
["speed/time"] = { utype = "acceleration", link = "Acceleration" },
["volume/area"] = "volume per unit area",
["volume/length"] = "volume per unit length",
["volume/time"] = "flow",
}
return {
all_units = all_units,
default_exceptions = default_exceptions,
link_exceptions = link_exceptions,
per_unit_fixups = per_unit_fixups,
}
8d4f7e3d03f55a7683bae4e0b800b77ac91d44a2
Module:Convert/text
828
192
390
389
2023-09-14T01:14:55Z
Ilovethehitgameomori
2
1 revision imported
Scribunto
text/plain
-- Text used by Module:Convert for enwiki.
-- This is a separate module to simplify translation for use on another wiki.
-- See [[:en:Template:Convert/Transwiki guide]] if copying to another wiki.
-- Some units accept an SI prefix before the unit code, such as "kg" for kilogram.
local SIprefixes = {
-- The prefix field is what the prefix should be, if different from the prefix used.
['Q'] = { exponent = 30, name = 'quetta', },
['R'] = { exponent = 27, name = 'ronna', },
['Y'] = { exponent = 24, name = 'yotta', },
['Z'] = { exponent = 21, name = 'zetta', },
['E'] = { exponent = 18, name = 'exa' , },
['P'] = { exponent = 15, name = 'peta' , },
['T'] = { exponent = 12, name = 'tera' , },
['G'] = { exponent = 9, name = 'giga' , },
['M'] = { exponent = 6, name = 'mega' , },
['k'] = { exponent = 3, name = 'kilo' , },
['h'] = { exponent = 2, name = 'hecto', },
['da']= { exponent = 1, name = 'deca' , name_us = 'deka' },
['d'] = { exponent = -1, name = 'deci' , },
['c'] = { exponent = -2, name = 'centi', },
['m'] = { exponent = -3, name = 'milli', },
['μ'] = { exponent = -6, name = 'micro', }, -- key = 'GREEK SMALL LETTER MU' (U+03BC) utf-8 CE BC
['µ'] = { exponent = -6, name = 'micro', prefix = 'μ' }, -- key = 'MICRO SIGN' (U+00B5) utf-8 C2 B5
['u'] = { exponent = -6, name = 'micro', prefix = 'μ' }, -- not an SI prefix, but allow for people typing this
['n'] = { exponent = -9, name = 'nano' , },
['p'] = { exponent =-12, name = 'pico' , },
['f'] = { exponent =-15, name = 'femto', },
['a'] = { exponent =-18, name = 'atto' , },
['z'] = { exponent =-21, name = 'zepto', },
['y'] = { exponent =-24, name = 'yocto', },
['r'] = { exponent =-27, name = 'ronto', },
['q'] = { exponent =-30, name = 'quecto', },
}
-- Some units can be qualified with one of the following prefixes, when linked.
local customary_units = {
{ "US", link = "United States customary units" },
{ "U.S.", link = "United States customary units" },
{ "imperial", link = "Imperial units" },
{ "imp", link = "Imperial units" },
}
-- Names when using engineering notation (a prefix of "eN" where N is a number; example "e6km").
-- key = { "name", link = "article title", exponent = numeric_key_value }
-- If lk=on and link is defined, the name of the number will appear as a link.
local eng_scales = {
["3"] = { "thousand", exponent = 3 },
["6"] = { "million", exponent = 6 },
["9"] = { "billion", link = "1000000000 (number)", exponent = 9 },
["12"] = { "trillion", link = "1000000000000 (number)", exponent = 12 },
["15"] = { "quadrillion", link = "1000000000000000 (number)", exponent = 15 },
}
local all_categories = {
unit = "[[Category:Convert errors]]",
option = "[[Category:Convert errors]]",
warning = '[[Category:Convert invalid options]]',
tracking = '[[Category:Convert tracking]]',
}
-- For some error messages, the following puts the wanted style around
-- each unit code marked like '...%{ft%}...'.
local unitcode_regex = '%%([{}])'
local unitcode_replace = { ['{'] = '"', ['}'] = '"' } -- no longer need the more elaborate substitute used before 2013-09-28
-- All messages that may be displayed if a problem occurs.
local all_messages = {
-- Message format string: $1=title, $2=text, $3=category, $4=anchor.
-- Each displayed message starts with "Convert:" so can easily locate by searching article.
cvt_format = '<sup class="noprint Inline-Template" style="white-space:nowrap;">[<i>[[Help:Convert messages#$4|<span title="Convert: $1">convert: $2</span>]]</i>]</sup>$3<span class="error"></span>',
cvt_format2 = '<sup class="noprint Inline-Template" style="white-space:nowrap;">[[Help:Convert messages#$4|<span title="Convert: $1">$2</span>]]</sup>$3<span class="error"></span>',
cvt_format_preview = '<strong class="error">Error in convert: $1 [[Help:Convert messages#$4|(help)]]</strong>$3',
-- Each of following messages is a table:
-- { [1] = 'title', -- mouseover title text
-- [2] = 'text', -- link text displayed in article
-- [3] = 'category key', -- key to lookup category in all_categories
-- [4] = 'anchor', -- anchor for link to relevant section on help page
-- regex = gsub_regex,
-- replace = gsub_table,
-- } Mouseover title text Link text CatKey Anchor
cvt_bad_input = { 'input "$1" must be a number and unit' , 'invalid input' , 'option', 'invalid_input' },
cvt_bad_num = { 'Value "$1" must be a number' , 'invalid number' , 'option', 'invalid_number' },
cvt_big_prec = { 'Precision "$1" is too large' , 'precision too large' , 'option', 'precision_too_large' },
cvt_invalid_num = { 'Number has overflowed' , 'number overflow' , 'option', 'number_overflow' },
cvt_no_num = { 'Needs the number to be converted' , 'needs a number' , 'option', 'needs_number' },
cvt_no_num2 = { 'Needs another number for a range' , 'needs another number', 'option', 'needs_another_number' },
cvt_bad_altitude = { '"$1" needs an integer' , 'invalid altitude' , 'option', 'invalid_altitude' },
cvt_bad_frac = { '"$1" needs an integer above 1' , 'invalid fraction' , 'option', 'invalid_fraction' },
cvt_bad_prec = { 'Precision "$1" must be an integer' , 'invalid precision' , 'option', 'invalid_precision' },
cvt_bad_sigfig = { '"$1" needs a positive integer' , 'invalid sigfig' , 'option', 'invalid_sigfig' },
cvt_empty_option = { 'Ignored empty option "$1"' , 'empty option' , 'option', 'empty_option' },
cvt_deprecated = { 'Option "$1" is deprecated' , '*' , 'option', 'deprecated_option', format = 'cvt_format2', nowarn = true },
cvt_no_spell = { 'Spelling is not available' , 'bug, ask for help' , 'option', 'ask_for_help' },
cvt_unknown_option = { 'Ignored invalid option "$1"' , 'invalid option' , 'option', 'invalid_option' },
cvt_wd_fail = { 'Unable to access Wikidata' , 'wikidata problem' , 'option', 'wikidata_problem' },
cvt_bad_default = { 'Unit "$1" has an invalid default' , 'bug, ask for help' , 'unit' , 'ask_for_help' },
cvt_bad_unit = { 'Unit "$1" is invalid here' , 'unit invalid here' , 'unit' , 'unit_invalid_here' },
cvt_no_default = { 'Unit "$1" has no default output unit' , 'bug, ask for help' , 'unit' , 'ask_for_help' },
cvt_no_unit = { 'Needs name of unit' , 'needs unit name' , 'unit' , 'needs_unit_name' },
cvt_unknown = { 'Unit name "$1" is not known' , 'unknown unit' , 'unit' , 'unknown_unit' },
cvt_should_be = { '$1' , 'ambiguous unit' , 'unit' , 'ambiguous_unit', regex = unitcode_regex, replace = unitcode_replace },
cvt_mismatch = { 'Cannot convert "$1" to "$2"' , 'unit mismatch' , 'unit' , 'unit_mismatch' },
cvt_bug_convert = { 'Bug: Cannot convert between specified units', 'bug, ask for help' , 'unit' , 'ask_for_help' },
cvt_lookup = { 'Unit "$1" is incorrectly defined' , 'bug, ask for help' , 'unit' , 'ask_for_help' },
}
-- Text to join input value/unit with output value/unit.
local disp_joins = {
-- [1]=before output, [2]=after output, [3]=between outputs in a combination; default "; "
-- [wantname] gives default abbr=off
["or"] = { " or " , "" , " or ", wantname = true },
["sqbr-sp"] = { " [" , "]" },
["sqbr-nbsp"] = { " [" , "]" },
["comma"] = { ", " , "" , ", " },
["semicolon"] = { "; " , "" },
["slash-sp"] = { " / " , "" , wantname = true },
["slash-nbsp"] = { " / ", "" , wantname = true },
["slash-nosp"] = { "/" , "" , wantname = true },
["b"] = { " (" , ")" },
["(or)"] = { " (" , ")", " or " },
["br"] = { "<br />" , "" , wantname = true },
["br()"] = { "<br />(" , ")", wantname = true },
}
-- Text to separate values in a range.
local range_types = {
-- Specifying a table requires either:
-- * "off" and "on" values (for "abbr=off" and "abbr=on"), or
-- * "input" and "output" values (for LHS and RHS);
-- other fields are optional.
-- When "adj=on|abbr=off" applies, spaces in range text are replaced with hyphens.
-- With "exception = true", that also occurs with "adj=on|abbr=on".
-- If "adj" is defined here, that text (unchanged) is used with "adj=on".
["+"] = " + ",
[","] = ", ",
[", and"] = ", and ",
[", or"] = ", or ",
["by"] = " by ",
["-"] = "–",
["to about"] = " to about ",
["and"] = { off = " and ", on = " and ", exception = true },
["and(-)"] = { input = " and ", output = "–" },
["or"] = { off = " or " , on = " or " , exception = true },
["to"] = { off = " to " , on = " to " , exception = true },
["to(-)"] = { input = " to ", output = "–" },
["+/-"] = { off = " ± ", on = " ± ", adj = " ± ", is_range_change = true },
["by(x)"] = { input = " by ", output = " × ", out_range_x = true },
["x"] = { off = " by ", on = " × ", abbr_range_x = true },
["xx"] = " × ",
["*"] = "×",
["/"] = " / ", -- for a table of high/low temperatures with {{convert|83|/|63|F|disp=br()|abbr=values}}
}
local range_aliases = {
-- ["alternative name for a range"] = "standard range name"
["–"] = "-",
["–"] = "-",
["×"] = "x",
["×"] = "x",
["±"] = "+/-",
["±"] = "+/-",
}
-- Convert accepts range text delimited with whitespace, for example, {{convert|1 to 2|ft}}.
-- In addition, the following "words" are accepted without spaces, for example, {{convert|1-2|ft}}.
-- Words must be in correct order for searching, for example, 'x' after 'xx'.
local range_words = { '-', '–', 'xx', 'x', '*' }
local ranges = {
types = range_types,
aliases = range_aliases,
words = range_words,
}
-- Valid option names.
local en_option_name = {
-- ["local text for option name"] = "en name used in this module"
["$"] = "$",
["abbr"] = "abbr",
["adj"] = "adj",
["altitude_ft"] = "altitude_ft",
["altitude_m"] = "altitude_m",
["comma"] = "comma",
["debug"] = "debug",
["disp"] = "disp",
["frac"] = "frac",
["input"] = "input",
["lang"] = "lang",
["lk"] = "lk",
["order"] = "order",
["qid"] = "qid",
["qual"] = "qual",
["qualifier"] = "qual",
["round"] = "round",
["sigfig"] = "sigfig",
["sing"] = "adj", -- "sing" is an old alias for "adj"
["sortable"] = "sortable",
["sp"] = "sp",
["spell"] = "spell",
["stylein"] = "stylein",
["styleout"] = "styleout",
["tracking"] = "tracking",
}
-- Valid option values.
-- Convention: parms.opt_xxx refers to an option that is set here
-- (not intended to be set by the template which invokes this module).
-- Example: At enwiki, "abbr" includes:
-- ["values"] = "opt_values"
-- As a result, if the template uses abbr=values, Module:Convert sets:
-- parms["opt_values"] = true
-- parms["abbr"] = nil
-- Therefore parms.abbr will be nil, or will have one of the listed values
-- that do not start with "opt_".
-- An option value of form "xxx?" is the same as "xxx" but shows the input as deprecated.
local en_option_value = {
["$"] = 'TEXT', -- TEXT should be a currency symbol that will be used instead of "$"
["abbr"] = {
-- ["local text for option value"] = "en value used in this module"
["def"] = "", -- ignored (some wrapper templates call convert with "abbr=def" to mean "default abbreviation")
["h"] = "on", -- abbr=on + use "h" for hand unit (default)
["hh"] = "opt_hand_hh", -- abbr=on + use "hh" for hand unit
["in"] = "in", -- use symbol for LHS unit
["none"] = "off", -- old name for "off"
["off"] = "off", -- use name for all units
["on"] = "on", -- use symbol for all units
["out"] = "out", -- use symbol for RHS unit (default)
["unit"] = "unit", -- abbr=on but abbreviate units only: e6km → million km (not ×10⁶ km)
["values"] = "opt_values", -- show only input and output numbers, not units
["~"] = "opt_also_symbol", -- show input unit symbol as well as name
},
["adj"] = {
["mid"] = "opt_adjectival, opt_adj_mid", -- adj=on with user-specified text after input unit (between input and output)
["off"] = "", -- ignored (off is the default)
["on"] = "opt_adjectival", -- unit name is singular and hyphenated
["pre"] = "opt_one_preunit", -- user-specified text before input unit
["ri0"] = "opt_ri=0", -- round input with precision = 0
["ri1"] = "opt_ri=1", -- round input with precision = 1
["ri2"] = "opt_ri=2", -- round input with precision = 2
["ri3"] = "opt_ri=3", -- round input with precision = 3
},
["altitude_ft"] = 'INTEGER',
["altitude_m"] = 'INTEGER',
["comma"] = {
["5"] = "opt_comma5", -- only use numsep grouping if 5 or more digits
["gaps"] = "opt_gaps", -- use gaps, not numsep, to separate groups of digits
["gaps3"] = "opt_gaps, opt_gaps3", -- group only in threes rather than default of no gap before a single digit after decimal mark
["off"] = "opt_nocomma", -- no numsep in input or output numbers
},
["debug"] = {
["yes"] = "opt_sortable_debug", -- make the normally hidden sort key visible
},
["disp"] = {
["5"] = "opt_round=5?", -- round output value to nearest 5
["b"] = "b", -- join: '(...)'
["(or)"] = "(or)", -- join: '(...)' with 'or' between outputs in a combination
["br"] = "br", -- join: '<br />'
["br()"] = "br()", -- join: '<br />(...)'
["comma"] = "comma", -- join: ','
["flip"] = "opt_flip", -- reverse order of input/output
["number"] = "opt_output_number_only", -- display output value (not input, and not output symbol/name)
["or"] = "or", -- join: 'or'
["out"] = "opt_output_only",
["output number only"] = "opt_output_number_only",
["output only"] = "opt_output_only",
["preunit"] = "opt_two_preunits", -- user-specified text before input and output units
["semicolon"] = "semicolon", -- join: ';'
["sqbr"] = "sqbr", -- join: '[...]'
["table"] = "opt_table", -- output is suitable for a table cell with align="right"
["tablecen"] = "opt_tablecen", -- output is suitable for a table cell with align="center"
["unit"] = "opt_input_unit_only", -- display input symbol/name (not output, and not input value)
["unit or text"] = "opt_input_unit_only, opt_ignore_error", -- display input symbol/name, or given unit code if not known
["unit2"] = "opt_output_unit_only",
["x"] = "x", -- join: <first>...<second> (user-specified text)
},
["frac"] = 'INTEGER',
["input"] = 'TEXT', -- TEXT should be value><space><unitcode> or <wikidata-property-id>
["lang"] = { -- language for output digits (both en and local digits are always accepted for input)
["en"] = "opt_lang_en", -- use en digits for numbers, regardless of local language
["local"] = "opt_lang_local", -- use local digits for numbers (default, although config can change default to en)
},
["lk"] = {
["in"] = "in", -- link LHS unit name or symbol
["off"] = "off", -- do not link: same as default except for hand unit
["on"] = "on", -- link all unit names or symbols (but not twice for the same unit)
["out"] = "out", -- link RHS unit name or symbol
},
["order"] = {
["flip"] = "opt_flip", -- reverse order of input/output
["out"] = "opt_order_out", -- do not show input; instead, use order in output combination, with the first output shown as the input
},
["qid"] = 'TEXT', -- TEXT should be a Wikidata Q item identifier
["qual"] = 'TEXT', -- TEXT should be a Wikidata Q item identifier
["round"] = {
["0.5"] = "opt_round=0.5", -- round output value to nearest 0.5
["5"] = "opt_round=5", -- round output value to nearest 5
["10"] = "opt_round=10", -- round output value to nearest 10 (same as but clearer than "|-1")
["25"] = "opt_round=25", -- round output value to nearest 25
["50"] = "opt_round=50", -- round output value to nearest 50
["each"] = "opt_round_each", -- using default precision in a range, round each output separately (default uses highest precision of each item in range)
},
["sigfig"] = 'INTEGER',
["sortable"] = {
["off"] = "", -- ignored (off is the default)
["on"] = "opt_sortable_on", -- output sort key for use in a sortable table, based on value from converting to a standard base unit
["debug"] = "opt_sortable_on, opt_sortable_debug", -- |sortable=debug is the same as |sortable=on|debug=yes
},
["sp"] = {
["us"] = "opt_sp_us", -- use U.S. spelling (like "meter" instead of default "metre")
},
["spell"] = { -- only English spelling is supported; not scientific notation; only some fractions
["in"] = "opt_spell_in", -- spell input value in words
["In"] = "opt_spell_in, opt_spell_upper", -- spell input value in words with first letter uppercase
["on"] = "opt_spell_in, opt_spell_out", -- spell input and output values in words
["On"] = "opt_spell_in, opt_spell_out, opt_spell_upper", -- same, with first letter of first word in result uppercase
["us"] = "opt_sp_us", -- use U.S. spelling; same as sp=us so spell=us also works
},
["stylein"] = 'TEXT',
["styleout"] = 'TEXT',
["tracking"] = 'TEXT',
}
local titles = {
["frac"] = "Fraction/styles.css",
["sfrac"] = "Sfrac/styles.css",
}
return {
SIprefixes = SIprefixes,
all_categories = all_categories,
all_messages = all_messages,
currency = { ['$'] = true, ['£'] = true, ['€'] = true, ['₱'] = true, ['₽'] = true, ['¥'] = true },
customary_units = customary_units,
disp_joins = disp_joins,
en_option_name = en_option_name,
en_option_value = en_option_value,
eng_scales = eng_scales,
ranges = ranges,
titles = titles,
}
ff98cf24da87736f3469f82401084ca608335d55
Template:Flatlist
10
193
392
391
2023-09-14T01:14:56Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
<templatestyles src="Hlist/styles.css"/><div class="hlist {{{class|}}}" {{#if:{{{style|}}}{{{indent|}}}|style="{{#if:{{{indent|}}}|margin-left: {{#expr:{{{indent}}}*1.6}}em;}} {{{style|}}}"}}>{{#if:{{{1|}}}|
{{{1}}}
</div>}}<noinclude></div>
{{documentation}}
</noinclude>
cf60aa4aef920d48fa394e786f72fe5f6dcd3169
Template:Both
10
194
394
393
2023-09-14T01:14:56Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{SAFESUBST:<noinclude />#if:{{{1|}}}|{{SAFESUBST:<noinclude />#if:{{{2|}}}|1}}}}<noinclude>
{{documentation}}
</noinclude>
57c3c0ffa811a7f31c675b2d79aedf4382e9b88d
Template:Hlist
10
195
396
395
2023-09-14T01:14:57Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{<includeonly>safesubst:</includeonly>#invoke:list|horizontal}}<noinclude>
{{documentation}}
<!-- Categories go on the /doc subpage, and interwikis go on Wikidata. -->
</noinclude>
9e3824c2e3c0e0dbef2f37556ac0b994987fecf9
Template:Br separated entries
10
196
398
397
2023-09-14T01:14:57Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{<includeonly>safesubst:</includeonly>#invoke:Separated entries|br}}<noinclude>
{{documentation}}
</noinclude>
2019f7fc383259e70d66e43cbd97a43d20889f1b
Template:Unbulleted list
10
197
400
399
2023-09-14T01:14:58Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{<includeonly>safesubst:</includeonly>#invoke:list|unbulleted}}<noinclude>
{{documentation}}
<!-- Categories go on the /doc subpage, and interwikis go on Wikidata. -->
</noinclude>
89815a491d3e05b20af446e34cda13f13c25fb4f
Module:InfoboxImage
828
198
403
402
2023-09-14T01:14:59Z
Ilovethehitgameomori
2
1 revision imported
Scribunto
text/plain
-- Inputs:
-- image - Can either be a bare filename (with or without the File:/Image: prefix) or a fully formatted image link
-- page - page to display for multipage images (DjVu)
-- size - size to display the image
-- maxsize - maximum size for image
-- sizedefault - default size to display the image if size param is blank
-- alt - alt text for image
-- title - title text for image
-- border - set to yes if border
-- center - set to yes, if the image has to be centered
-- upright - upright image param
-- suppressplaceholder - if yes then checks to see if image is a placeholder and suppresses it
-- link - page to visit when clicking on image
-- class - HTML classes to add to the image
-- Outputs:
-- Formatted image.
-- More details available at the "Module:InfoboxImage/doc" page
local i = {};
local placeholder_image = {
"Blue - Replace this image female.svg",
"Blue - Replace this image male.svg",
"Female no free image yet.png",
"Flag of None (square).svg",
"Flag of None.svg",
"Flag of.svg",
"Green - Replace this image female.svg",
"Green - Replace this image male.svg",
"Image is needed female.svg",
"Image is needed male.svg",
"Location map of None.svg",
"Male no free image yet.png",
"Missing flag.png",
"No flag.svg",
"No free portrait.svg",
"No portrait (female).svg",
"No portrait (male).svg",
"Red - Replace this image female.svg",
"Red - Replace this image male.svg",
"Replace this image female (blue).svg",
"Replace this image female.svg",
"Replace this image male (blue).svg",
"Replace this image male.svg",
"Silver - Replace this image female.svg",
"Silver - Replace this image male.svg",
"Replace this image.svg",
"Cricket no pic.png",
"CarersLogo.gif",
"Diagram Needed.svg",
"Example.jpg",
"Image placeholder.png",
"No male portrait.svg",
"Nocover-upload.png",
"NoDVDcover copy.png",
"Noribbon.svg",
"No portrait-BFD-test.svg",
"Placeholder barnstar ribbon.png",
"Project Trains no image.png",
"Image-request.png",
"Sin bandera.svg",
"Sin escudo.svg",
"Replace this image - temple.png",
"Replace this image butterfly.png",
"Replace this image.svg",
"Replace this image1.svg",
"Resolution angle.png",
"Image-No portrait-text-BFD-test.svg",
"Insert image here.svg",
"No image available.png",
"NO IMAGE YET square.png",
"NO IMAGE YET.png",
"No Photo Available.svg",
"No Screenshot.svg",
"No-image-available.jpg",
"Null.png",
"PictureNeeded.gif",
"Place holder.jpg",
"Unbenannt.JPG",
"UploadACopyrightFreeImage.svg",
"UploadAnImage.gif",
"UploadAnImage.svg",
"UploadAnImageShort.svg",
"CarersLogo.gif",
"Diagram Needed.svg",
"No male portrait.svg",
"NoDVDcover copy.png",
"Placeholder barnstar ribbon.png",
"Project Trains no image.png",
"Image-request.png",
"Noimage.gif",
}
function i.IsPlaceholder(image)
-- change underscores to spaces
image = mw.ustring.gsub(image, "_", " ");
assert(image ~= nil, 'mw.ustring.gsub(image, "_", " ") must not return nil')
-- if image starts with [[ then remove that and anything after |
if mw.ustring.sub(image,1,2) == "[[" then
image = mw.ustring.sub(image,3);
image = mw.ustring.gsub(image, "([^|]*)|.*", "%1");
assert(image ~= nil, 'mw.ustring.gsub(image, "([^|]*)|.*", "%1") must not return nil')
end
-- Trim spaces
image = mw.ustring.gsub(image, '^[ ]*(.-)[ ]*$', '%1');
assert(image ~= nil, "mw.ustring.gsub(image, '^[ ]*(.-)[ ]*$', '%1') must not return nil")
-- remove prefix if exists
local allNames = mw.site.namespaces[6].aliases
allNames[#allNames + 1] = mw.site.namespaces[6].name
allNames[#allNames + 1] = mw.site.namespaces[6].canonicalName
for i, name in ipairs(allNames) do
if mw.ustring.lower(mw.ustring.sub(image, 1, mw.ustring.len(name) + 1)) == mw.ustring.lower(name .. ":") then
image = mw.ustring.sub(image, mw.ustring.len(name) + 2);
break
end
end
-- Trim spaces
image = mw.ustring.gsub(image, '^[ ]*(.-)[ ]*$', '%1');
-- capitalise first letter
image = mw.ustring.upper(mw.ustring.sub(image,1,1)) .. mw.ustring.sub(image,2);
for i,j in pairs(placeholder_image) do
if image == j then
return true
end
end
return false
end
function i.InfoboxImage(frame)
local image = frame.args["image"];
if image == "" or image == nil then
return "";
end
if image == " " then
return image;
end
if frame.args["suppressplaceholder"] ~= "no" then
if i.IsPlaceholder(image) == true then
return "";
end
end
if mw.ustring.lower(mw.ustring.sub(image,1,5)) == "http:" then
return "";
end
if mw.ustring.lower(mw.ustring.sub(image,1,6)) == "[http:" then
return "";
end
if mw.ustring.lower(mw.ustring.sub(image,1,7)) == "[[http:" then
return "";
end
if mw.ustring.lower(mw.ustring.sub(image,1,6)) == "https:" then
return "";
end
if mw.ustring.lower(mw.ustring.sub(image,1,7)) == "[https:" then
return "";
end
if mw.ustring.lower(mw.ustring.sub(image,1,8)) == "[[https:" then
return "";
end
if mw.ustring.sub(image,1,2) == "[[" then
-- search for thumbnail images and add to tracking cat if found
local cat = "";
if mw.title.getCurrentTitle().namespace == 0 and (mw.ustring.find(image, "|%s*thumb%s*[|%]]") or mw.ustring.find(image, "|%s*thumbnail%s*[|%]]")) then
cat = "[[Category:Pages using infoboxes with thumbnail images]]";
end
return image .. cat;
elseif mw.ustring.sub(image,1,2) == "{{" and mw.ustring.sub(image,1,3) ~= "{{{" then
return image;
elseif mw.ustring.sub(image,1,1) == "<" then
return image;
elseif mw.ustring.sub(image,1,5) == mw.ustring.char(127).."UNIQ" then
-- Found strip marker at begining, so pass don't process at all
return image;
elseif mw.ustring.sub(image,4,9) == "`UNIQ-" then
-- Found strip marker at begining, so pass don't process at all
return image;
else
local result = "";
local page = frame.args["page"];
local size = frame.args["size"];
local maxsize = frame.args["maxsize"];
local sizedefault = frame.args["sizedefault"];
local alt = frame.args["alt"];
local link = frame.args["link"];
local title = frame.args["title"];
local border = frame.args["border"];
local upright = frame.args["upright"] or "";
local thumbtime = frame.args["thumbtime"] or "";
local center = frame.args["center"];
local class = frame.args["class"];
-- remove prefix if exists
local allNames = mw.site.namespaces[6].aliases
allNames[#allNames + 1] = mw.site.namespaces[6].name
allNames[#allNames + 1] = mw.site.namespaces[6].canonicalName
for i, name in ipairs(allNames) do
if mw.ustring.lower(mw.ustring.sub(image, 1, mw.ustring.len(name) + 1)) == mw.ustring.lower(name .. ":") then
image = mw.ustring.sub(image, mw.ustring.len(name) + 2);
break
end
end
if maxsize ~= "" and maxsize ~= nil then
-- if no sizedefault then set to maxsize
if sizedefault == "" or sizedefault == nil then
sizedefault = maxsize
end
-- check to see if size bigger than maxsize
if size ~= "" and size ~= nil then
local sizenumber = tonumber(mw.ustring.match(size,"%d*")) or 0;
local maxsizenumber = tonumber(mw.ustring.match(maxsize,"%d*")) or 0;
if sizenumber>maxsizenumber and maxsizenumber>0 then
size = maxsize;
end
end
end
-- add px to size if just a number
if (tonumber(size) or 0) > 0 then
size = size .. "px";
end
-- add px to sizedefault if just a number
if (tonumber(sizedefault) or 0) > 0 then
sizedefault = sizedefault .. "px";
end
result = "[[File:" .. image;
if page ~= "" and page ~= nil then
result = result .. "|page=" .. page;
end
if size ~= "" and size ~= nil then
result = result .. "|" .. size;
elseif sizedefault ~= "" and sizedefault ~= nil then
result = result .. "|" .. sizedefault;
else
result = result .. "|frameless";
end
if center == "yes" then
result = result .. "|center"
end
if alt ~= "" and alt ~= nil then
result = result .. "|alt=" .. alt;
end
if link ~= "" and link ~= nil then
result = result .. "|link=" .. link;
end
if border == "yes" then
result = result .. "|border";
end
if upright == "yes" then
result = result .. "|upright";
elseif upright ~= "" then
result = result .. "|upright=" .. upright;
end
if thumbtime ~= "" then
result = result .. "|thumbtime=" .. thumbtime;
end
if class ~= nil and class ~= "" then
result = result .. "|class=" .. class;
end
-- if alt value is a keyword then do not use as a description
if alt == "thumbnail" or alt == "thumb" or alt == "frameless" or alt == "left" or alt == "center" or alt == "right" or alt == "upright" or alt == "border" or mw.ustring.match(alt or "", '^[0-9]*px$', 1) ~= nil then
alt = nil;
end
if title ~= "" and title ~= nil then
-- does title param contain any templatestyles? If yes then set to blank.
if mw.ustring.match(frame:preprocess(title), 'UNIQ%-%-templatestyles', 1) ~= nil then
title = nil;
end
end
if title ~= "" and title ~= nil then
result = result .. "|" .. title;
end
result = result .. "]]";
return result;
end
end
return i;
0ee5fe75ba239fc5c9cedc81ca11bdc0be068542
Module:Separated entries
828
199
405
404
2023-09-14T01:15:00Z
Ilovethehitgameomori
2
1 revision imported
Scribunto
text/plain
-- This module takes positional parameters as input and concatenates them with
-- an optional separator. The final separator (the "conjunction") can be
-- specified independently, enabling natural-language lists like
-- "foo, bar, baz and qux". The starting parameter can also be specified.
local compressSparseArray = require('Module:TableTools').compressSparseArray
local p = {}
function p._main(args)
local separator = args.separator
-- Decode (convert to Unicode) HTML escape sequences, such as " " for space.
and mw.text.decode(args.separator) or ''
local conjunction = args.conjunction and mw.text.decode(args.conjunction) or separator
-- Discard values before the starting parameter.
local start = tonumber(args.start)
if start then
for i = 1, start - 1 do args[i] = nil end
end
-- Discard named parameters.
local values = compressSparseArray(args)
return mw.text.listToText(values, separator, conjunction)
end
local function makeInvokeFunction(separator, conjunction, first)
return function (frame)
local args = require('Module:Arguments').getArgs(frame)
args.separator = separator or args.separator
args.conjunction = conjunction or args.conjunction
args.first = first or args.first
return p._main(args)
end
end
p.main = makeInvokeFunction()
p.br = makeInvokeFunction('<br />')
p.comma = makeInvokeFunction(mw.message.new('comma-separator'):plain())
return p
e80231ff3de01afd7f62a94e0a34dc1e67504085
Template:Spaces
10
200
407
406
2023-09-14T01:15:00Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
<span class="nowrap">{{#iferror:{{#expr:{{{1|1}}}}}
|{{#switch:{{{1}}}
|fig= 
|en= 
|em= 
|thin= 
|hair= 
|
}}
|{{#invoke:String|rep|{{#switch:{{{2}}}
|fig= 
|en= 
|em= 
|thin= 
|hair= 
|
}}|{{{1|1}}}}}
}}</span><noinclude>
{{documentation}}
</noinclude>
a9ed762825e7579f15dcb9b171b0c1c3bf524b3f
Template:If empty
10
201
409
408
2023-09-14T01:15:02Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{<includeonly>safesubst:</includeonly>#invoke:If empty|main}}<noinclude>{{Documentation}}</noinclude>
745940b7bdde8a1585c887ee4ee5ce81d98461a4
Module:If empty
828
202
411
410
2023-09-14T01:15:02Z
Ilovethehitgameomori
2
1 revision imported
Scribunto
text/plain
local p = {}
function p.main(frame)
local args = require('Module:Arguments').getArgs(frame, {wrappers = 'Template:If empty', removeBlanks = false})
for k,v in ipairs(args) do
if v ~= '' then
return v
end
end
end
return p
4790391408957dea3ff9f453834c05f6b379a45c
Template:Convert
10
203
413
412
2023-09-14T01:15:03Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
<includeonly>{{{{{♥|safesubst:}}}#invoke:convert|convert}}</includeonly><noinclude>
{{documentation}}
<!-- Add categories to the /doc subpage, interwikis to Wikidata, not here -->
</noinclude>
952ac4080dc4a427c4a65db9951c8a4f4c91c626
Template:0
10
204
415
414
2023-09-14T01:15:03Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
<includeonly><span style="visibility:hidden;color:transparent;">{{{1|0}}}</span></includeonly><noinclude>
{{documentation}}
</noinclude>
3a81b6766266cc4e7b5039558fa86857b943df9b
Template:Lang
10
205
417
416
2023-09-14T01:15:03Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
<includeonly>{{#invoke:Lang|{{{fn|lang}}}}}</includeonly><noinclude>
{{Documentation}}
</noinclude>
ed35aafbfe8198c5ad80fd861124244d0c7f2742
Template:Small
10
206
419
418
2023-09-14T01:15:04Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
<span style="font-size:85%;">{{{1}}}</span><includeonly>{{SAFESUBST:#if:{{{1|}}}||[[Category:Pages using small with an empty input parameter]]}}</includeonly><noinclude>
{{Documentation}}<!--Categories and interwikis go in the /doc sub-page.-->
</noinclude>
76d3535c2917cc3bfb1b032506073faa15e1a480
Template:Smaller
10
207
421
420
2023-09-14T01:15:04Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
#REDIRECT [[Template:Small]]
{{r from merge}}
2209ecdc4a987eb3d73f648941a3daaed04cd5d5
Template:Plainlist
10
208
423
422
2023-09-14T01:15:04Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
<templatestyles src="Plainlist/styles.css"/><div class="plainlist {{{class|}}}" {{#if:{{{style|}}}{{{indent|}}}|style="{{#if:{{{indent|}}}|margin-left: {{#expr:{{{indent}}}*1.6}}em;}} {{{style|}}}"}}>{{#if:{{{1|}}}|
{{{1}}}
</div>}}<noinclude></div>
{{documentation}}
</noinclude>
582fe7098c25c1ecfc0ad32f62ecd674ebe2bdf0
Template:\
10
209
425
424
2023-09-14T01:15:05Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
/ <noinclude>
{{Documentation}}
<!-- Add categories and interwikis to the /doc subpage, not here! -->
</noinclude>
8cbfbe9d6f2aaa7726dfacfb2ee3c213dae39921
Module:Exponential search
828
210
427
426
2023-09-14T01:15:06Z
Ilovethehitgameomori
2
1 revision imported
Scribunto
text/plain
-- This module provides a generic exponential search algorithm.
require[[strict]]
local checkType = require('libraryUtil').checkType
local floor = math.floor
local function midPoint(lower, upper)
return floor(lower + (upper - lower) / 2)
end
local function search(testFunc, i, lower, upper)
if testFunc(i) then
if i + 1 == upper then
return i
end
lower = i
if upper then
i = midPoint(lower, upper)
else
i = i * 2
end
return search(testFunc, i, lower, upper)
else
upper = i
i = midPoint(lower, upper)
return search(testFunc, i, lower, upper)
end
end
return function (testFunc, init)
checkType('Exponential search', 1, testFunc, 'function')
checkType('Exponential search', 2, init, 'number', true)
if init and (init < 1 or init ~= floor(init) or init == math.huge) then
error(string.format(
"invalid init value '%s' detected in argument #2 to " ..
"'Exponential search' (init value must be a positive integer)",
tostring(init)
), 2)
end
init = init or 2
if not testFunc(1) then
return nil
end
return search(testFunc, init, 1, nil)
end
a9037be0c44536be79b2d7a26155bfb907368ae7
Module:Unicode data/scripts
828
211
429
428
2023-09-14T01:15:07Z
Ilovethehitgameomori
2
1 revision imported
Scribunto
text/plain
--[=[
-- Official Unicode script values for individual codepoints and ranges of
-- codepoints.
-- https://www.unicode.org/Public/UNIDATA/Scripts.txt provided
-- the script names, and https://www.unicode.org/Public/UNIDATA/PropertyValueAliases.txt
-- provided script codes corresponding to the names (see [[Script (Unicode)]]).
--]=]
local data = {
singles = {
[0x000AA] = "Latn",
[0x000BA] = "Latn",
[0x000D7] = "Zyyy",
[0x000F7] = "Zyyy",
[0x00374] = "Zyyy",
[0x0037E] = "Zyyy",
[0x0037F] = "Grek",
[0x00384] = "Grek",
[0x00385] = "Zyyy",
[0x00386] = "Grek",
[0x00387] = "Zyyy",
[0x0038C] = "Grek",
[0x00605] = "Zyyy",
[0x0060C] = "Zyyy",
[0x0061B] = "Zyyy",
[0x0061F] = "Zyyy",
[0x00640] = "Zyyy",
[0x00670] = "Zinh",
[0x006DD] = "Zyyy",
[0x0085E] = "Mand",
[0x008E2] = "Zyyy",
[0x009B2] = "Beng",
[0x009D7] = "Beng",
[0x00A3C] = "Guru",
[0x00A51] = "Guru",
[0x00A5E] = "Guru",
[0x00AD0] = "Gujr",
[0x00B9C] = "Taml",
[0x00BD0] = "Taml",
[0x00BD7] = "Taml",
[0x00C5D] = "Telu",
[0x00DBD] = "Sinh",
[0x00DCA] = "Sinh",
[0x00DD6] = "Sinh",
[0x00E3F] = "Zyyy",
[0x00E84] = "Laoo",
[0x00EA5] = "Laoo",
[0x00EC6] = "Laoo",
[0x010C7] = "Geor",
[0x010CD] = "Geor",
[0x010FB] = "Zyyy",
[0x01258] = "Ethi",
[0x012C0] = "Ethi",
[0x0171F] = "Tglg",
[0x01804] = "Mong",
[0x01805] = "Zyyy",
[0x01940] = "Limb",
[0x01CD3] = "Zyyy",
[0x01CE1] = "Zyyy",
[0x01CED] = "Zinh",
[0x01CF4] = "Zinh",
[0x01CFA] = "Zyyy",
[0x01D2B] = "Cyrl",
[0x01D78] = "Cyrl",
[0x01DBF] = "Grek",
[0x01F59] = "Grek",
[0x01F5B] = "Grek",
[0x01F5D] = "Grek",
[0x02071] = "Latn",
[0x0207F] = "Latn",
[0x02126] = "Grek",
[0x02132] = "Latn",
[0x0214E] = "Latn",
[0x02D27] = "Geor",
[0x02D2D] = "Geor",
[0x02D7F] = "Tfng",
[0x03005] = "Hani",
[0x03006] = "Zyyy",
[0x03007] = "Hani",
[0x030A0] = "Zyyy",
[0x031EF] = "Zyyy",
[0x032FF] = "Zyyy",
[0x0A7D3] = "Latn",
[0x0A92E] = "Zyyy",
[0x0A92F] = "Kali",
[0x0A95F] = "Rjng",
[0x0A9CF] = "Zyyy",
[0x0AB5B] = "Zyyy",
[0x0AB65] = "Grek",
[0x0FB3E] = "Hebr",
[0x0FDCF] = "Arab",
[0x0FEFF] = "Zyyy",
[0x0FF70] = "Zyyy",
[0x101A0] = "Grek",
[0x101FD] = "Zinh",
[0x102E0] = "Zinh",
[0x1039F] = "Ugar",
[0x1056F] = "Aghb",
[0x10808] = "Cprt",
[0x1083C] = "Cprt",
[0x1083F] = "Cprt",
[0x1091F] = "Phnx",
[0x1093F] = "Lydi",
[0x1107F] = "Brah",
[0x110CD] = "Kthi",
[0x11288] = "Mult",
[0x1133B] = "Zinh",
[0x11350] = "Gran",
[0x11357] = "Gran",
[0x118FF] = "Wara",
[0x11909] = "Diak",
[0x11D3A] = "Gonm",
[0x11FB0] = "Lisu",
[0x11FFF] = "Taml",
[0x16FE0] = "Tang",
[0x16FE1] = "Nshu",
[0x16FE4] = "Kits",
[0x1B000] = "Kana",
[0x1B132] = "Hira",
[0x1B155] = "Kana",
[0x1D4A2] = "Zyyy",
[0x1D4BB] = "Zyyy",
[0x1D546] = "Zyyy",
[0x1E08F] = "Cyrl",
[0x1E2FF] = "Wcho",
[0x1EE24] = "Arab",
[0x1EE27] = "Arab",
[0x1EE39] = "Arab",
[0x1EE3B] = "Arab",
[0x1EE42] = "Arab",
[0x1EE47] = "Arab",
[0x1EE49] = "Arab",
[0x1EE4B] = "Arab",
[0x1EE54] = "Arab",
[0x1EE57] = "Arab",
[0x1EE59] = "Arab",
[0x1EE5B] = "Arab",
[0x1EE5D] = "Arab",
[0x1EE5F] = "Arab",
[0x1EE64] = "Arab",
[0x1EE7E] = "Arab",
[0x1F200] = "Hira",
[0x1F7F0] = "Zyyy",
[0xE0001] = "Zyyy",
},
ranges = {
{ 0x00000, 0x00040, "Zyyy" },
{ 0x00041, 0x0005A, "Latn" },
{ 0x0005B, 0x00060, "Zyyy" },
{ 0x00061, 0x0007A, "Latn" },
{ 0x0007B, 0x000A9, "Zyyy" },
{ 0x000AB, 0x000B9, "Zyyy" },
{ 0x000BB, 0x000BF, "Zyyy" },
{ 0x000C0, 0x000D6, "Latn" },
{ 0x000D8, 0x000F6, "Latn" },
{ 0x000F8, 0x002B8, "Latn" },
{ 0x002B9, 0x002DF, "Zyyy" },
{ 0x002E0, 0x002E4, "Latn" },
{ 0x002E5, 0x002E9, "Zyyy" },
{ 0x002EA, 0x002EB, "Bopo" },
{ 0x002EC, 0x002FF, "Zyyy" },
{ 0x00300, 0x0036F, "Zinh" },
{ 0x00370, 0x00373, "Grek" },
{ 0x00375, 0x00377, "Grek" },
{ 0x0037A, 0x0037D, "Grek" },
{ 0x00388, 0x0038A, "Grek" },
{ 0x0038E, 0x003A1, "Grek" },
{ 0x003A3, 0x003E1, "Grek" },
{ 0x003E2, 0x003EF, "Copt" },
{ 0x003F0, 0x003FF, "Grek" },
{ 0x00400, 0x00484, "Cyrl" },
{ 0x00485, 0x00486, "Zinh" },
{ 0x00487, 0x0052F, "Cyrl" },
{ 0x00531, 0x00556, "Armn" },
{ 0x00559, 0x0058A, "Armn" },
{ 0x0058D, 0x0058F, "Armn" },
{ 0x00591, 0x005C7, "Hebr" },
{ 0x005D0, 0x005EA, "Hebr" },
{ 0x005EF, 0x005F4, "Hebr" },
{ 0x00600, 0x00604, "Arab" },
{ 0x00606, 0x0060B, "Arab" },
{ 0x0060D, 0x0061A, "Arab" },
{ 0x0061C, 0x0061E, "Arab" },
{ 0x00620, 0x0063F, "Arab" },
{ 0x00641, 0x0064A, "Arab" },
{ 0x0064B, 0x00655, "Zinh" },
{ 0x00656, 0x0066F, "Arab" },
{ 0x00671, 0x006DC, "Arab" },
{ 0x006DE, 0x006FF, "Arab" },
{ 0x00700, 0x0070D, "Syrc" },
{ 0x0070F, 0x0074A, "Syrc" },
{ 0x0074D, 0x0074F, "Syrc" },
{ 0x00750, 0x0077F, "Arab" },
{ 0x00780, 0x007B1, "Thaa" },
{ 0x007C0, 0x007FA, "Nkoo" },
{ 0x007FD, 0x007FF, "Nkoo" },
{ 0x00800, 0x0082D, "Samr" },
{ 0x00830, 0x0083E, "Samr" },
{ 0x00840, 0x0085B, "Mand" },
{ 0x00860, 0x0086A, "Syrc" },
{ 0x00870, 0x0088E, "Arab" },
{ 0x00890, 0x00891, "Arab" },
{ 0x00898, 0x008E1, "Arab" },
{ 0x008E3, 0x008FF, "Arab" },
{ 0x00900, 0x00950, "Deva" },
{ 0x00951, 0x00954, "Zinh" },
{ 0x00955, 0x00963, "Deva" },
{ 0x00964, 0x00965, "Zyyy" },
{ 0x00966, 0x0097F, "Deva" },
{ 0x00980, 0x00983, "Beng" },
{ 0x00985, 0x0098C, "Beng" },
{ 0x0098F, 0x00990, "Beng" },
{ 0x00993, 0x009A8, "Beng" },
{ 0x009AA, 0x009B0, "Beng" },
{ 0x009B6, 0x009B9, "Beng" },
{ 0x009BC, 0x009C4, "Beng" },
{ 0x009C7, 0x009C8, "Beng" },
{ 0x009CB, 0x009CE, "Beng" },
{ 0x009DC, 0x009DD, "Beng" },
{ 0x009DF, 0x009E3, "Beng" },
{ 0x009E6, 0x009FE, "Beng" },
{ 0x00A01, 0x00A03, "Guru" },
{ 0x00A05, 0x00A0A, "Guru" },
{ 0x00A0F, 0x00A10, "Guru" },
{ 0x00A13, 0x00A28, "Guru" },
{ 0x00A2A, 0x00A30, "Guru" },
{ 0x00A32, 0x00A33, "Guru" },
{ 0x00A35, 0x00A36, "Guru" },
{ 0x00A38, 0x00A39, "Guru" },
{ 0x00A3E, 0x00A42, "Guru" },
{ 0x00A47, 0x00A48, "Guru" },
{ 0x00A4B, 0x00A4D, "Guru" },
{ 0x00A59, 0x00A5C, "Guru" },
{ 0x00A66, 0x00A76, "Guru" },
{ 0x00A81, 0x00A83, "Gujr" },
{ 0x00A85, 0x00A8D, "Gujr" },
{ 0x00A8F, 0x00A91, "Gujr" },
{ 0x00A93, 0x00AA8, "Gujr" },
{ 0x00AAA, 0x00AB0, "Gujr" },
{ 0x00AB2, 0x00AB3, "Gujr" },
{ 0x00AB5, 0x00AB9, "Gujr" },
{ 0x00ABC, 0x00AC5, "Gujr" },
{ 0x00AC7, 0x00AC9, "Gujr" },
{ 0x00ACB, 0x00ACD, "Gujr" },
{ 0x00AE0, 0x00AE3, "Gujr" },
{ 0x00AE6, 0x00AF1, "Gujr" },
{ 0x00AF9, 0x00AFF, "Gujr" },
{ 0x00B01, 0x00B03, "Orya" },
{ 0x00B05, 0x00B0C, "Orya" },
{ 0x00B0F, 0x00B10, "Orya" },
{ 0x00B13, 0x00B28, "Orya" },
{ 0x00B2A, 0x00B30, "Orya" },
{ 0x00B32, 0x00B33, "Orya" },
{ 0x00B35, 0x00B39, "Orya" },
{ 0x00B3C, 0x00B44, "Orya" },
{ 0x00B47, 0x00B48, "Orya" },
{ 0x00B4B, 0x00B4D, "Orya" },
{ 0x00B55, 0x00B57, "Orya" },
{ 0x00B5C, 0x00B5D, "Orya" },
{ 0x00B5F, 0x00B63, "Orya" },
{ 0x00B66, 0x00B77, "Orya" },
{ 0x00B82, 0x00B83, "Taml" },
{ 0x00B85, 0x00B8A, "Taml" },
{ 0x00B8E, 0x00B90, "Taml" },
{ 0x00B92, 0x00B95, "Taml" },
{ 0x00B99, 0x00B9A, "Taml" },
{ 0x00B9E, 0x00B9F, "Taml" },
{ 0x00BA3, 0x00BA4, "Taml" },
{ 0x00BA8, 0x00BAA, "Taml" },
{ 0x00BAE, 0x00BB9, "Taml" },
{ 0x00BBE, 0x00BC2, "Taml" },
{ 0x00BC6, 0x00BC8, "Taml" },
{ 0x00BCA, 0x00BCD, "Taml" },
{ 0x00BE6, 0x00BFA, "Taml" },
{ 0x00C00, 0x00C0C, "Telu" },
{ 0x00C0E, 0x00C10, "Telu" },
{ 0x00C12, 0x00C28, "Telu" },
{ 0x00C2A, 0x00C39, "Telu" },
{ 0x00C3C, 0x00C44, "Telu" },
{ 0x00C46, 0x00C48, "Telu" },
{ 0x00C4A, 0x00C4D, "Telu" },
{ 0x00C55, 0x00C56, "Telu" },
{ 0x00C58, 0x00C5A, "Telu" },
{ 0x00C60, 0x00C63, "Telu" },
{ 0x00C66, 0x00C6F, "Telu" },
{ 0x00C77, 0x00C7F, "Telu" },
{ 0x00C80, 0x00C8C, "Knda" },
{ 0x00C8E, 0x00C90, "Knda" },
{ 0x00C92, 0x00CA8, "Knda" },
{ 0x00CAA, 0x00CB3, "Knda" },
{ 0x00CB5, 0x00CB9, "Knda" },
{ 0x00CBC, 0x00CC4, "Knda" },
{ 0x00CC6, 0x00CC8, "Knda" },
{ 0x00CCA, 0x00CCD, "Knda" },
{ 0x00CD5, 0x00CD6, "Knda" },
{ 0x00CDD, 0x00CDE, "Knda" },
{ 0x00CE0, 0x00CE3, "Knda" },
{ 0x00CE6, 0x00CEF, "Knda" },
{ 0x00CF1, 0x00CF3, "Knda" },
{ 0x00D00, 0x00D0C, "Mlym" },
{ 0x00D0E, 0x00D10, "Mlym" },
{ 0x00D12, 0x00D44, "Mlym" },
{ 0x00D46, 0x00D48, "Mlym" },
{ 0x00D4A, 0x00D4F, "Mlym" },
{ 0x00D54, 0x00D63, "Mlym" },
{ 0x00D66, 0x00D7F, "Mlym" },
{ 0x00D81, 0x00D83, "Sinh" },
{ 0x00D85, 0x00D96, "Sinh" },
{ 0x00D9A, 0x00DB1, "Sinh" },
{ 0x00DB3, 0x00DBB, "Sinh" },
{ 0x00DC0, 0x00DC6, "Sinh" },
{ 0x00DCF, 0x00DD4, "Sinh" },
{ 0x00DD8, 0x00DDF, "Sinh" },
{ 0x00DE6, 0x00DEF, "Sinh" },
{ 0x00DF2, 0x00DF4, "Sinh" },
{ 0x00E01, 0x00E3A, "Thai" },
{ 0x00E40, 0x00E5B, "Thai" },
{ 0x00E81, 0x00E82, "Laoo" },
{ 0x00E86, 0x00E8A, "Laoo" },
{ 0x00E8C, 0x00EA3, "Laoo" },
{ 0x00EA7, 0x00EBD, "Laoo" },
{ 0x00EC0, 0x00EC4, "Laoo" },
{ 0x00EC8, 0x00ECE, "Laoo" },
{ 0x00ED0, 0x00ED9, "Laoo" },
{ 0x00EDC, 0x00EDF, "Laoo" },
{ 0x00F00, 0x00F47, "Tibt" },
{ 0x00F49, 0x00F6C, "Tibt" },
{ 0x00F71, 0x00F97, "Tibt" },
{ 0x00F99, 0x00FBC, "Tibt" },
{ 0x00FBE, 0x00FCC, "Tibt" },
{ 0x00FCE, 0x00FD4, "Tibt" },
{ 0x00FD5, 0x00FD8, "Zyyy" },
{ 0x00FD9, 0x00FDA, "Tibt" },
{ 0x01000, 0x0109F, "Mymr" },
{ 0x010A0, 0x010C5, "Geor" },
{ 0x010D0, 0x010FA, "Geor" },
{ 0x010FC, 0x010FF, "Geor" },
{ 0x01100, 0x011FF, "Hang" },
{ 0x01200, 0x01248, "Ethi" },
{ 0x0124A, 0x0124D, "Ethi" },
{ 0x01250, 0x01256, "Ethi" },
{ 0x0125A, 0x0125D, "Ethi" },
{ 0x01260, 0x01288, "Ethi" },
{ 0x0128A, 0x0128D, "Ethi" },
{ 0x01290, 0x012B0, "Ethi" },
{ 0x012B2, 0x012B5, "Ethi" },
{ 0x012B8, 0x012BE, "Ethi" },
{ 0x012C2, 0x012C5, "Ethi" },
{ 0x012C8, 0x012D6, "Ethi" },
{ 0x012D8, 0x01310, "Ethi" },
{ 0x01312, 0x01315, "Ethi" },
{ 0x01318, 0x0135A, "Ethi" },
{ 0x0135D, 0x0137C, "Ethi" },
{ 0x01380, 0x01399, "Ethi" },
{ 0x013A0, 0x013F5, "Cher" },
{ 0x013F8, 0x013FD, "Cher" },
{ 0x01400, 0x0167F, "Cans" },
{ 0x01680, 0x0169C, "Ogam" },
{ 0x016A0, 0x016EA, "Runr" },
{ 0x016EB, 0x016ED, "Zyyy" },
{ 0x016EE, 0x016F8, "Runr" },
{ 0x01700, 0x01715, "Tglg" },
{ 0x01720, 0x01734, "Hano" },
{ 0x01735, 0x01736, "Zyyy" },
{ 0x01740, 0x01753, "Buhd" },
{ 0x01760, 0x0176C, "Tagb" },
{ 0x0176E, 0x01770, "Tagb" },
{ 0x01772, 0x01773, "Tagb" },
{ 0x01780, 0x017DD, "Khmr" },
{ 0x017E0, 0x017E9, "Khmr" },
{ 0x017F0, 0x017F9, "Khmr" },
{ 0x01800, 0x01801, "Mong" },
{ 0x01802, 0x01803, "Zyyy" },
{ 0x01806, 0x01819, "Mong" },
{ 0x01820, 0x01878, "Mong" },
{ 0x01880, 0x018AA, "Mong" },
{ 0x018B0, 0x018F5, "Cans" },
{ 0x01900, 0x0191E, "Limb" },
{ 0x01920, 0x0192B, "Limb" },
{ 0x01930, 0x0193B, "Limb" },
{ 0x01944, 0x0194F, "Limb" },
{ 0x01950, 0x0196D, "Tale" },
{ 0x01970, 0x01974, "Tale" },
{ 0x01980, 0x019AB, "Talu" },
{ 0x019B0, 0x019C9, "Talu" },
{ 0x019D0, 0x019DA, "Talu" },
{ 0x019DE, 0x019DF, "Talu" },
{ 0x019E0, 0x019FF, "Khmr" },
{ 0x01A00, 0x01A1B, "Bugi" },
{ 0x01A1E, 0x01A1F, "Bugi" },
{ 0x01A20, 0x01A5E, "Lana" },
{ 0x01A60, 0x01A7C, "Lana" },
{ 0x01A7F, 0x01A89, "Lana" },
{ 0x01A90, 0x01A99, "Lana" },
{ 0x01AA0, 0x01AAD, "Lana" },
{ 0x01AB0, 0x01ACE, "Zinh" },
{ 0x01B00, 0x01B4C, "Bali" },
{ 0x01B50, 0x01B7E, "Bali" },
{ 0x01B80, 0x01BBF, "Sund" },
{ 0x01BC0, 0x01BF3, "Batk" },
{ 0x01BFC, 0x01BFF, "Batk" },
{ 0x01C00, 0x01C37, "Lepc" },
{ 0x01C3B, 0x01C49, "Lepc" },
{ 0x01C4D, 0x01C4F, "Lepc" },
{ 0x01C50, 0x01C7F, "Olck" },
{ 0x01C80, 0x01C88, "Cyrl" },
{ 0x01C90, 0x01CBA, "Geor" },
{ 0x01CBD, 0x01CBF, "Geor" },
{ 0x01CC0, 0x01CC7, "Sund" },
{ 0x01CD0, 0x01CD2, "Zinh" },
{ 0x01CD4, 0x01CE0, "Zinh" },
{ 0x01CE2, 0x01CE8, "Zinh" },
{ 0x01CE9, 0x01CEC, "Zyyy" },
{ 0x01CEE, 0x01CF3, "Zyyy" },
{ 0x01CF5, 0x01CF7, "Zyyy" },
{ 0x01CF8, 0x01CF9, "Zinh" },
{ 0x01D00, 0x01D25, "Latn" },
{ 0x01D26, 0x01D2A, "Grek" },
{ 0x01D2C, 0x01D5C, "Latn" },
{ 0x01D5D, 0x01D61, "Grek" },
{ 0x01D62, 0x01D65, "Latn" },
{ 0x01D66, 0x01D6A, "Grek" },
{ 0x01D6B, 0x01D77, "Latn" },
{ 0x01D79, 0x01DBE, "Latn" },
{ 0x01DC0, 0x01DFF, "Zinh" },
{ 0x01E00, 0x01EFF, "Latn" },
{ 0x01F00, 0x01F15, "Grek" },
{ 0x01F18, 0x01F1D, "Grek" },
{ 0x01F20, 0x01F45, "Grek" },
{ 0x01F48, 0x01F4D, "Grek" },
{ 0x01F50, 0x01F57, "Grek" },
{ 0x01F5F, 0x01F7D, "Grek" },
{ 0x01F80, 0x01FB4, "Grek" },
{ 0x01FB6, 0x01FC4, "Grek" },
{ 0x01FC6, 0x01FD3, "Grek" },
{ 0x01FD6, 0x01FDB, "Grek" },
{ 0x01FDD, 0x01FEF, "Grek" },
{ 0x01FF2, 0x01FF4, "Grek" },
{ 0x01FF6, 0x01FFE, "Grek" },
{ 0x02000, 0x0200B, "Zyyy" },
{ 0x0200C, 0x0200D, "Zinh" },
{ 0x0200E, 0x02064, "Zyyy" },
{ 0x02066, 0x02070, "Zyyy" },
{ 0x02074, 0x0207E, "Zyyy" },
{ 0x02080, 0x0208E, "Zyyy" },
{ 0x02090, 0x0209C, "Latn" },
{ 0x020A0, 0x020C0, "Zyyy" },
{ 0x020D0, 0x020F0, "Zinh" },
{ 0x02100, 0x02125, "Zyyy" },
{ 0x02127, 0x02129, "Zyyy" },
{ 0x0212A, 0x0212B, "Latn" },
{ 0x0212C, 0x02131, "Zyyy" },
{ 0x02133, 0x0214D, "Zyyy" },
{ 0x0214F, 0x0215F, "Zyyy" },
{ 0x02160, 0x02188, "Latn" },
{ 0x02189, 0x0218B, "Zyyy" },
{ 0x02190, 0x02426, "Zyyy" },
{ 0x02440, 0x0244A, "Zyyy" },
{ 0x02460, 0x027FF, "Zyyy" },
{ 0x02800, 0x028FF, "Brai" },
{ 0x02900, 0x02B73, "Zyyy" },
{ 0x02B76, 0x02B95, "Zyyy" },
{ 0x02B97, 0x02BFF, "Zyyy" },
{ 0x02C00, 0x02C5F, "Glag" },
{ 0x02C60, 0x02C7F, "Latn" },
{ 0x02C80, 0x02CF3, "Copt" },
{ 0x02CF9, 0x02CFF, "Copt" },
{ 0x02D00, 0x02D25, "Geor" },
{ 0x02D30, 0x02D67, "Tfng" },
{ 0x02D6F, 0x02D70, "Tfng" },
{ 0x02D80, 0x02D96, "Ethi" },
{ 0x02DA0, 0x02DA6, "Ethi" },
{ 0x02DA8, 0x02DAE, "Ethi" },
{ 0x02DB0, 0x02DB6, "Ethi" },
{ 0x02DB8, 0x02DBE, "Ethi" },
{ 0x02DC0, 0x02DC6, "Ethi" },
{ 0x02DC8, 0x02DCE, "Ethi" },
{ 0x02DD0, 0x02DD6, "Ethi" },
{ 0x02DD8, 0x02DDE, "Ethi" },
{ 0x02DE0, 0x02DFF, "Cyrl" },
{ 0x02E00, 0x02E5D, "Zyyy" },
{ 0x02E80, 0x02E99, "Hani" },
{ 0x02E9B, 0x02EF3, "Hani" },
{ 0x02F00, 0x02FD5, "Hani" },
{ 0x02FF0, 0x03004, "Zyyy" },
{ 0x03008, 0x03020, "Zyyy" },
{ 0x03021, 0x03029, "Hani" },
{ 0x0302A, 0x0302D, "Zinh" },
{ 0x0302E, 0x0302F, "Hang" },
{ 0x03030, 0x03037, "Zyyy" },
{ 0x03038, 0x0303B, "Hani" },
{ 0x0303C, 0x0303F, "Zyyy" },
{ 0x03041, 0x03096, "Hira" },
{ 0x03099, 0x0309A, "Zinh" },
{ 0x0309B, 0x0309C, "Zyyy" },
{ 0x0309D, 0x0309F, "Hira" },
{ 0x030A1, 0x030FA, "Kana" },
{ 0x030FB, 0x030FC, "Zyyy" },
{ 0x030FD, 0x030FF, "Kana" },
{ 0x03105, 0x0312F, "Bopo" },
{ 0x03131, 0x0318E, "Hang" },
{ 0x03190, 0x0319F, "Zyyy" },
{ 0x031A0, 0x031BF, "Bopo" },
{ 0x031C0, 0x031E3, "Zyyy" },
{ 0x031F0, 0x031FF, "Kana" },
{ 0x03200, 0x0321E, "Hang" },
{ 0x03220, 0x0325F, "Zyyy" },
{ 0x03260, 0x0327E, "Hang" },
{ 0x0327F, 0x032CF, "Zyyy" },
{ 0x032D0, 0x032FE, "Kana" },
{ 0x03300, 0x03357, "Kana" },
{ 0x03358, 0x033FF, "Zyyy" },
{ 0x03400, 0x04DBF, "Hani" },
{ 0x04DC0, 0x04DFF, "Zyyy" },
{ 0x04E00, 0x09FFF, "Hani" },
{ 0x0A000, 0x0A48C, "Yiii" },
{ 0x0A490, 0x0A4C6, "Yiii" },
{ 0x0A4D0, 0x0A4FF, "Lisu" },
{ 0x0A500, 0x0A62B, "Vaii" },
{ 0x0A640, 0x0A69F, "Cyrl" },
{ 0x0A6A0, 0x0A6F7, "Bamu" },
{ 0x0A700, 0x0A721, "Zyyy" },
{ 0x0A722, 0x0A787, "Latn" },
{ 0x0A788, 0x0A78A, "Zyyy" },
{ 0x0A78B, 0x0A7CA, "Latn" },
{ 0x0A7D0, 0x0A7D1, "Latn" },
{ 0x0A7D5, 0x0A7D9, "Latn" },
{ 0x0A7F2, 0x0A7FF, "Latn" },
{ 0x0A800, 0x0A82C, "Sylo" },
{ 0x0A830, 0x0A839, "Zyyy" },
{ 0x0A840, 0x0A877, "Phag" },
{ 0x0A880, 0x0A8C5, "Saur" },
{ 0x0A8CE, 0x0A8D9, "Saur" },
{ 0x0A8E0, 0x0A8FF, "Deva" },
{ 0x0A900, 0x0A92D, "Kali" },
{ 0x0A930, 0x0A953, "Rjng" },
{ 0x0A960, 0x0A97C, "Hang" },
{ 0x0A980, 0x0A9CD, "Java" },
{ 0x0A9D0, 0x0A9D9, "Java" },
{ 0x0A9DE, 0x0A9DF, "Java" },
{ 0x0A9E0, 0x0A9FE, "Mymr" },
{ 0x0AA00, 0x0AA36, "Cham" },
{ 0x0AA40, 0x0AA4D, "Cham" },
{ 0x0AA50, 0x0AA59, "Cham" },
{ 0x0AA5C, 0x0AA5F, "Cham" },
{ 0x0AA60, 0x0AA7F, "Mymr" },
{ 0x0AA80, 0x0AAC2, "Tavt" },
{ 0x0AADB, 0x0AADF, "Tavt" },
{ 0x0AAE0, 0x0AAF6, "Mtei" },
{ 0x0AB01, 0x0AB06, "Ethi" },
{ 0x0AB09, 0x0AB0E, "Ethi" },
{ 0x0AB11, 0x0AB16, "Ethi" },
{ 0x0AB20, 0x0AB26, "Ethi" },
{ 0x0AB28, 0x0AB2E, "Ethi" },
{ 0x0AB30, 0x0AB5A, "Latn" },
{ 0x0AB5C, 0x0AB64, "Latn" },
{ 0x0AB66, 0x0AB69, "Latn" },
{ 0x0AB6A, 0x0AB6B, "Zyyy" },
{ 0x0AB70, 0x0ABBF, "Cher" },
{ 0x0ABC0, 0x0ABED, "Mtei" },
{ 0x0ABF0, 0x0ABF9, "Mtei" },
{ 0x0AC00, 0x0D7A3, "Hang" },
{ 0x0D7B0, 0x0D7C6, "Hang" },
{ 0x0D7CB, 0x0D7FB, "Hang" },
{ 0x0F900, 0x0FA6D, "Hani" },
{ 0x0FA70, 0x0FAD9, "Hani" },
{ 0x0FB00, 0x0FB06, "Latn" },
{ 0x0FB13, 0x0FB17, "Armn" },
{ 0x0FB1D, 0x0FB36, "Hebr" },
{ 0x0FB38, 0x0FB3C, "Hebr" },
{ 0x0FB40, 0x0FB41, "Hebr" },
{ 0x0FB43, 0x0FB44, "Hebr" },
{ 0x0FB46, 0x0FB4F, "Hebr" },
{ 0x0FB50, 0x0FBC2, "Arab" },
{ 0x0FBD3, 0x0FD3D, "Arab" },
{ 0x0FD3E, 0x0FD3F, "Zyyy" },
{ 0x0FD40, 0x0FD8F, "Arab" },
{ 0x0FD92, 0x0FDC7, "Arab" },
{ 0x0FDF0, 0x0FDFF, "Arab" },
{ 0x0FE00, 0x0FE0F, "Zinh" },
{ 0x0FE10, 0x0FE19, "Zyyy" },
{ 0x0FE20, 0x0FE2D, "Zinh" },
{ 0x0FE2E, 0x0FE2F, "Cyrl" },
{ 0x0FE30, 0x0FE52, "Zyyy" },
{ 0x0FE54, 0x0FE66, "Zyyy" },
{ 0x0FE68, 0x0FE6B, "Zyyy" },
{ 0x0FE70, 0x0FE74, "Arab" },
{ 0x0FE76, 0x0FEFC, "Arab" },
{ 0x0FF01, 0x0FF20, "Zyyy" },
{ 0x0FF21, 0x0FF3A, "Latn" },
{ 0x0FF3B, 0x0FF40, "Zyyy" },
{ 0x0FF41, 0x0FF5A, "Latn" },
{ 0x0FF5B, 0x0FF65, "Zyyy" },
{ 0x0FF66, 0x0FF6F, "Kana" },
{ 0x0FF71, 0x0FF9D, "Kana" },
{ 0x0FF9E, 0x0FF9F, "Zyyy" },
{ 0x0FFA0, 0x0FFBE, "Hang" },
{ 0x0FFC2, 0x0FFC7, "Hang" },
{ 0x0FFCA, 0x0FFCF, "Hang" },
{ 0x0FFD2, 0x0FFD7, "Hang" },
{ 0x0FFDA, 0x0FFDC, "Hang" },
{ 0x0FFE0, 0x0FFE6, "Zyyy" },
{ 0x0FFE8, 0x0FFEE, "Zyyy" },
{ 0x0FFF9, 0x0FFFD, "Zyyy" },
{ 0x10000, 0x1000B, "Linb" },
{ 0x1000D, 0x10026, "Linb" },
{ 0x10028, 0x1003A, "Linb" },
{ 0x1003C, 0x1003D, "Linb" },
{ 0x1003F, 0x1004D, "Linb" },
{ 0x10050, 0x1005D, "Linb" },
{ 0x10080, 0x100FA, "Linb" },
{ 0x10100, 0x10102, "Zyyy" },
{ 0x10107, 0x10133, "Zyyy" },
{ 0x10137, 0x1013F, "Zyyy" },
{ 0x10140, 0x1018E, "Grek" },
{ 0x10190, 0x1019C, "Zyyy" },
{ 0x101D0, 0x101FC, "Zyyy" },
{ 0x10280, 0x1029C, "Lyci" },
{ 0x102A0, 0x102D0, "Cari" },
{ 0x102E1, 0x102FB, "Zyyy" },
{ 0x10300, 0x10323, "Ital" },
{ 0x1032D, 0x1032F, "Ital" },
{ 0x10330, 0x1034A, "Goth" },
{ 0x10350, 0x1037A, "Perm" },
{ 0x10380, 0x1039D, "Ugar" },
{ 0x103A0, 0x103C3, "Xpeo" },
{ 0x103C8, 0x103D5, "Xpeo" },
{ 0x10400, 0x1044F, "Dsrt" },
{ 0x10450, 0x1047F, "Shaw" },
{ 0x10480, 0x1049D, "Osma" },
{ 0x104A0, 0x104A9, "Osma" },
{ 0x104B0, 0x104D3, "Osge" },
{ 0x104D8, 0x104FB, "Osge" },
{ 0x10500, 0x10527, "Elba" },
{ 0x10530, 0x10563, "Aghb" },
{ 0x10570, 0x1057A, "Vith" },
{ 0x1057C, 0x1058A, "Vith" },
{ 0x1058C, 0x10592, "Vith" },
{ 0x10594, 0x10595, "Vith" },
{ 0x10597, 0x105A1, "Vith" },
{ 0x105A3, 0x105B1, "Vith" },
{ 0x105B3, 0x105B9, "Vith" },
{ 0x105BB, 0x105BC, "Vith" },
{ 0x10600, 0x10736, "Lina" },
{ 0x10740, 0x10755, "Lina" },
{ 0x10760, 0x10767, "Lina" },
{ 0x10780, 0x10785, "Latn" },
{ 0x10787, 0x107B0, "Latn" },
{ 0x107B2, 0x107BA, "Latn" },
{ 0x10800, 0x10805, "Cprt" },
{ 0x1080A, 0x10835, "Cprt" },
{ 0x10837, 0x10838, "Cprt" },
{ 0x10840, 0x10855, "Armi" },
{ 0x10857, 0x1085F, "Armi" },
{ 0x10860, 0x1087F, "Palm" },
{ 0x10880, 0x1089E, "Nbat" },
{ 0x108A7, 0x108AF, "Nbat" },
{ 0x108E0, 0x108F2, "Hatr" },
{ 0x108F4, 0x108F5, "Hatr" },
{ 0x108FB, 0x108FF, "Hatr" },
{ 0x10900, 0x1091B, "Phnx" },
{ 0x10920, 0x10939, "Lydi" },
{ 0x10980, 0x1099F, "Mero" },
{ 0x109A0, 0x109B7, "Merc" },
{ 0x109BC, 0x109CF, "Merc" },
{ 0x109D2, 0x109FF, "Merc" },
{ 0x10A00, 0x10A03, "Khar" },
{ 0x10A05, 0x10A06, "Khar" },
{ 0x10A0C, 0x10A13, "Khar" },
{ 0x10A15, 0x10A17, "Khar" },
{ 0x10A19, 0x10A35, "Khar" },
{ 0x10A38, 0x10A3A, "Khar" },
{ 0x10A3F, 0x10A48, "Khar" },
{ 0x10A50, 0x10A58, "Khar" },
{ 0x10A60, 0x10A7F, "Sarb" },
{ 0x10A80, 0x10A9F, "Narb" },
{ 0x10AC0, 0x10AE6, "Mani" },
{ 0x10AEB, 0x10AF6, "Mani" },
{ 0x10B00, 0x10B35, "Avst" },
{ 0x10B39, 0x10B3F, "Avst" },
{ 0x10B40, 0x10B55, "Prti" },
{ 0x10B58, 0x10B5F, "Prti" },
{ 0x10B60, 0x10B72, "Phli" },
{ 0x10B78, 0x10B7F, "Phli" },
{ 0x10B80, 0x10B91, "Phlp" },
{ 0x10B99, 0x10B9C, "Phlp" },
{ 0x10BA9, 0x10BAF, "Phlp" },
{ 0x10C00, 0x10C48, "Orkh" },
{ 0x10C80, 0x10CB2, "Hung" },
{ 0x10CC0, 0x10CF2, "Hung" },
{ 0x10CFA, 0x10CFF, "Hung" },
{ 0x10D00, 0x10D27, "Rohg" },
{ 0x10D30, 0x10D39, "Rohg" },
{ 0x10E60, 0x10E7E, "Arab" },
{ 0x10E80, 0x10EA9, "Yezi" },
{ 0x10EAB, 0x10EAD, "Yezi" },
{ 0x10EB0, 0x10EB1, "Yezi" },
{ 0x10EFD, 0x10EFF, "Arab" },
{ 0x10F00, 0x10F27, "Sogo" },
{ 0x10F30, 0x10F59, "Sogd" },
{ 0x10F70, 0x10F89, "Ougr" },
{ 0x10FB0, 0x10FCB, "Chrs" },
{ 0x10FE0, 0x10FF6, "Elym" },
{ 0x11000, 0x1104D, "Brah" },
{ 0x11052, 0x11075, "Brah" },
{ 0x11080, 0x110C2, "Kthi" },
{ 0x110D0, 0x110E8, "Sora" },
{ 0x110F0, 0x110F9, "Sora" },
{ 0x11100, 0x11134, "Cakm" },
{ 0x11136, 0x11147, "Cakm" },
{ 0x11150, 0x11176, "Mahj" },
{ 0x11180, 0x111DF, "Shrd" },
{ 0x111E1, 0x111F4, "Sinh" },
{ 0x11200, 0x11211, "Khoj" },
{ 0x11213, 0x11241, "Khoj" },
{ 0x11280, 0x11286, "Mult" },
{ 0x1128A, 0x1128D, "Mult" },
{ 0x1128F, 0x1129D, "Mult" },
{ 0x1129F, 0x112A9, "Mult" },
{ 0x112B0, 0x112EA, "Sind" },
{ 0x112F0, 0x112F9, "Sind" },
{ 0x11300, 0x11303, "Gran" },
{ 0x11305, 0x1130C, "Gran" },
{ 0x1130F, 0x11310, "Gran" },
{ 0x11313, 0x11328, "Gran" },
{ 0x1132A, 0x11330, "Gran" },
{ 0x11332, 0x11333, "Gran" },
{ 0x11335, 0x11339, "Gran" },
{ 0x1133C, 0x11344, "Gran" },
{ 0x11347, 0x11348, "Gran" },
{ 0x1134B, 0x1134D, "Gran" },
{ 0x1135D, 0x11363, "Gran" },
{ 0x11366, 0x1136C, "Gran" },
{ 0x11370, 0x11374, "Gran" },
{ 0x11400, 0x1145B, "Newa" },
{ 0x1145D, 0x11461, "Newa" },
{ 0x11480, 0x114C7, "Tirh" },
{ 0x114D0, 0x114D9, "Tirh" },
{ 0x11580, 0x115B5, "Sidd" },
{ 0x115B8, 0x115DD, "Sidd" },
{ 0x11600, 0x11644, "Modi" },
{ 0x11650, 0x11659, "Modi" },
{ 0x11660, 0x1166C, "Mong" },
{ 0x11680, 0x116B9, "Takr" },
{ 0x116C0, 0x116C9, "Takr" },
{ 0x11700, 0x1171A, "Ahom" },
{ 0x1171D, 0x1172B, "Ahom" },
{ 0x11730, 0x11746, "Ahom" },
{ 0x11800, 0x1183B, "Dogr" },
{ 0x118A0, 0x118F2, "Wara" },
{ 0x11900, 0x11906, "Diak" },
{ 0x1190C, 0x11913, "Diak" },
{ 0x11915, 0x11916, "Diak" },
{ 0x11918, 0x11935, "Diak" },
{ 0x11937, 0x11938, "Diak" },
{ 0x1193B, 0x11946, "Diak" },
{ 0x11950, 0x11959, "Diak" },
{ 0x119A0, 0x119A7, "Nand" },
{ 0x119AA, 0x119D7, "Nand" },
{ 0x119DA, 0x119E4, "Nand" },
{ 0x11A00, 0x11A47, "Zanb" },
{ 0x11A50, 0x11AA2, "Soyo" },
{ 0x11AB0, 0x11ABF, "Cans" },
{ 0x11AC0, 0x11AF8, "Pauc" },
{ 0x11B00, 0x11B09, "Deva" },
{ 0x11C00, 0x11C08, "Bhks" },
{ 0x11C0A, 0x11C36, "Bhks" },
{ 0x11C38, 0x11C45, "Bhks" },
{ 0x11C50, 0x11C6C, "Bhks" },
{ 0x11C70, 0x11C8F, "Marc" },
{ 0x11C92, 0x11CA7, "Marc" },
{ 0x11CA9, 0x11CB6, "Marc" },
{ 0x11D00, 0x11D06, "Gonm" },
{ 0x11D08, 0x11D09, "Gonm" },
{ 0x11D0B, 0x11D36, "Gonm" },
{ 0x11D3C, 0x11D3D, "Gonm" },
{ 0x11D3F, 0x11D47, "Gonm" },
{ 0x11D50, 0x11D59, "Gonm" },
{ 0x11D60, 0x11D65, "Gong" },
{ 0x11D67, 0x11D68, "Gong" },
{ 0x11D6A, 0x11D8E, "Gong" },
{ 0x11D90, 0x11D91, "Gong" },
{ 0x11D93, 0x11D98, "Gong" },
{ 0x11DA0, 0x11DA9, "Gong" },
{ 0x11EE0, 0x11EF8, "Maka" },
{ 0x11F00, 0x11F10, "Kawi" },
{ 0x11F12, 0x11F3A, "Kawi" },
{ 0x11F3E, 0x11F59, "Kawi" },
{ 0x11FC0, 0x11FF1, "Taml" },
{ 0x12000, 0x12399, "Xsux" },
{ 0x12400, 0x1246E, "Xsux" },
{ 0x12470, 0x12474, "Xsux" },
{ 0x12480, 0x12543, "Xsux" },
{ 0x12F90, 0x12FF2, "Cpmn" },
{ 0x13000, 0x13455, "Egyp" },
{ 0x14400, 0x14646, "Hluw" },
{ 0x16800, 0x16A38, "Bamu" },
{ 0x16A40, 0x16A5E, "Mroo" },
{ 0x16A60, 0x16A69, "Mroo" },
{ 0x16A6E, 0x16A6F, "Mroo" },
{ 0x16A70, 0x16ABE, "Tnsa" },
{ 0x16AC0, 0x16AC9, "Tnsa" },
{ 0x16AD0, 0x16AED, "Bass" },
{ 0x16AF0, 0x16AF5, "Bass" },
{ 0x16B00, 0x16B45, "Hmng" },
{ 0x16B50, 0x16B59, "Hmng" },
{ 0x16B5B, 0x16B61, "Hmng" },
{ 0x16B63, 0x16B77, "Hmng" },
{ 0x16B7D, 0x16B8F, "Hmng" },
{ 0x16E40, 0x16E9A, "Medf" },
{ 0x16F00, 0x16F4A, "Plrd" },
{ 0x16F4F, 0x16F87, "Plrd" },
{ 0x16F8F, 0x16F9F, "Plrd" },
{ 0x16FE2, 0x16FE3, "Hani" },
{ 0x16FF0, 0x16FF1, "Hani" },
{ 0x17000, 0x187F7, "Tang" },
{ 0x18800, 0x18AFF, "Tang" },
{ 0x18B00, 0x18CD5, "Kits" },
{ 0x18D00, 0x18D08, "Tang" },
{ 0x1AFF0, 0x1AFF3, "Kana" },
{ 0x1AFF5, 0x1AFFB, "Kana" },
{ 0x1AFFD, 0x1AFFE, "Kana" },
{ 0x1B001, 0x1B11F, "Hira" },
{ 0x1B120, 0x1B122, "Kana" },
{ 0x1B150, 0x1B152, "Hira" },
{ 0x1B164, 0x1B167, "Kana" },
{ 0x1B170, 0x1B2FB, "Nshu" },
{ 0x1BC00, 0x1BC6A, "Dupl" },
{ 0x1BC70, 0x1BC7C, "Dupl" },
{ 0x1BC80, 0x1BC88, "Dupl" },
{ 0x1BC90, 0x1BC99, "Dupl" },
{ 0x1BC9C, 0x1BC9F, "Dupl" },
{ 0x1BCA0, 0x1BCA3, "Zyyy" },
{ 0x1CF00, 0x1CF2D, "Zinh" },
{ 0x1CF30, 0x1CF46, "Zinh" },
{ 0x1CF50, 0x1CFC3, "Zyyy" },
{ 0x1D000, 0x1D0F5, "Zyyy" },
{ 0x1D100, 0x1D126, "Zyyy" },
{ 0x1D129, 0x1D166, "Zyyy" },
{ 0x1D167, 0x1D169, "Zinh" },
{ 0x1D16A, 0x1D17A, "Zyyy" },
{ 0x1D17B, 0x1D182, "Zinh" },
{ 0x1D183, 0x1D184, "Zyyy" },
{ 0x1D185, 0x1D18B, "Zinh" },
{ 0x1D18C, 0x1D1A9, "Zyyy" },
{ 0x1D1AA, 0x1D1AD, "Zinh" },
{ 0x1D1AE, 0x1D1EA, "Zyyy" },
{ 0x1D200, 0x1D245, "Grek" },
{ 0x1D2C0, 0x1D2D3, "Zyyy" },
{ 0x1D2E0, 0x1D2F3, "Zyyy" },
{ 0x1D300, 0x1D356, "Zyyy" },
{ 0x1D360, 0x1D378, "Zyyy" },
{ 0x1D400, 0x1D454, "Zyyy" },
{ 0x1D456, 0x1D49C, "Zyyy" },
{ 0x1D49E, 0x1D49F, "Zyyy" },
{ 0x1D4A5, 0x1D4A6, "Zyyy" },
{ 0x1D4A9, 0x1D4AC, "Zyyy" },
{ 0x1D4AE, 0x1D4B9, "Zyyy" },
{ 0x1D4BD, 0x1D4C3, "Zyyy" },
{ 0x1D4C5, 0x1D505, "Zyyy" },
{ 0x1D507, 0x1D50A, "Zyyy" },
{ 0x1D50D, 0x1D514, "Zyyy" },
{ 0x1D516, 0x1D51C, "Zyyy" },
{ 0x1D51E, 0x1D539, "Zyyy" },
{ 0x1D53B, 0x1D53E, "Zyyy" },
{ 0x1D540, 0x1D544, "Zyyy" },
{ 0x1D54A, 0x1D550, "Zyyy" },
{ 0x1D552, 0x1D6A5, "Zyyy" },
{ 0x1D6A8, 0x1D7CB, "Zyyy" },
{ 0x1D7CE, 0x1D7FF, "Zyyy" },
{ 0x1D800, 0x1DA8B, "Sgnw" },
{ 0x1DA9B, 0x1DA9F, "Sgnw" },
{ 0x1DAA1, 0x1DAAF, "Sgnw" },
{ 0x1DF00, 0x1DF1E, "Latn" },
{ 0x1DF25, 0x1DF2A, "Latn" },
{ 0x1E000, 0x1E006, "Glag" },
{ 0x1E008, 0x1E018, "Glag" },
{ 0x1E01B, 0x1E021, "Glag" },
{ 0x1E023, 0x1E024, "Glag" },
{ 0x1E026, 0x1E02A, "Glag" },
{ 0x1E030, 0x1E06D, "Cyrl" },
{ 0x1E100, 0x1E12C, "Hmnp" },
{ 0x1E130, 0x1E13D, "Hmnp" },
{ 0x1E140, 0x1E149, "Hmnp" },
{ 0x1E14E, 0x1E14F, "Hmnp" },
{ 0x1E290, 0x1E2AE, "Toto" },
{ 0x1E2C0, 0x1E2F9, "Wcho" },
{ 0x1E4D0, 0x1E4F9, "Nagm" },
{ 0x1E7E0, 0x1E7E6, "Ethi" },
{ 0x1E7E8, 0x1E7EB, "Ethi" },
{ 0x1E7ED, 0x1E7EE, "Ethi" },
{ 0x1E7F0, 0x1E7FE, "Ethi" },
{ 0x1E800, 0x1E8C4, "Mend" },
{ 0x1E8C7, 0x1E8D6, "Mend" },
{ 0x1E900, 0x1E94B, "Adlm" },
{ 0x1E950, 0x1E959, "Adlm" },
{ 0x1E95E, 0x1E95F, "Adlm" },
{ 0x1EC71, 0x1ECB4, "Zyyy" },
{ 0x1ED01, 0x1ED3D, "Zyyy" },
{ 0x1EE00, 0x1EE03, "Arab" },
{ 0x1EE05, 0x1EE1F, "Arab" },
{ 0x1EE21, 0x1EE22, "Arab" },
{ 0x1EE29, 0x1EE32, "Arab" },
{ 0x1EE34, 0x1EE37, "Arab" },
{ 0x1EE4D, 0x1EE4F, "Arab" },
{ 0x1EE51, 0x1EE52, "Arab" },
{ 0x1EE61, 0x1EE62, "Arab" },
{ 0x1EE67, 0x1EE6A, "Arab" },
{ 0x1EE6C, 0x1EE72, "Arab" },
{ 0x1EE74, 0x1EE77, "Arab" },
{ 0x1EE79, 0x1EE7C, "Arab" },
{ 0x1EE80, 0x1EE89, "Arab" },
{ 0x1EE8B, 0x1EE9B, "Arab" },
{ 0x1EEA1, 0x1EEA3, "Arab" },
{ 0x1EEA5, 0x1EEA9, "Arab" },
{ 0x1EEAB, 0x1EEBB, "Arab" },
{ 0x1EEF0, 0x1EEF1, "Arab" },
{ 0x1F000, 0x1F02B, "Zyyy" },
{ 0x1F030, 0x1F093, "Zyyy" },
{ 0x1F0A0, 0x1F0AE, "Zyyy" },
{ 0x1F0B1, 0x1F0BF, "Zyyy" },
{ 0x1F0C1, 0x1F0CF, "Zyyy" },
{ 0x1F0D1, 0x1F0F5, "Zyyy" },
{ 0x1F100, 0x1F1AD, "Zyyy" },
{ 0x1F1E6, 0x1F1FF, "Zyyy" },
{ 0x1F201, 0x1F202, "Zyyy" },
{ 0x1F210, 0x1F23B, "Zyyy" },
{ 0x1F240, 0x1F248, "Zyyy" },
{ 0x1F250, 0x1F251, "Zyyy" },
{ 0x1F260, 0x1F265, "Zyyy" },
{ 0x1F300, 0x1F6D7, "Zyyy" },
{ 0x1F6DC, 0x1F6EC, "Zyyy" },
{ 0x1F6F0, 0x1F6FC, "Zyyy" },
{ 0x1F700, 0x1F776, "Zyyy" },
{ 0x1F77B, 0x1F7D9, "Zyyy" },
{ 0x1F7E0, 0x1F7EB, "Zyyy" },
{ 0x1F800, 0x1F80B, "Zyyy" },
{ 0x1F810, 0x1F847, "Zyyy" },
{ 0x1F850, 0x1F859, "Zyyy" },
{ 0x1F860, 0x1F887, "Zyyy" },
{ 0x1F890, 0x1F8AD, "Zyyy" },
{ 0x1F8B0, 0x1F8B1, "Zyyy" },
{ 0x1F900, 0x1FA53, "Zyyy" },
{ 0x1FA60, 0x1FA6D, "Zyyy" },
{ 0x1FA70, 0x1FA7C, "Zyyy" },
{ 0x1FA80, 0x1FA88, "Zyyy" },
{ 0x1FA90, 0x1FABD, "Zyyy" },
{ 0x1FABF, 0x1FAC5, "Zyyy" },
{ 0x1FACE, 0x1FADB, "Zyyy" },
{ 0x1FAE0, 0x1FAE8, "Zyyy" },
{ 0x1FAF0, 0x1FAF8, "Zyyy" },
{ 0x1FB00, 0x1FB92, "Zyyy" },
{ 0x1FB94, 0x1FBCA, "Zyyy" },
{ 0x1FBF0, 0x1FBF9, "Zyyy" },
{ 0x20000, 0x2A6DF, "Hani" },
{ 0x2A700, 0x2B739, "Hani" },
{ 0x2B740, 0x2B81D, "Hani" },
{ 0x2B820, 0x2CEA1, "Hani" },
{ 0x2CEB0, 0x2EBE0, "Hani" },
{ 0x2EBF0, 0x2EE5D, "Hani" },
{ 0x2F800, 0x2FA1D, "Hani" },
{ 0x30000, 0x3134A, "Hani" },
{ 0x31350, 0x323AF, "Hani" },
{ 0xE0020, 0xE007F, "Zyyy" },
{ 0xE0100, 0xE01EF, "Zinh" },
},
-- Scripts.txt gives full names; here we consider them aliases to save space.
aliases = {
Adlm = "Adlam",
Aghb = "Caucasian Albanian",
Ahom = "Ahom",
Arab = "Arabic",
Armi = "Imperial Aramaic",
Armn = "Armenian",
Avst = "Avestan",
Bali = "Balinese",
Bamu = "Bamum",
Bass = "Bassa Vah",
Batk = "Batak",
Beng = "Bengali",
Bhks = "Bhaiksuki",
Bopo = "Bopomofo",
Brah = "Brahmi",
Brai = "Braille",
Bugi = "Buginese",
Buhd = "Buhid",
Cakm = "Chakma",
Cans = "Canadian Aboriginal",
Cari = "Carian",
Cham = "Cham",
Cher = "Cherokee",
Chrs = "Chorasmian",
Copt = "Coptic",
Cpmn = "Cypro Minoan",
Cprt = "Cypriot",
Cyrl = "Cyrillic",
Deva = "Devanagari",
Diak = "Dives Akuru",
Dogr = "Dogra",
Dsrt = "Deseret",
Dupl = "Duployan",
Egyp = "Egyptian Hieroglyphs",
Elba = "Elbasan",
Elym = "Elymaic",
Ethi = "Ethiopic",
Geor = "Georgian",
Glag = "Glagolitic",
Gong = "Gunjala Gondi",
Gonm = "Masaram Gondi",
Goth = "Gothic",
Gran = "Grantha",
Grek = "Greek",
Gujr = "Gujarati",
Guru = "Gurmukhi",
Hang = "Hangul",
Hani = "Han",
Hano = "Hanunoo",
Hatr = "Hatran",
Hebr = "Hebrew",
Hira = "Hiragana",
Hluw = "Anatolian Hieroglyphs",
Hmng = "Pahawh Hmong",
Hmnp = "Nyiakeng Puachue Hmong",
Hrkt = "Katakana Or Hiragana",
Hung = "Old Hungarian",
Ital = "Old Italic",
Java = "Javanese",
Kali = "Kayah Li",
Kana = "Katakana",
Kawi = "Kawi",
Khar = "Kharoshthi",
Khmr = "Khmer",
Khoj = "Khojki",
Kits = "Khitan Small Script",
Knda = "Kannada",
Kthi = "Kaithi",
Lana = "Tai Tham",
Laoo = "Lao",
Latn = "Latin",
Lepc = "Lepcha",
Limb = "Limbu",
Lina = "Linear A",
Linb = "Linear B",
Lisu = "Lisu",
Lyci = "Lycian",
Lydi = "Lydian",
Mahj = "Mahajani",
Maka = "Makasar",
Mand = "Mandaic",
Mani = "Manichaean",
Marc = "Marchen",
Medf = "Medefaidrin",
Mend = "Mende Kikakui",
Merc = "Meroitic Cursive",
Mero = "Meroitic Hieroglyphs",
Mlym = "Malayalam",
Modi = "Modi",
Mong = "Mongolian",
Mroo = "Mro",
Mtei = "Meetei Mayek",
Mult = "Multani",
Mymr = "Myanmar",
Nagm = "Nag Mundari",
Nand = "Nandinagari",
Narb = "Old North Arabian",
Nbat = "Nabataean",
Newa = "Newa",
Nkoo = "NKo",
Nshu = "Nushu",
Ogam = "Ogham",
Olck = "Ol Chiki",
Orkh = "Old Turkic",
Orya = "Oriya",
Osge = "Osage",
Osma = "Osmanya",
Ougr = "Old Uyghur",
Palm = "Palmyrene",
Pauc = "Pau Cin Hau",
Perm = "Old Permic",
Phag = "Phags Pa",
Phli = "Inscriptional Pahlavi",
Phlp = "Psalter Pahlavi",
Phnx = "Phoenician",
Plrd = "Miao",
Prti = "Inscriptional Parthian",
Rjng = "Rejang",
Rohg = "Hanifi Rohingya",
Runr = "Runic",
Samr = "Samaritan",
Sarb = "Old South Arabian",
Saur = "Saurashtra",
Sgnw = "SignWriting",
Shaw = "Shavian",
Shrd = "Sharada",
Sidd = "Siddham",
Sind = "Khudawadi",
Sinh = "Sinhala",
Sogd = "Sogdian",
Sogo = "Old Sogdian",
Sora = "Sora Sompeng",
Soyo = "Soyombo",
Sund = "Sundanese",
Sylo = "Syloti Nagri",
Syrc = "Syriac",
Tagb = "Tagbanwa",
Takr = "Takri",
Tale = "Tai Le",
Talu = "New Tai Lue",
Taml = "Tamil",
Tang = "Tangut",
Tavt = "Tai Viet",
Telu = "Telugu",
Tfng = "Tifinagh",
Tglg = "Tagalog",
Thaa = "Thaana",
Thai = "Thai",
Tibt = "Tibetan",
Tirh = "Tirhuta",
Tnsa = "Tangsa",
Toto = "Toto",
Ugar = "Ugaritic",
Vaii = "Vai",
Vith = "Vithkuqi",
Wara = "Warang Citi",
Wcho = "Wancho",
Xpeo = "Old Persian",
Xsux = "Cuneiform",
Yezi = "Yezidi",
Yiii = "Yi",
Zanb = "Zanabazar Square",
Zinh = "Inherited",
Zyyy = "Common",
Zzzz = "Unknown",
},
}
-- Required for binary search function in [[Module:Language/scripts]].
-- Cannot get length of module loaded with mw.loadData.
data.ranges.length = #data.ranges
data.rtl = {}
for _, script in ipairs(mw.loadData "Module:Lang/data".rtl_scripts) do
-- [[Module:Lang/data]] has script codes in lowercase;
-- this module has script codes with the first letter capitalized.
data.rtl[script:gsub("^%a", string.upper)] = true
end
return data
6afbaa9e21efd3898f0ff056b5456c0cd5813400
Template:!)
10
212
431
430
2023-09-14T01:15:08Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
|}<noinclude>
{{Documentation}}
</noinclude>
4708392952b330b1c5bf605bc6fc76222b1609d2
Template:(!
10
213
433
432
2023-09-14T01:15:08Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
<includeonly>{|</includeonly><noinclude><nowiki>{|</nowiki>{{Documentation}}
</noinclude>
f709d1f206330f000c28ae20e722426c750f9bd5
Template:Coord
10
214
435
434
2023-09-14T01:15:08Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
<includeonly>{{#invoke:Coordinates|coord}}</includeonly><noinclude>
{{Documentation}}
<!-- Add categories to the /doc subpage, interwikis to Wikidata, not here -->
</noinclude>
05c1e2a95ff86fa91442c704f36a9f125b603492
Template:Flagicon
10
215
437
436
2023-09-14T01:15:09Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
<includeonly>{{safesubst<noinclude />:#ifeq: {{Yesno-no|{{{noredlink|}}}}}|yes<noinclude><!--
--></noinclude>|<noinclude><!--
#Check for existence of Template: Country data foo before invoking it
--></noinclude>{{safesubst<noinclude />:#ifexist: Template: Country data {{{1|}}}<noinclude><!--
--></noinclude>|<noinclude><!--
# It exists, so proceed
--></noinclude>{{country data {{{1|}}}|flagicon/core|variant={{{variant|{{{2|}}}}}}|size={{{size|}}}}}<noinclude><!--
--></noinclude>|<noinclude><!--
# It doesn't exist, so do nothing
--></noinclude>}}<noinclude><!--
--></noinclude>|<noinclude><!--
# DEFAULT call Template: Country data {{{1|}}}
# with no prior checks
--></noinclude>{{country data {{{1|}}}|flagicon/core|variant={{{variant|{{{2|}}}}}}|size={{{size|}}}}}<noinclude><!--
# Track use where "Template:Country data Foo" does not exist
--></noinclude>{{safesubst<noinclude />:#ifexist: Template:Country data {{{1|}}}||{{safesubst<noinclude />:namespace detect showall
| 1 =
| 2 = [[Category:Flagicons with missing country data templates]]
| user = 1
| talk = 1
| other = 2
}}}}<noinclude><!--
--></noinclude>}}</includeonly>{{safesubst<noinclude />:#invoke:Check for unknown parameters|check|unknown={{main other|[[Category:Pages using flagicon template with unknown parameters|_VALUE_{{PAGENAME}}]]}}|preview=Page using [[Template:Flagicon]] with unknown parameter "_VALUE_"|ignoreblank=y| 1 | 2 | noredlink | size | variant }}<noinclude>
{{Documentation}}
</noinclude>
4ba00e607bb28194908c631e424736dd64374684
Template:Flagicon/core
10
216
439
438
2023-09-14T01:15:09Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
<span class="flagicon">[[File:{{{flag alias-{{{variant}}}|{{safesubst<noinclude />:#if:{{{flag alias|}}}|{{{flag alias}}}|Flag placeholder.svg}}}}}|{{safesubst<noinclude />:#if:{{{size|}}}|{{{size}}}|{{{size flag alias-{{{variant}}}|{{safesubst<noinclude />:#if:{{{variant|}}}|23x15px|{{{size flag alias|23x15px}}}}}}}}}}|{{{border-{{{variant}}}|{{{border|border}}}}}} |alt={{{alias}}}|link={{{alias}}}]]</span><noinclude>{{documentation}}</noinclude>
14677aa18a0f6a866112637a51ba28adf4dd4bbe
Template:Resize
10
217
441
440
2023-09-14T01:15:10Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{safesubst<noinclude />:#if:{{{2|}}}
|<{{#ifeq:{{{div|}}}|yes|div|span}} style="font-size:{{{1|}}};">{{{2|}}}</{{#ifeq:{{{div|}}}|yes|div|span}}>
|<{{#ifeq:{{{div|}}}|yes|div|span}} style="font-size:90%;">{{{1}}}</{{#ifeq:{{{div|}}}|yes|div|span}}>
}}<noinclude>
{{Documentation}}
<!-- Add categories to the /doc subpage and interwikis in Wikidata, not here! -->
</noinclude>
3df5b1480eb04f48aa1e701ca895121b4cbb4ed3
Template:URL
10
218
443
442
2023-09-14T01:15:10Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
<includeonly>{{#invoke:URL|url}}</includeonly>{{#invoke:Check for unknown parameters|check|unknown={{main other|[[Category:Pages using URL template with unknown parameters|_VALUE_{{PAGENAME}}]]}}|preview=Page using [[Template:URL]] with unknown parameter "_VALUE_"|ignoreblank=y | 1 | 2 }}<noinclude>{{documentation}}</noinclude>
5671474ce4656f07c5bdc47292d1dcbe9c70317e
Module:Coordinates
828
219
445
444
2023-09-14T01:15:10Z
Ilovethehitgameomori
2
1 revision imported
Scribunto
text/plain
--[[
This module is intended to replace the functionality of {{Coord}} and related
templates. It provides several methods, including
{{#invoke:Coordinates | coord }} : General function formatting and displaying
coordinate values.
{{#invoke:Coordinates | dec2dms }} : Simple function for converting decimal
degree values to DMS format.
{{#invoke:Coordinates | dms2dec }} : Simple function for converting DMS format
to decimal degree format.
{{#invoke:Coordinates | link }} : Export the link used to reach the tools
]]
require('strict')
local math_mod = require("Module:Math")
local coordinates = {};
local isSandbox = mw.getCurrentFrame():getTitle():find('sandbox', 1, true);
local current_page = mw.title.getCurrentTitle()
local page_name = mw.uri.encode( current_page.prefixedText, 'WIKI' );
local coord_link = 'https://geohack.toolforge.org/geohack.php?pagename=' .. page_name .. '¶ms='
--[[ Helper function, replacement for {{coord/display/title}} ]]
local function displaytitle(coords)
return mw.getCurrentFrame():extensionTag{
name = 'indicator',
args = { name = 'coordinates' },
content = '<span id="coordinates">[[Geographic coordinate system|Coordinates]]: ' .. coords .. '</span>'
}
end
--[[ Helper function, used in detecting DMS formatting ]]
local function dmsTest(first, second)
if type(first) ~= 'string' or type(second) ~= 'string' then
return nil
end
local s = (first .. second):upper()
return s:find('^[NS][EW]$') or s:find('^[EW][NS]$')
end
--[[ Wrapper function to grab args, see Module:Arguments for this function's documentation. ]]
local function makeInvokeFunc(funcName)
return function (frame)
local args = require('Module:Arguments').getArgs(frame, {
wrappers = 'Template:Coord'
})
return coordinates[funcName](args, frame)
end
end
--[[ Helper function, handle optional args. ]]
local function optionalArg(arg, supplement)
return arg and arg .. supplement or ''
end
--[[
Formats any error messages generated for display
]]
local function errorPrinter(errors)
local result = ""
for i,v in ipairs(errors) do
result = result .. '<strong class="error">Coordinates: ' .. v[2] .. '</strong><br />'
end
return result
end
--[[
Determine the required CSS class to display coordinates
Usually geo-nondefault is hidden by CSS, unless a user has overridden this for himself
default is the mode as specificied by the user when calling the {{coord}} template
mode is the display mode (dec or dms) that we will need to determine the css class for
]]
local function displayDefault(default, mode)
if default == "" then
default = "dec"
end
if default == mode then
return "geo-default"
else
return "geo-nondefault"
end
end
--[[
specPrinter
Output formatter. Takes the structure generated by either parseDec
or parseDMS and formats it for inclusion on Wikipedia.
]]
local function specPrinter(args, coordinateSpec)
local uriComponents = coordinateSpec["param"]
if uriComponents == "" then
-- RETURN error, should never be empty or nil
return "ERROR param was empty"
end
if args["name"] then
uriComponents = uriComponents .. "&title=" .. mw.uri.encode(coordinateSpec["name"])
end
local geodmshtml = '<span class="geo-dms" title="Maps, aerial photos, and other data for this location">'
.. '<span class="latitude">' .. coordinateSpec["dms-lat"] .. '</span> '
.. '<span class="longitude">' ..coordinateSpec["dms-long"] .. '</span>'
.. '</span>'
local lat = tonumber( coordinateSpec["dec-lat"] ) or 0
local geodeclat
if lat < 0 then
-- FIXME this breaks the pre-existing precision
geodeclat = tostring(coordinateSpec["dec-lat"]):sub(2) .. "°S"
else
geodeclat = (coordinateSpec["dec-lat"] or 0) .. "°N"
end
local long = tonumber( coordinateSpec["dec-long"] ) or 0
local geodeclong
if long < 0 then
-- FIXME does not handle unicode minus
geodeclong = tostring(coordinateSpec["dec-long"]):sub(2) .. "°W"
else
geodeclong = (coordinateSpec["dec-long"] or 0) .. "°E"
end
local geodechtml = '<span class="geo-dec" title="Maps, aerial photos, and other data for this location">'
.. geodeclat .. ' '
.. geodeclong
.. '</span>'
local geonumhtml = '<span class="geo">'
.. coordinateSpec["dec-lat"] .. '; '
.. coordinateSpec["dec-long"]
.. '</span>'
local inner = '<span class="' .. displayDefault(coordinateSpec["default"], "dms" ) .. '">' .. geodmshtml .. '</span>'
.. '<span class="geo-multi-punct"> / </span>'
.. '<span class="' .. displayDefault(coordinateSpec["default"], "dec" ) .. '">';
if not args["name"] then
inner = inner .. geodechtml
.. '<span style="display:none"> / ' .. geonumhtml .. '</span></span>'
else
inner = inner .. '<span class="vcard">' .. geodechtml
.. '<span style="display:none"> / ' .. geonumhtml .. '</span>'
.. '<span style="display:none"> (<span class="fn org">'
.. args["name"] .. '</span>)</span></span></span>'
end
local stylesheetLink = 'Module:Coordinates' .. ( isSandbox and '/sandbox' or '' ) .. '/styles.css'
return mw.getCurrentFrame():extensionTag{
name = 'templatestyles', args = { src = stylesheetLink }
} .. '<span class="plainlinks nourlexpansion">[' .. coord_link .. uriComponents ..
' ' .. inner .. ']</span>'
end
--[[ Helper function, convert decimal to degrees ]]
local function convert_dec2dms_d(coordinate)
local d = math_mod._round( coordinate, 0 ) .. "°"
return d .. ""
end
--[[ Helper function, convert decimal to degrees and minutes ]]
local function convert_dec2dms_dm(coordinate)
coordinate = math_mod._round( coordinate * 60, 0 );
local m = coordinate % 60;
coordinate = math.floor( (coordinate - m) / 60 );
local d = coordinate % 360 .."°"
return d .. string.format( "%02d′", m )
end
--[[ Helper function, convert decimal to degrees, minutes, and seconds ]]
local function convert_dec2dms_dms(coordinate)
coordinate = math_mod._round( coordinate * 60 * 60, 0 );
local s = coordinate % 60
coordinate = math.floor( (coordinate - s) / 60 );
local m = coordinate % 60
coordinate = math.floor( (coordinate - m) / 60 );
local d = coordinate % 360 .."°"
return d .. string.format( "%02d′", m ) .. string.format( "%02d″", s )
end
--[[
Helper function, convert decimal latitude or longitude to
degrees, minutes, and seconds format based on the specified precision.
]]
local function convert_dec2dms(coordinate, firstPostfix, secondPostfix, precision)
local coord = tonumber(coordinate)
local postfix
if coord >= 0 then
postfix = firstPostfix
else
postfix = secondPostfix
end
precision = precision:lower();
if precision == "dms" then
return convert_dec2dms_dms( math.abs( coord ) ) .. postfix;
elseif precision == "dm" then
return convert_dec2dms_dm( math.abs( coord ) ) .. postfix;
elseif precision == "d" then
return convert_dec2dms_d( math.abs( coord ) ) .. postfix;
end
end
--[[
Convert DMS format into a N or E decimal coordinate
]]
local function convert_dms2dec(direction, degrees_str, minutes_str, seconds_str)
local degrees = tonumber(degrees_str)
local minutes = tonumber(minutes_str) or 0
local seconds = tonumber(seconds_str) or 0
local factor = 1
if direction == "S" or direction == "W" then
factor = -1
end
local precision = 0
if seconds_str then
precision = 5 + math.max( math_mod._precision(seconds_str), 0 );
elseif minutes_str and minutes_str ~= '' then
precision = 3 + math.max( math_mod._precision(minutes_str), 0 );
else
precision = math.max( math_mod._precision(degrees_str), 0 );
end
local decimal = factor * (degrees+(minutes+seconds/60)/60)
return string.format( "%." .. precision .. "f", decimal ) -- not tonumber since this whole thing is string based.
end
--[[
Checks input values to for out of range errors.
]]
local function validate( lat_d, lat_m, lat_s, long_d, long_m, long_s, source, strong )
local errors = {};
lat_d = tonumber( lat_d ) or 0;
lat_m = tonumber( lat_m ) or 0;
lat_s = tonumber( lat_s ) or 0;
long_d = tonumber( long_d ) or 0;
long_m = tonumber( long_m ) or 0;
long_s = tonumber( long_s ) or 0;
if strong then
if lat_d < 0 then
table.insert(errors, {source, "latitude degrees < 0 with hemisphere flag"})
end
if long_d < 0 then
table.insert(errors, {source, "longitude degrees < 0 with hemisphere flag"})
end
--[[
#coordinates is inconsistent about whether this is an error. If globe: is
specified, it won't error on this condition, but otherwise it will.
For not simply disable this check.
if long_d > 180 then
table.insert(errors, {source, "longitude degrees > 180 with hemisphere flag"})
end
]]
end
if lat_d > 90 then
table.insert(errors, {source, "latitude degrees > 90"})
end
if lat_d < -90 then
table.insert(errors, {source, "latitude degrees < -90"})
end
if lat_m >= 60 then
table.insert(errors, {source, "latitude minutes >= 60"})
end
if lat_m < 0 then
table.insert(errors, {source, "latitude minutes < 0"})
end
if lat_s >= 60 then
table.insert(errors, {source, "latitude seconds >= 60"})
end
if lat_s < 0 then
table.insert(errors, {source, "latitude seconds < 0"})
end
if long_d >= 360 then
table.insert(errors, {source, "longitude degrees >= 360"})
end
if long_d <= -360 then
table.insert(errors, {source, "longitude degrees <= -360"})
end
if long_m >= 60 then
table.insert(errors, {source, "longitude minutes >= 60"})
end
if long_m < 0 then
table.insert(errors, {source, "longitude minutes < 0"})
end
if long_s >= 60 then
table.insert(errors, {source, "longitude seconds >= 60"})
end
if long_s < 0 then
table.insert(errors, {source, "longitude seconds < 0"})
end
return errors;
end
--[[
parseDec
Transforms decimal format latitude and longitude into the
structure to be used in displaying coordinates
]]
local function parseDec( lat, long, format )
local coordinateSpec = {}
local errors = {}
if not long then
return nil, {{"parseDec", "Missing longitude"}}
elseif not tonumber(long) then
return nil, {{"parseDec", "Longitude could not be parsed as a number: " .. long}}
end
errors = validate( lat, nil, nil, long, nil, nil, 'parseDec', false );
coordinateSpec["dec-lat"] = lat;
coordinateSpec["dec-long"] = long;
local mode = coordinates.determineMode( lat, long );
coordinateSpec["dms-lat"] = convert_dec2dms( lat, "N", "S", mode) -- {{coord/dec2dms|{{{1}}}|N|S|{{coord/prec dec|{{{1}}}|{{{2}}}}}}}
coordinateSpec["dms-long"] = convert_dec2dms( long, "E", "W", mode) -- {{coord/dec2dms|{{{2}}}|E|W|{{coord/prec dec|{{{1}}}|{{{2}}}}}}}
if format then
coordinateSpec.default = format
else
coordinateSpec.default = "dec"
end
return coordinateSpec, errors
end
--[[
parseDMS
Transforms degrees, minutes, seconds format latitude and longitude
into the a structure to be used in displaying coordinates
]]
local function parseDMS( lat_d, lat_m, lat_s, lat_f, long_d, long_m, long_s, long_f, format )
local coordinateSpec, errors, backward = {}, {}
lat_f = lat_f:upper();
long_f = long_f:upper();
-- Check if specified backward
if lat_f == 'E' or lat_f == 'W' then
lat_d, long_d, lat_m, long_m, lat_s, long_s, lat_f, long_f, backward = long_d, lat_d, long_m, lat_m, long_s, lat_s, long_f, lat_f, true;
end
errors = validate( lat_d, lat_m, lat_s, long_d, long_m, long_s, 'parseDMS', true );
if not long_d then
return nil, {{"parseDMS", "Missing longitude" }}
elseif not tonumber(long_d) then
return nil, {{"parseDMS", "Longitude could not be parsed as a number:" .. long_d }}
end
if not lat_m and not lat_s and not long_m and not long_s and #errors == 0 then
if math_mod._precision( lat_d ) > 0 or math_mod._precision( long_d ) > 0 then
if lat_f:upper() == 'S' then
lat_d = '-' .. lat_d;
end
if long_f:upper() == 'W' then
long_d = '-' .. long_d;
end
return parseDec( lat_d, long_d, format );
end
end
coordinateSpec["dms-lat"] = lat_d.."°"..optionalArg(lat_m,"′") .. optionalArg(lat_s,"″") .. lat_f
coordinateSpec["dms-long"] = long_d.."°"..optionalArg(long_m,"′") .. optionalArg(long_s,"″") .. long_f
coordinateSpec["dec-lat"] = convert_dms2dec(lat_f, lat_d, lat_m, lat_s) -- {{coord/dms2dec|{{{4}}}|{{{1}}}|0{{{2}}}|0{{{3}}}}}
coordinateSpec["dec-long"] = convert_dms2dec(long_f, long_d, long_m, long_s) -- {{coord/dms2dec|{{{8}}}|{{{5}}}|0{{{6}}}|0{{{7}}}}}
if format then
coordinateSpec.default = format
else
coordinateSpec.default = "dms"
end
return coordinateSpec, errors, backward
end
--[[
Check the input arguments for coord to determine the kind of data being provided
and then make the necessary processing.
]]
local function formatTest(args)
local result, errors
local backward, primary = false, false
local function getParam(args, lim)
local ret = {}
for i = 1, lim do
ret[i] = args[i] or ''
end
return table.concat(ret, '_')
end
if not args[1] then
-- no lat logic
return errorPrinter( {{"formatTest", "Missing latitude"}} )
elseif not tonumber(args[1]) then
-- bad lat logic
return errorPrinter( {{"formatTest", "Unable to parse latitude as a number:" .. args[1]}} )
elseif not args[4] and not args[5] and not args[6] then
-- dec logic
result, errors = parseDec(args[1], args[2], args.format)
if not result then
return errorPrinter(errors);
end
-- formatting for geohack: geohack expects D_N_D_E notation or D;D notation
-- wikiminiatlas doesn't support D;D notation
-- #coordinates parserfunction doesn't support negative decimals with NSWE
result.param = table.concat({
math.abs(tonumber(args[1])),
((tonumber(args[1]) or 0) < 0) and 'S' or 'N',
math.abs(tonumber(args[2])),
((tonumber(args[2]) or 0) < 0) and 'W' or 'E',
args[3] or ''}, '_')
elseif dmsTest(args[4], args[8]) then
-- dms logic
result, errors, backward = parseDMS(args[1], args[2], args[3], args[4],
args[5], args[6], args[7], args[8], args.format)
if args[10] then
table.insert(errors, {'formatTest', 'Extra unexpected parameters'})
end
if not result then
return errorPrinter(errors)
end
result.param = getParam(args, 9)
elseif dmsTest(args[3], args[6]) then
-- dm logic
result, errors, backward = parseDMS(args[1], args[2], nil, args[3],
args[4], args[5], nil, args[6], args['format'])
if args[8] then
table.insert(errors, {'formatTest', 'Extra unexpected parameters'})
end
if not result then
return errorPrinter(errors)
end
result.param = getParam(args, 7)
elseif dmsTest(args[2], args[4]) then
-- d logic
result, errors, backward = parseDMS(args[1], nil, nil, args[2],
args[3], nil, nil, args[4], args.format)
if args[6] then
table.insert(errors, {'formatTest', 'Extra unexpected parameters'})
end
if not result then
return errorPrinter(errors)
end
result.param = getParam(args, 5)
else
-- Error
return errorPrinter({{"formatTest", "Unknown argument format"}}) .. '[[Category:Pages with malformed coordinate tags]]'
end
result.name = args.name
local extra_param = {'dim', 'globe', 'scale', 'region', 'source', 'type'}
for _, v in ipairs(extra_param) do
if args[v] then
table.insert(errors, {'formatTest', 'Parameter: "' .. v .. '=" should be "' .. v .. ':"' })
end
end
local ret = specPrinter(args, result)
if #errors > 0 then
ret = ret .. ' ' .. errorPrinter(errors) .. '[[Category:Pages with malformed coordinate tags]]'
end
return ret, backward
end
--[[
Generate Wikidata tracking categories.
]]
local function makeWikidataCategories(qid)
local ret
local qid = qid or mw.wikibase.getEntityIdForCurrentPage()
if mw.wikibase and current_page.namespace == 0 then
if qid and mw.wikibase.entityExists(qid) and mw.wikibase.getBestStatements(qid, "P625") and mw.wikibase.getBestStatements(qid, "P625")[1] then
local snaktype = mw.wikibase.getBestStatements(qid, "P625")[1].mainsnak.snaktype
if snaktype == 'value' then
-- coordinates exist both here and on Wikidata, and can be compared.
ret = 'Coordinates on Wikidata'
elseif snaktype == 'somevalue' then
ret = 'Coordinates on Wikidata set to unknown value'
elseif snaktype == 'novalue' then
ret = 'Coordinates on Wikidata set to no value'
end
else
-- We have to either import the coordinates to Wikidata or remove them here.
ret = 'Coordinates not on Wikidata'
end
end
if ret then
return string.format('[[Category:%s]]', ret)
else
return ''
end
end
--[[
link
Simple function to export the coordinates link for other uses.
Usage:
{{#invoke:Coordinates | link }}
]]
function coordinates.link(frame)
return coord_link;
end
--[[
dec2dms
Wrapper to allow templates to call dec2dms directly.
Usage:
{{#invoke:Coordinates | dec2dms | decimal_coordinate | positive_suffix |
negative_suffix | precision }}
decimal_coordinate is converted to DMS format. If positive, the positive_suffix
is appended (typical N or E), if negative, the negative suffix is appended. The
specified precision is one of 'D', 'DM', or 'DMS' to specify the level of detail
to use.
]]
coordinates.dec2dms = makeInvokeFunc('_dec2dms')
function coordinates._dec2dms(args)
local coordinate = args[1]
local firstPostfix = args[2] or ''
local secondPostfix = args[3] or ''
local precision = args[4] or ''
return convert_dec2dms(coordinate, firstPostfix, secondPostfix, precision)
end
--[[
Helper function to determine whether to use D, DM, or DMS
format depending on the precision of the decimal input.
]]
function coordinates.determineMode( value1, value2 )
local precision = math.max( math_mod._precision( value1 ), math_mod._precision( value2 ) );
if precision <= 0 then
return 'd'
elseif precision <= 2 then
return 'dm';
else
return 'dms';
end
end
--[[
dms2dec
Wrapper to allow templates to call dms2dec directly.
Usage:
{{#invoke:Coordinates | dms2dec | direction_flag | degrees |
minutes | seconds }}
Converts DMS values specified as degrees, minutes, seconds too decimal format.
direction_flag is one of N, S, E, W, and determines whether the output is
positive (i.e. N and E) or negative (i.e. S and W).
]]
coordinates.dms2dec = makeInvokeFunc('_dms2dec')
function coordinates._dms2dec(args)
local direction = args[1]
local degrees = args[2]
local minutes = args[3]
local seconds = args[4]
return convert_dms2dec(direction, degrees, minutes, seconds)
end
--[[
coord
Main entry point for Lua function to replace {{coord}}
Usage:
{{#invoke:Coordinates | coord }}
{{#invoke:Coordinates | coord | lat | long }}
{{#invoke:Coordinates | coord | lat | lat_flag | long | long_flag }}
...
Refer to {{coord}} documentation page for many additional parameters and
configuration options.
Note: This function provides the visual display elements of {{coord}}. In
order to load coordinates into the database, the {{#coordinates:}} parser
function must also be called, this is done automatically in the Lua
version of {{coord}}.
]]
coordinates.coord = makeInvokeFunc('_coord')
function coordinates._coord(args)
if not tonumber(args[1]) and not args[2] then
args[3] = args[1]; args[1] = nil
local entity = mw.wikibase.getEntityObject(args.qid)
if entity
and entity.claims
and entity.claims.P625
and entity.claims.P625[1].mainsnak.snaktype == 'value'
then
local precision = entity.claims.P625[1].mainsnak.datavalue.value.precision
args[1] = entity.claims.P625[1].mainsnak.datavalue.value.latitude
args[2] = entity.claims.P625[1].mainsnak.datavalue.value.longitude
if precision then
precision = -math_mod._round(math.log(precision)/math.log(10),0)
args[1] = math_mod._round(args[1],precision)
args[2] = math_mod._round(args[2],precision)
end
end
end
local contents, backward = formatTest(args)
local Notes = args.notes or ''
local Display = args.display and args.display:lower() or 'inline'
-- it and ti are short for inline,title and title,inline
local function isInline(s)
-- Finds whether coordinates are displayed inline.
return s:find('inline') ~= nil or s == 'i' or s == 'it' or s == 'ti'
end
local function isInTitle(s)
-- Finds whether coordinates are displayed in the title.
return s:find('title') ~= nil or s == 't' or s == 'it' or s == 'ti'
end
local function coord_wrapper(in_args)
-- Calls the parser function {{#coordinates:}}.
return mw.getCurrentFrame():callParserFunction('#coordinates', in_args) or ''
end
local text = ''
if isInline(Display) then
text = text .. '<span class="geo-inline">' .. contents .. Notes .. '</span>'
end
if isInTitle(Display) then
-- Add to output since indicator content is invisible to Lua later on
if not isInline(Display) then
text = text .. '<span class="geo-inline-hidden noexcerpt">' .. contents .. Notes .. '</span>'
end
text = text .. displaytitle(contents .. Notes) .. makeWikidataCategories(args.qid)
end
if not args.nosave then
local page_title, count = mw.title.getCurrentTitle(), 1
if backward then
local tmp = {}
while not string.find((args[count-1] or ''), '[EW]') do tmp[count] = (args[count] or ''); count = count+1 end
tmp.count = count; count = 2*(count-1)
while count >= tmp.count do table.insert(tmp, 1, (args[count] or '')); count = count-1 end
for i, v in ipairs(tmp) do args[i] = v end
else
while count <= 9 do args[count] = (args[count] or ''); count = count+1 end
end
if isInTitle(Display) and not page_title.isTalkPage and page_title.subpageText ~= 'doc' and page_title.subpageText ~= 'testcases' then args[10] = 'primary' end
args.notes, args.format, args.display = nil
text = text .. coord_wrapper(args)
end
return text
end
--[[
coord2text
Extracts a single value from a transclusion of {{Coord}}.
IF THE GEOHACK LINK SYNTAX CHANGES THIS FUNCTION MUST BE MODIFIED.
Usage:
{{#invoke:Coordinates | coord2text | {{Coord}} | parameter }}
Valid values for the second parameter are: lat (signed integer), long (signed integer), type, scale, dim, region, globe, source
]]
function coordinates._coord2text(coord,type)
if coord == '' or type == '' or not type then return nil end
type = mw.text.trim(type)
if type == 'lat' or type == 'long' then
local result, negative = mw.text.split((mw.ustring.match(coord,'[%.%d]+°[NS] [%.%d]+°[EW]') or ''), ' ')
if type == 'lat' then
result, negative = result[1], 'S'
else
result, negative = result[2], 'W'
end
result = mw.text.split(result, '°')
if result[2] == negative then result[1] = '-'..result[1] end
return result[1]
else
return mw.ustring.match(coord, 'params=.-_' .. type .. ':(.-)[ _]')
end
end
function coordinates.coord2text(frame)
return coordinates._coord2text(frame.args[1],frame.args[2])
end
--[[
coordinsert
Injects some text into the Geohack link of a transclusion of {{Coord}} (if that text isn't already in the transclusion). Outputs the modified transclusion of {{Coord}}.
IF THE GEOHACK LINK SYNTAX CHANGES THIS FUNCTION MUST BE MODIFIED.
Usage:
{{#invoke:Coordinates | coordinsert | {{Coord}} | parameter:value | parameter:value | … }}
Do not make Geohack unhappy by inserting something which isn't mentioned in the {{Coord}} documentation.
]]
function coordinates.coordinsert(frame)
-- for the 2nd or later integer parameter (the first is the coord template, as above)
for i, v in ipairs(frame.args) do
if i ~= 1 then
-- if we cannot find in the coord_template the i_th coordinsert parameter e.g. region
if not mw.ustring.find(frame.args[1], (mw.ustring.match(frame.args[i], '^(.-:)') or '')) then
-- find from the params= up to the first possibly-present underscore
-- and append the i_th coordinsert parameter and a space
-- IDK why we're adding a space but it does seem somewhat convenient
frame.args[1] = mw.ustring.gsub(frame.args[1], '(params=.-)_? ', '%1_'..frame.args[i]..' ')
end
end
end
if frame.args.name then
-- if we can't find the vcard class
if not mw.ustring.find(frame.args[1], '<span class="vcard">') then
-- take something that looks like a coord template and add the vcard span with class and fn org class
local namestr = frame.args.name
frame.args[1] = mw.ustring.gsub(
frame.args[1],
'(<span class="geo%-default">)(<span[^<>]*>[^<>]*</span><span[^<>]*>[^<>]*<span[^<>]*>[^<>]*</span></span>)(</span>)',
'%1<span class="vcard">%2<span style="display:none"> (<span class="fn org">' .. namestr .. '</span>)</span></span>%3'
)
-- then find anything from coordinates parameters to the 'end' and attach the title parameter
frame.args[1] = mw.ustring.gsub(
frame.args[1],
'(¶ms=[^&"<>%[%] ]*) ',
'%1&title=' .. mw.uri.encode(namestr) .. ' '
)
end
end
-- replace the existing indicator with a new indicator using the modified content
frame.args[1] = mw.ustring.gsub(
frame.args[1],
'(<span class="geo%-inline[^"]*">(.+)</span>)\127[^\127]*UNIQ%-%-indicator%-%x+%-%-?QINU[^\127]*\127',
function (inline, coord) return inline .. displaytitle(coord) end
)
return frame.args[1]
end
return coordinates
6162d7e98fcf6faab5809049e0a48bb3e67d88e3
Module:Coordinates/styles.css
828
220
447
446
2023-09-14T01:15:11Z
Ilovethehitgameomori
2
1 revision imported
text
text/plain
/* {{pp-template}} */
/* Geographical coordinates defaults. The classes "geo", "longitude", and
"latitude" are used by the [[Geo microformat]]. */
.geo-default,
.geo-dms,
.geo-dec {
display: inline;
}
.geo-nondefault,
.geo-multi-punct,
.geo-inline-hidden {
display: none;
}
.longitude,
.latitude {
white-space: nowrap;
}
1b5d036501a9f6bc9dcf3c9117e8d6bc97507290
Module:Math
828
221
449
448
2023-09-14T01:15:11Z
Ilovethehitgameomori
2
1 revision imported
Scribunto
text/plain
--[[
This module provides a number of basic mathematical operations.
]]
local yesno, getArgs -- lazily initialized
local p = {} -- Holds functions to be returned from #invoke, and functions to make available to other Lua modules.
local wrap = {} -- Holds wrapper functions that process arguments from #invoke. These act as intemediary between functions meant for #invoke and functions meant for Lua.
--[[
Helper functions used to avoid redundant code.
]]
local function err(msg)
-- Generates wikitext error messages.
return mw.ustring.format('<strong class="error">Formatting error: %s</strong>', msg)
end
local function unpackNumberArgs(args)
-- Returns an unpacked list of arguments specified with numerical keys.
local ret = {}
for k, v in pairs(args) do
if type(k) == 'number' then
table.insert(ret, v)
end
end
return unpack(ret)
end
local function makeArgArray(...)
-- Makes an array of arguments from a list of arguments that might include nils.
local args = {...} -- Table of arguments. It might contain nils or non-number values, so we can't use ipairs.
local nums = {} -- Stores the numbers of valid numerical arguments.
local ret = {}
for k, v in pairs(args) do
v = p._cleanNumber(v)
if v then
nums[#nums + 1] = k
args[k] = v
end
end
table.sort(nums)
for i, num in ipairs(nums) do
ret[#ret + 1] = args[num]
end
return ret
end
local function fold(func, ...)
-- Use a function on all supplied arguments, and return the result. The function must accept two numbers as parameters,
-- and must return a number as an output. This number is then supplied as input to the next function call.
local vals = makeArgArray(...)
local count = #vals -- The number of valid arguments
if count == 0 then return
-- Exit if we have no valid args, otherwise removing the first arg would cause an error.
nil, 0
end
local ret = table.remove(vals, 1)
for _, val in ipairs(vals) do
ret = func(ret, val)
end
return ret, count
end
--[[
Fold arguments by selectively choosing values (func should return when to choose the current "dominant" value).
]]
local function binary_fold(func, ...)
local value = fold((function(a, b) if func(a, b) then return a else return b end end), ...)
return value
end
--[[
random
Generate a random number
Usage:
{{#invoke: Math | random }}
{{#invoke: Math | random | maximum value }}
{{#invoke: Math | random | minimum value | maximum value }}
]]
function wrap.random(args)
local first = p._cleanNumber(args[1])
local second = p._cleanNumber(args[2])
return p._random(first, second)
end
function p._random(first, second)
math.randomseed(mw.site.stats.edits + mw.site.stats.pages + os.time() + math.floor(os.clock() * 1000000000))
-- math.random will throw an error if given an explicit nil parameter, so we need to use if statements to check the params.
if first and second then
if first <= second then -- math.random doesn't allow the first number to be greater than the second.
return math.random(first, second)
end
elseif first then
return math.random(first)
else
return math.random()
end
end
--[[
order
Determine order of magnitude of a number
Usage:
{{#invoke: Math | order | value }}
]]
function wrap.order(args)
local input_string = (args[1] or args.x or '0');
local input_number = p._cleanNumber(input_string);
if input_number == nil then
return err('order of magnitude input appears non-numeric')
else
return p._order(input_number)
end
end
function p._order(x)
if x == 0 then return 0 end
return math.floor(math.log10(math.abs(x)))
end
--[[
precision
Detemines the precision of a number using the string representation
Usage:
{{ #invoke: Math | precision | value }}
]]
function wrap.precision(args)
local input_string = (args[1] or args.x or '0');
local trap_fraction = args.check_fraction;
local input_number;
if not yesno then
yesno = require('Module:Yesno')
end
if yesno(trap_fraction, true) then -- Returns true for all input except nil, false, "no", "n", "0" and a few others. See [[Module:Yesno]].
local pos = string.find(input_string, '/', 1, true);
if pos ~= nil then
if string.find(input_string, '/', pos + 1, true) == nil then
local denominator = string.sub(input_string, pos+1, -1);
local denom_value = tonumber(denominator);
if denom_value ~= nil then
return math.log10(denom_value);
end
end
end
end
input_number, input_string = p._cleanNumber(input_string);
if input_string == nil then
return err('precision input appears non-numeric')
else
return p._precision(input_string)
end
end
function p._precision(x)
if type(x) == 'number' then
x = tostring(x)
end
x = string.upper(x)
local decimal = x:find('%.')
local exponent_pos = x:find('E')
local result = 0;
if exponent_pos ~= nil then
local exponent = string.sub(x, exponent_pos + 1)
x = string.sub(x, 1, exponent_pos - 1)
result = result - tonumber(exponent)
end
if decimal ~= nil then
result = result + string.len(x) - decimal
return result
end
local pos = string.len(x);
while x:byte(pos) == string.byte('0') do
pos = pos - 1
result = result - 1
if pos <= 0 then
return 0
end
end
return result
end
--[[
max
Finds the maximum argument
Usage:
{{#invoke:Math| max | value1 | value2 | ... }}
Note, any values that do not evaluate to numbers are ignored.
]]
function wrap.max(args)
return p._max(unpackNumberArgs(args))
end
function p._max(...)
local max_value = binary_fold((function(a, b) return a > b end), ...)
if max_value then
return max_value
end
end
--[[
median
Find the median of set of numbers
Usage:
{{#invoke:Math | median | number1 | number2 | ...}}
OR
{{#invoke:Math | median }}
]]
function wrap.median(args)
return p._median(unpackNumberArgs(args))
end
function p._median(...)
local vals = makeArgArray(...)
local count = #vals
table.sort(vals)
if count == 0 then
return 0
end
if p._mod(count, 2) == 0 then
return (vals[count/2] + vals[count/2+1])/2
else
return vals[math.ceil(count/2)]
end
end
--[[
min
Finds the minimum argument
Usage:
{{#invoke:Math| min | value1 | value2 | ... }}
OR
{{#invoke:Math| min }}
When used with no arguments, it takes its input from the parent
frame. Note, any values that do not evaluate to numbers are ignored.
]]
function wrap.min(args)
return p._min(unpackNumberArgs(args))
end
function p._min(...)
local min_value = binary_fold((function(a, b) return a < b end), ...)
if min_value then
return min_value
end
end
--[[
sum
Finds the sum
Usage:
{{#invoke:Math| sum | value1 | value2 | ... }}
OR
{{#invoke:Math| sum }}
Note, any values that do not evaluate to numbers are ignored.
]]
function wrap.sum(args)
return p._sum(unpackNumberArgs(args))
end
function p._sum(...)
local sums, count = fold((function(a, b) return a + b end), ...)
if not sums then
return 0
else
return sums
end
end
--[[
average
Finds the average
Usage:
{{#invoke:Math| average | value1 | value2 | ... }}
OR
{{#invoke:Math| average }}
Note, any values that do not evaluate to numbers are ignored.
]]
function wrap.average(args)
return p._average(unpackNumberArgs(args))
end
function p._average(...)
local sum, count = fold((function(a, b) return a + b end), ...)
if not sum then
return 0
else
return sum / count
end
end
--[[
round
Rounds a number to specified precision
Usage:
{{#invoke:Math | round | value | precision }}
--]]
function wrap.round(args)
local value = p._cleanNumber(args[1] or args.value or 0)
local precision = p._cleanNumber(args[2] or args.precision or 0)
if value == nil or precision == nil then
return err('round input appears non-numeric')
else
return p._round(value, precision)
end
end
function p._round(value, precision)
local rescale = math.pow(10, precision or 0);
return math.floor(value * rescale + 0.5) / rescale;
end
--[[
log10
returns the log (base 10) of a number
Usage:
{{#invoke:Math | log10 | x }}
]]
function wrap.log10(args)
return math.log10(args[1])
end
--[[
mod
Implements the modulo operator
Usage:
{{#invoke:Math | mod | x | y }}
--]]
function wrap.mod(args)
local x = p._cleanNumber(args[1])
local y = p._cleanNumber(args[2])
if not x then
return err('first argument to mod appears non-numeric')
elseif not y then
return err('second argument to mod appears non-numeric')
else
return p._mod(x, y)
end
end
function p._mod(x, y)
local ret = x % y
if not (0 <= ret and ret < y) then
ret = 0
end
return ret
end
--[[
gcd
Calculates the greatest common divisor of multiple numbers
Usage:
{{#invoke:Math | gcd | value 1 | value 2 | value 3 | ... }}
--]]
function wrap.gcd(args)
return p._gcd(unpackNumberArgs(args))
end
function p._gcd(...)
local function findGcd(a, b)
local r = b
local oldr = a
while r ~= 0 do
local quotient = math.floor(oldr / r)
oldr, r = r, oldr - quotient * r
end
if oldr < 0 then
oldr = oldr * -1
end
return oldr
end
local result, count = fold(findGcd, ...)
return result
end
--[[
precision_format
Rounds a number to the specified precision and formats according to rules
originally used for {{template:Rnd}}. Output is a string.
Usage:
{{#invoke: Math | precision_format | number | precision }}
]]
function wrap.precision_format(args)
local value_string = args[1] or 0
local precision = args[2] or 0
return p._precision_format(value_string, precision)
end
function p._precision_format(value_string, precision)
-- For access to Mediawiki built-in formatter.
local lang = mw.getContentLanguage();
local value
value, value_string = p._cleanNumber(value_string)
precision = p._cleanNumber(precision)
-- Check for non-numeric input
if value == nil or precision == nil then
return err('invalid input when rounding')
end
local current_precision = p._precision(value)
local order = p._order(value)
-- Due to round-off effects it is neccesary to limit the returned precision under
-- some circumstances because the terminal digits will be inaccurately reported.
if order + precision >= 14 then
if order + p._precision(value_string) >= 14 then
precision = 13 - order;
end
end
-- If rounding off, truncate extra digits
if precision < current_precision then
value = p._round(value, precision)
current_precision = p._precision(value)
end
local formatted_num = lang:formatNum(math.abs(value))
local sign
-- Use proper unary minus sign rather than ASCII default
if value < 0 then
sign = '−'
else
sign = ''
end
-- Handle cases requiring scientific notation
if string.find(formatted_num, 'E', 1, true) ~= nil or math.abs(order) >= 9 then
value = value * math.pow(10, -order)
current_precision = current_precision + order
precision = precision + order
formatted_num = lang:formatNum(math.abs(value))
else
order = 0;
end
formatted_num = sign .. formatted_num
-- Pad with zeros, if needed
if current_precision < precision then
local padding
if current_precision <= 0 then
if precision > 0 then
local zero_sep = lang:formatNum(1.1)
formatted_num = formatted_num .. zero_sep:sub(2,2)
padding = precision
if padding > 20 then
padding = 20
end
formatted_num = formatted_num .. string.rep('0', padding)
end
else
padding = precision - current_precision
if padding > 20 then
padding = 20
end
formatted_num = formatted_num .. string.rep('0', padding)
end
end
-- Add exponential notation, if necessary.
if order ~= 0 then
-- Use proper unary minus sign rather than ASCII default
if order < 0 then
order = '−' .. lang:formatNum(math.abs(order))
else
order = lang:formatNum(order)
end
formatted_num = formatted_num .. '<span style="margin:0 .15em 0 .25em">×</span>10<sup>' .. order .. '</sup>'
end
return formatted_num
end
--[[
divide
Implements the division operator
Usage:
{{#invoke:Math | divide | x | y | round= | precision= }}
--]]
function wrap.divide(args)
local x = args[1]
local y = args[2]
local round = args.round
local precision = args.precision
if not yesno then
yesno = require('Module:Yesno')
end
return p._divide(x, y, yesno(round), precision)
end
function p._divide(x, y, round, precision)
if y == nil or y == "" then
return err("Empty divisor")
elseif not tonumber(y) then
if type(y) == 'string' and string.sub(y, 1, 1) == '<' then
return y
else
return err("Not a number: " .. y)
end
elseif x == nil or x == "" then
return err("Empty dividend")
elseif not tonumber(x) then
if type(x) == 'string' and string.sub(x, 1, 1) == '<' then
return x
else
return err("Not a number: " .. x)
end
else
local z = x / y
if round then
return p._round(z, 0)
elseif precision then
return p._round(z, precision)
else
return z
end
end
end
--[[
Helper function that interprets the input numerically. If the
input does not appear to be a number, attempts evaluating it as
a parser functions expression.
]]
function p._cleanNumber(number_string)
if type(number_string) == 'number' then
-- We were passed a number, so we don't need to do any processing.
return number_string, tostring(number_string)
elseif type(number_string) ~= 'string' or not number_string:find('%S') then
-- We were passed a non-string or a blank string, so exit.
return nil, nil;
end
-- Attempt basic conversion
local number = tonumber(number_string)
-- If failed, attempt to evaluate input as an expression
if number == nil then
local success, result = pcall(mw.ext.ParserFunctions.expr, number_string)
if success then
number = tonumber(result)
number_string = tostring(number)
else
number = nil
number_string = nil
end
else
number_string = number_string:match("^%s*(.-)%s*$") -- String is valid but may contain padding, clean it.
number_string = number_string:match("^%+(.*)$") or number_string -- Trim any leading + signs.
if number_string:find('^%-?0[xX]') then
-- Number is using 0xnnn notation to indicate base 16; use the number that Lua detected instead.
number_string = tostring(number)
end
end
return number, number_string
end
--[[
Wrapper function that does basic argument processing. This ensures that all functions from #invoke can use either the current
frame or the parent frame, and it also trims whitespace for all arguments and removes blank arguments.
]]
local mt = { __index = function(t, k)
return function(frame)
if not getArgs then
getArgs = require('Module:Arguments').getArgs
end
return wrap[k](getArgs(frame)) -- Argument processing is left to Module:Arguments. Whitespace is trimmed and blank arguments are removed.
end
end }
return setmetatable(p, mt)
2bbe734d898299f65412963a3c1782e9fcc4d9ca
Template:Increase
10
222
451
450
2023-09-14T01:15:11Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
[[File:Increase2.svg|{{{size|11px}}}|alt={{{1|Increase}}}|link=|{{{1|Increase}}}]]<noinclude>
{{documentation}}
</noinclude>
dac0cb099f2bf8616e0649249f7e4593a2bf54bd
Template:!-
10
223
453
452
2023-09-14T01:15:12Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
|-<noinclude>
{{documentation}}
</noinclude>
19a1b27b5273caa6fd83a1208fb704afa9ee7c04
Module:URL
828
224
455
454
2023-09-14T01:15:12Z
Ilovethehitgameomori
2
1 revision imported
Scribunto
text/plain
--
-- This module implements {{URL}}
--
-- See unit tests at [[Module:URL/testcases]]
local p = {}
local function safeUri(s)
local success, uri = pcall(function()
return mw.uri.new(s)
end)
if success then
return uri
end
end
local function extractUrl(args)
for name, val in pairs(args) do
if name ~= 2 and name ~= "msg" then
local url = name .. "=" .. val;
url = mw.ustring.gsub(url, '^[Hh][Tt][Tt][Pp]([Ss]?):(/?)([^/])', 'http%1://%3')
local uri = safeUri(url);
if uri and uri.host then
return url
end
end
end
end
function p._url(url, text, msg)
url = mw.text.trim(url or '')
text = mw.text.trim(text or '')
local nomsg = (msg or ''):sub(1,1):lower() == "n" or msg == 'false' -- boolean: true if msg is "false" or starts with n or N
if url == '' then
if text == '' then
if nomsg then
return nil
else
return mw.getCurrentFrame():expandTemplate{ title = 'tlx', args = { 'URL', "''example.com''", "''optional display text''" } }
end
else
return text
end
end
-- If the URL contains any unencoded spaces, encode them, because MediaWiki will otherwise interpret a space as the end of the URL.
url = mw.ustring.gsub(url, '%s', function(s) return mw.uri.encode(s, 'PATH') end)
-- If there is an empty query string or fragment id, remove it as it will cause mw.uri.new to throw an error
url = mw.ustring.gsub(url, '#$', '')
url = mw.ustring.gsub(url, '%?$', '')
-- If it's an HTTP[S] URL without the double slash, fix it.
url = mw.ustring.gsub(url, '^[Hh][Tt][Tt][Pp]([Ss]?):(/?)([^/])', 'http%1://%3')
local uri = safeUri(url)
-- Handle URL's without a protocol and URL's that are protocol-relative,
-- e.g. www.example.com/foo or www.example.com:8080/foo, and //www.example.com/foo
if uri and (not uri.protocol or (uri.protocol and not uri.host)) and url:sub(1, 2) ~= '//' then
url = 'http://' .. url
uri = safeUri(url)
end
if text == '' then
if uri then
if uri.path == '/' then uri.path = '' end
local port = ''
if uri.port then port = ':' .. uri.port end
text = mw.ustring.lower(uri.host or '') .. port .. (uri.relativePath or '')
-- Add <wbr> before _/.-# sequences
text = mw.ustring.gsub(text,"(/+)","<wbr/>%1") -- This entry MUST be the first. "<wbr/>" has a "/" in it, you know.
text = mw.ustring.gsub(text,"(%.+)","<wbr/>%1")
-- text = mw.ustring.gsub(text,"(%-+)","<wbr/>%1") -- DISABLED for now
text = mw.ustring.gsub(text,"(%#+)","<wbr/>%1")
text = mw.ustring.gsub(text,"(_+)","<wbr/>%1")
else -- URL is badly-formed, so just display whatever was passed in
text = url
end
end
return mw.ustring.format('<span class="url">[%s %s]</span>', url, text)
end
--[[
The main entry point for calling from Template:URL.
--]]
function p.url(frame)
local templateArgs = frame.args
local parentArgs = frame:getParent().args
local url = templateArgs[1] or parentArgs[1]
local text = templateArgs[2] or parentArgs[2] or ''
local msg = templateArgs.msg or parentArgs.msg or ''
url = url or extractUrl(templateArgs) or extractUrl(parentArgs) or ''
return p._url(url, text, msg)
end
--[[
The entry point for calling from the forked Template:URL2.
This function returns no message by default.
It strips out wiki-link markup, html tags, and everything after a space.
--]]
function p.url2(frame)
local templateArgs = frame.args
local parentArgs = frame:getParent().args
local url = templateArgs[1] or parentArgs[1]
local text = templateArgs[2] or parentArgs[2] or ''
-- default to no message
local msg = templateArgs.msg or parentArgs.msg or 'no'
url = url or extractUrl(templateArgs) or extractUrl(parentArgs) or ''
-- if the url came from a Wikidata call, it might have a pen icon appended
-- we want to keep that and add it back at the end.
local u1, penicon = mw.ustring.match( url, "(.*)( <span class='penicon.*)" )
if penicon then url = u1 end
-- strip out html tags and [ ] from url
url = (url or ''):gsub("<[^>]*>", ""):gsub("[%[%]]", "")
-- truncate anything after a space
url = url:gsub("%%20", " "):gsub(" .*", "")
return (p._url(url, text, msg) or "") .. (penicon or "")
end
return p
8d7a4c6fe04a01815e940475cf64b28e1ef48cfb
Template:Color
10
225
457
456
2023-09-14T01:15:12Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
<span style="color:{{{1|}}}">{{{2|{{{1|}}}}}}</span><noinclude>{{Documentation}}<!-- PLEASE ADD THIS TEMPLATE'S CATEGORIES AND INTERWIKIS TO THE /doc SUBPAGE, THANKS --></noinclude>
f12cd387c0d5c11494a7182b7538cc3292eb3a4a
Template:Collapsible list
10
226
459
458
2023-09-14T01:15:13Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{<includeonly>safesubst:</includeonly>#invoke:collapsible list|main}}<noinclude>
{{documentation}}
<!-- Categories go on the /doc subpage, and interwikis go on Wikidata. -->
</noinclude>
aff61df28bcc6c3457d6aa36ada4fffe68c409a9
Module:Collapsible list
828
227
461
460
2023-09-14T01:15:13Z
Ilovethehitgameomori
2
1 revision imported
Scribunto
text/plain
local p = {}
local function getListItem( data )
if not type( data ) == 'string' then
return ''
end
return mw.ustring.format( '<li style="line-height: inherit; margin: 0">%s</li>', data )
end
-- Returns an array containing the keys of all positional arguments
-- that contain data (i.e. non-whitespace values).
local function getArgNums( args )
local nums = {}
for k, v in pairs( args ) do
if type( k ) == 'number' and
k >= 1 and
math.floor( k ) == k and
type( v ) == 'string' and
mw.ustring.match( v, '%S' ) then
table.insert( nums, k )
end
end
table.sort( nums )
return nums
end
-- Formats a list of classes, styles or other attributes.
local function formatAttributes( attrType, ... )
local attributes = { ... }
local nums = getArgNums( attributes )
local t = {}
for i, num in ipairs( nums ) do
table.insert( t, attributes[ num ] )
end
if #t == 0 then
return '' -- Return the blank string so concatenation will work.
end
return mw.ustring.format( ' %s="%s"', attrType, table.concat( t, ' ' ) )
end
-- TODO: use Module:List. Since the update for this comment is routine,
-- this is blocked without a consensus discussion by
-- [[MediaWiki_talk:Common.css/Archive_15#plainlist_+_hlist_indentation]]
-- if we decide hlist in plainlist in this template isn't an issue, we can use
-- module:list directly
-- [https://en.wikipedia.org/w/index.php?title=Module:Collapsible_list/sandbox&oldid=1130172480]
-- is an implementation (that will code rot slightly I expect)
local function buildList( args )
-- Get the list items.
local listItems = {}
local argNums = getArgNums( args )
for i, num in ipairs( argNums ) do
table.insert( listItems, getListItem( args[ num ] ) )
end
if #listItems == 0 then
return ''
end
listItems = table.concat( listItems )
-- hack around mw-collapsible show/hide jumpiness by looking for text-alignment
-- by setting a margin if centered
local textAlignmentCentered = 'text%-align%s*:%s*center'
local centeredTitle = (args.title_style and args.title_style:lower():match(textAlignmentCentered)
or args.titlestyle and args.titlestyle:lower():match(textAlignmentCentered))
local centeredTitleSpacing
if centeredTitle then
centeredTitleSpacing = 'margin: 0 4em'
else
centeredTitleSpacing = ''
end
-- Get class, style and title data.
local collapsibleContainerClass = formatAttributes(
'class',
'collapsible-list',
'mw-collapsible',
not args.expand and 'mw-collapsed'
)
local collapsibleContainerStyle = formatAttributes(
'style',
-- mostly work around .infobox-full-data defaulting to centered
'text-align: left;',
args.frame_style,
args.framestyle
)
local collapsibleTitleStyle = formatAttributes(
'style',
'line-height: 1.6em; font-weight: bold;',
args.title_style,
args.titlestyle
)
local jumpyTitleStyle = formatAttributes(
'style',
centeredTitleSpacing
)
local title = args.title or 'List'
local ulclass = formatAttributes( 'class', 'mw-collapsible-content', args.hlist and 'hlist' )
local ulstyle = formatAttributes(
'style',
'margin-top: 0; margin-bottom: 0; line-height: inherit;',
not args.bullets and 'list-style: none; margin-left: 0;',
args.list_style,
args.liststyle
)
local hlist_templatestyles = ''
if args.hlist then
hlist_templatestyles = mw.getCurrentFrame():extensionTag{
name = 'templatestyles', args = { src = 'Hlist/styles.css' }
}
end
-- Build the list.
return mw.ustring.format(
'%s<div%s%s>\n<div%s><div%s>%s</div></div>\n<ul%s%s>%s</ul>\n</div>',
hlist_templatestyles, collapsibleContainerClass, collapsibleContainerStyle,
collapsibleTitleStyle, jumpyTitleStyle, title, ulclass, ulstyle, listItems
)
end
function p.main( frame )
local origArgs
if frame == mw.getCurrentFrame() then
origArgs = frame:getParent().args
for k, v in pairs( frame.args ) do
origArgs = frame.args
break
end
else
origArgs = frame
end
local args = {}
for k, v in pairs( origArgs ) do
if type( k ) == 'number' or v ~= '' then
args[ k ] = v
end
end
return buildList( args )
end
return p
5b7e779e7529bcb12a219726ef6c948ea98874fd
Template:ISO 3166 code
10
228
463
462
2023-09-14T01:15:14Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{safesubst<noinclude/>:#invoke:ISO 3166|code|{{{1}}}|{{{2|}}}}}<noinclude>
{{Documentation|content={{ISO 3166 conversion template doc}}}}
</noinclude>
06f8325798ef5cb3ed4eb035d562ab9f8656cc6c
Module:ISO 3166
828
229
465
464
2023-09-14T01:15:14Z
Ilovethehitgameomori
2
1 revision imported
Scribunto
text/plain
-- to enable us to replicate the current functioning of Country extract, we need to deal with:
-- 2 {{<name>}} DONE!
-- 3 [[<name>]] DONE!
-- 4 [[<name>|<junk>]] DONE!
-- 5 [[image:flag of <country>.[svg|gif|png|jpg]|\d+px]] DONE!
local p = {}
local getArgs = require("Module:Arguments").getArgs
local data = mw.loadData("Module:ISO 3166/data/National")
--[[----------F I N D N A M E----------]]-- -- Finds the name in the database
local function findname(code,cdata,qry)
local sqry = p.strip(qry)
if cdata["name"] and sqry==p.strip(cdata["name"])
or cdata["isoname"] and sqry==p.strip(cdata["isoname"])
or not cdata["nocode"] and sqry==code
or sqry==cdata["alpha3"] or sqry==cdata["numeric"]
then
return true
end
for _,tname in pairs(cdata["isonames"] or {}) do
if sqry==p.strip(tname) then
return true
end
end
for _,tname in pairs(cdata["altnames"] or {}) do
if sqry==p.strip(tname) then
return true
end
end
return false
end
--[[----------I S O N A M E----------]]-- -- Find the ISO name of a country/region
local function isoname(data,code,lang)
if data[code]["isonames"] then
local name = data[code]["isodisplaynames"] and data[code]["isodisplaynames"][lang]
or data[code]["isonames"][lang]
or data[code]["isodisplaynames"] and data[code]["isodisplaynames"][data[code]["defaultlang"] or data["defaultlang"]]
or data[code]["isonames"][data[code]["defaultlang"] or data["defaultlang"]]
or data[code]["isodisplaynames"] and data[code]["isodisplaynames"]["en"]
or data[code]["isonames"]["en"]
if name then return name end
for _,iname in pairs(data[code]["isonames"]) do return iname end
return data[code]["isodisplayname"] or data[code]["isoname"]
else
return data[code]["isodisplayname"] or data[code]["isoname"]
end
end
--[[----------S T R I P----------]]-- -- Removes junk from the input
function p.strip(text)
local accents = {["À"]="A",["Á"]="A",["Â"]="A",["Ã"]="A", -- accent list
["Ä"]="A",["Å"]="A",["Ç"]="C",["È"]="E",["É"]="E",
["Ê"]="E",["Ë"]="E",["Ì"]="I",["Í"]="I",["Î"]="I",
["Ï"]="I",["Ñ"]="N",["Ò"]="O",["Ó"]="O",["Ô"]="O",
["Õ"]="O",["Ö"]="O",["Ø"]="O",["Ù"]="U",["Ú"]="U",
["Û"]="U",["Ü"]="U",["Ý"]="Y"
}
local remove = {"NATION OF","COUNTRY OF","TERRITORY OF", -- text to be removed list
"FLAG OF","FLAG","KINGDOM OF","STATE OF"," STATE ",
"PROVINCE OF","PROVINCE","TERRITORY"
}
local patterns = {[".+:"]="",["|.+"]="",["%(.-%)"]="", -- patterns to follow (order may matter)
["%..*"]="",["^THE "]="",["%_"]=" ",["%-"]=" ",
["%d%d?%d?PX"]="",
}
text = mw.ustring.upper(text) -- Case insensitivity
text = mw.ustring.gsub(text,"[À-Ý]",accents) -- Deaccent
for pattern,value in pairs(patterns) do -- Follow patterns
text = mw.ustring.gsub(text,pattern,value)
end
for _,words in pairs(remove) do -- Remove unneeded words
text = mw.ustring.gsub(text,words,"")
end
text = mw.ustring.gsub(text,"%W","") -- Remove non alpha-numeric
return text
end
--[[----------P . C A L L S T R I P ---------]]-- -- Calls P.strip but using Module:Arguments
function p.callstrip(frame)
local args = getArgs(frame)
return p.strip(args[1]) or ""
end
--[[----------P . L U A C O D E---------]]-- -- Makes the ISO code of a country
function p.luacode(args)
if string.find(args[1] or '',"%-") then
args[1], args[2] = string.match(args[1] or '',"^([^%-]*)%-(.*)$")
end
if args[1] then args[1] = p.strip(args[1]) end
if args[2] then args[2] = p.strip(args[2]) end
if args["codetype"]=="3" then
args["codetype"]="alpha3"
end
local eot = args.error or ""
local catnocountry = (args.nocat and args.nocat == 'true') and ''
or '[[Category:Wikipedia page with obscure country]]'
local catnosubdivision = (args.nocat and args.nocat == 'true') and ''
or '[[Category:Wikipedia page with obscure subdivision]]'
if not args[1] then
if mw.title.getCurrentTitle().namespace ~= 0 then catnocountry = '' end
return catnocountry, '<span style="font-size:100%" class="error">"No parameter for the country given"</span>'
end
if not args[2] then --3166-1 code
for alpha2,cdata in pairs(data) do
if findname(alpha2,cdata,args[1]) then
if args["codetype"]=="numeric" or args["codetype"]=="alpha3" then
return cdata[args["codetype"]]
else
return alpha2
end
end
end
if mw.title.getCurrentTitle().namespace ~= 0 then catnocountry = '' end
return catnocountry
else --3166-2 code
for alpha2,cdata in pairs(data) do
if findname(alpha2,cdata,args[1]) then
if mw.ustring.match(alpha2,"GB") then -- For England, Wales etc.
alpha2 = "GB"
end
local sdata = mw.loadData("Module:ISO 3166/data/"..alpha2)
local empty = true
for scode,scdata in pairs(sdata) do
if type(scdata)=="table" then
empty = false
if findname(scode,scdata,args[2]) then
return alpha2.."-"..scode
end
end
end
if mw.title.getCurrentTitle().namespace ~= 0 then catnosubdivision = '' end
return catnosubdivision
end
end
if mw.title.getCurrentTitle().namespace ~= 0 then catnocountry = '' end
return catnocountry
end
end
--[[----------P . C O D E---------]]-- -- Calls P.Luacode but using Module:Arguments
function p.code(frame)
return p.luacode(getArgs(frame)) or ""
end
--[[----------P . N U M E R I C---------]]-- -- Calls P.Luacode but using Module:Arguments and setting it to output a numeric value
function p.numeric(frame)
local args = getArgs(frame)
args["codetype"]="numeric"
return p.luacode(args) or ""
end
--[[----------P . L U A N A M E---------]]-- -- Makes the ISO/common name of a country
function p.luaname(args)
local code1 = p.luacode(args)
local code2 = ''
if string.find(code1,"%-") then
code1, code2 = string.match(code1,"^([^%-]*)%-(.*)$")
end
if string.find(code1,"^%u%u$") then
if code2=="" then --3166-1 alpha-2 code
if data[code1] then
return (args.isoname or args.lang) and isoname(data,code1,args.lang)
or (data[code1]["displayname"] or data[code1]["name"])
else
return '[[Category:Wikipedia page with obscure country]]'
end
else --3166-2 code
local sdata
if data[code1] then
sdata = mw.loadData("Module:ISO 3166/data/"..code1)
else
return '[[Category:Wikipedia page with obscure country]]'
end
if sdata[code2] then
return (args.isoname or args.lang) and isoname(sdata,code2,args.lang)
or (sdata[code2]["displayname"] or sdata[code2]["name"])
else
return '[[Category:Wikipedia page with obscure country]]'
end
end
end
end
--[[----------P . N A M E---------]]-- -- Calls P.Luaname but using Module:Arguments
function p.name(frame)
return p.luaname(getArgs(frame)) or ""
end
--[[----------P . G E O C O O R D I N S E R T---------]]-- -- Wrapper for Module:Coordinates.coordinsert
function p.geocoordinsert(frame)
-- {{#invoke:ISO 3166|geocoordinsert|{{coord|...}}
-- |country=..|subdivision1=...|subdivision2=...
-- |type=...|scale=...|dim=...|source=...|globe=...
-- }}
local args = frame.args
local subdivisionqueried = false
local catnocountry = (args.nocat and args.nocat == 'true') and ''
or '[[Category:Wikipedia page with obscure country]]'
local catnosubdivision = (args.nocat and args.nocat == 'true') and ''
or '[[Category:Wikipedia page with obscure subdivision]]' or ''
local tracking = ''
local targs = {}
targs[1] = args[1] or ''
for i, v in pairs(args) do
if i == 'country' and not mw.ustring.find(targs[1], 'region:') then
local country = v
local k, region = 1, ''
-- look for a valid subdivision
while region == '' and k < 3 do
local subdivision = args['subdivision' .. k] or ''
if subdivision ~= '' then
region = p.luacode({country, subdivision, nocat = 'true'})
subdivisionqueried = true
end
k = k + 1
end
-- subdivision lookup failed or never attempted, try country only
if region == '' then
region = p.luacode({country, nocat = 'true'})
if mw.title.getCurrentTitle().namespace ~= 0 then catnocountry, catnosubdivision = '', '' end
if region == '' then
tracking = tracking .. catnocountry
elseif subdivisionqueried == true then
tracking = tracking .. catnosubdivision
end
end
-- something worked, add it to the targs
if region ~= '' then
targs[#targs + 1] = 'region:' .. region
end
elseif i == 'type' or i == 'scale' or i == 'dim'
or i == 'source' or i == 'globe' then
targs[#targs + 1] = i .. ':' .. v
end
end
-- call Module:Coordinates.coordinsert if there is something to insert
if #targs > 1 then
local coordinsert = require('Module:Coordinates').coordinsert
return coordinsert({args = targs}) .. tracking
end
-- otherwise, just return the coordinates
return targs[1] .. tracking
end
return p
6bc354f2610f29e712065cbe3ea814144fa3a600
Module:ISO 3166/data/National
828
230
467
466
2023-09-14T01:15:14Z
Ilovethehitgameomori
2
1 revision imported
Scribunto
text/plain
return {
["AD"] = {alpha3="AND",numeric="020",name="Andorra"},
["AE"] = {alpha3="ARE",numeric="784",name="United Arab Emirates",altnames={"UAE"}},
["AF"] = {alpha3="AFG",numeric="004",name="Afghanistan"},
["AG"] = {alpha3="ATG",numeric="028",name="Antigua and Barbuda"},
["AI"] = {alpha3="AIA",numeric="660",name="Anguilla"},
["AL"] = {alpha3="ALB",numeric="008",name="Albania"},
["AM"] = {alpha3="ARM",numeric="051",name="Armenia"},
["AO"] = {alpha3="AGO",numeric="024",name="Angola"},
["AQ"] = {alpha3="ATA",numeric="010",name="Antarctica"},
["AR"] = {alpha3="ARG",numeric="032",name="Argentina"},
["AS"] = {alpha3="ASM",numeric="016",name="American Samoa"},
["AT"] = {alpha3="AUT",numeric="040",name="Austria"},
["AU"] = {alpha3="AUS",numeric="036",name="Australia"},
["AW"] = {alpha3="ABW",numeric="533",name="Aruba"},
["AX"] = {alpha3="ALA",numeric="248",name="Åland Islands",altnames={"Aland Islands","Åland","Aland"}},
["AZ"] = {alpha3="AZE",numeric="031",name="Azerbaijan"},
["BA"] = {alpha3="BIH",numeric="070",name="Bosnia and Herzegovina",altnames={"Bosnia"}},
["BB"] = {alpha3="BRB",numeric="052",name="Barbados"},
["BD"] = {alpha3="BGD",numeric="050",name="Bangladesh"},
["BE"] = {alpha3="BEL",numeric="056",name="Belgium"},
["BF"] = {alpha3="BFA",numeric="854",name="Burkina Faso"},
["BG"] = {alpha3="BGR",numeric="100",name="Bulgaria"},
["BH"] = {alpha3="BHR",numeric="048",name="Bahrain"},
["BI"] = {alpha3="BDI",numeric="108",name="Burundi"},
["BJ"] = {alpha3="BEN",numeric="204",name="Benin"},
["BL"] = {alpha3="BLM",numeric="652",name="Saint Barthélemy",altnames={"St Barthelemy"}},
["BM"] = {alpha3="BMU",numeric="060",name="Bermuda"},
["BN"] = {alpha3="BRN",numeric="096",name="Brunei",isoname="Brunei Darussalam"},
["BO"] = {alpha3="BOL",numeric="068",name="Bolivia",isoname="Bolivia (Plurinational State of)"},
["BQ"] = {alpha3="BES",numeric="535",name="Caribbean Netherlands",isoname="Bonaire, Sint Eustatius and Saba"},
["BR"] = {alpha3="BRA",numeric="076",name="Brazil"},
["BS"] = {alpha3="BHS",numeric="044",name="Bahamas"},
["BT"] = {alpha3="BTN",numeric="064",name="Bhutan"},
["BV"] = {alpha3="BVT",numeric="074",name="Bouvet Island"},
["BW"] = {alpha3="BWA",numeric="072",name="Botswana"},
["BY"] = {alpha3="BLR",numeric="112",name="Belarus"},
["BZ"] = {alpha3="BLZ",numeric="084",name="Belize"},
["CA"] = {alpha3="CAN",numeric="124",name="Canada"},
["CC"] = {alpha3="CCK",numeric="166",name="Cocos (Keeling) Islands",altnames={"Cocos Islands","Keeling Islands"}},
["CD"] = {alpha3="COD",numeric="180",name="Democratic Republic of the Congo",isoname="Congo, Democratic Republic of the",altnames={"Congo-Kinshasa","DRC","DR Congo"}},
["CF"] = {alpha3="CAF",numeric="140",name="Central African Republic",altnames={"CAR"}},
["CG"] = {alpha3="COG",numeric="178",name="Republic of the Congo",isoname="Congo",altnames={"Congo-Brazzaville"}},
["CH"] = {alpha3="CHE",numeric="756",name="Switzerland"},
["CI"] = {alpha3="CIV",numeric="384",name="Côte d'Ivoire",altnames={"Ivory Coast"}},
["CK"] = {alpha3="COK",numeric="184",name="Cook Islands"},
["CL"] = {alpha3="CHL",numeric="152",name="Chile"},
["CM"] = {alpha3="CMR",numeric="120",name="Cameroon"},
["CN"] = {alpha3="CHN",numeric="156",name="China",altnames={"People's Republic of China","PRC"}},
["CO"] = {alpha3="COL",numeric="170",name="Colombia"},
["CR"] = {alpha3="CRI",numeric="188",name="Costa Rica"},
["CU"] = {alpha3="CUB",numeric="192",name="Cuba"},
["CV"] = {alpha3="CPV",numeric="132",name="Cabo Verde",altnames={"Cape Verde"}},
["CW"] = {alpha3="CUW",numeric="531",name="Curaçao",altnames={"Curacao"}},
["CX"] = {alpha3="CXR",numeric="162",name="Christmas Island"},
["CY"] = {alpha3="CYP",numeric="196",name="Cyprus"},
["CZ"] = {alpha3="CZE",numeric="203",name="Czech Republic",isoname="Czechia"},
["DE"] = {alpha3="DEU",numeric="276",name="Germany"},
["DJ"] = {alpha3="DJI",numeric="262",name="Djibouti"},
["DK"] = {alpha3="DNK",numeric="208",name="Denmark"},
["DM"] = {alpha3="DMA",numeric="212",name="Dominica"},
["DO"] = {alpha3="DOM",numeric="214",name="Dominican Republic"},
["DZ"] = {alpha3="DZA",numeric="012",name="Algeria"},
["EC"] = {alpha3="ECU",numeric="218",name="Ecuador"},
["EE"] = {alpha3="EST",numeric="233",name="Estonia"},
["EG"] = {alpha3="EGY",numeric="818",name="Egypt"},
["EH"] = {alpha3="ESH",numeric="732",name="Western Sahara"},
["ER"] = {alpha3="ERI",numeric="232",name="Eritrea"},
["ES"] = {alpha3="ESP",numeric="724",name="Spain"},
["ET"] = {alpha3="ETH",numeric="231",name="Ethiopia"},
["FI"] = {alpha3="FIN",numeric="246",name="Finland"},
["FJ"] = {alpha3="FJI",numeric="242",name="Fiji"},
["FK"] = {alpha3="FLK",numeric="238",name="Falkland Islands",isoname="Falkland Islands (Malvinas)",altnames={"Falklands","Islas Malvinas","Malvinas","Malvinas Islands"}},
["FM"] = {alpha3="FSM",numeric="583",name="Federated States of Micronesia",isoname="Micronesia (Federated States of)",altnames={"Micronesia"}},
["FO"] = {alpha3="FRO",numeric="234",name="Faroe Islands",altnames={"Faroer","Faeroer"}},
["FR"] = {alpha3="FRA",numeric="250",name="France"},
["GA"] = {alpha3="GAB",numeric="266",name="Gabon"},
["GB"] = {alpha3="GBR",numeric="826",name="United Kingdom",isoname="United Kingdom of Great Britain and Northern Ireland",altnames={"UK","Great Britain"}},
["GB-ENG"] = {alpha3="ENG",numeric="000",name="England"}, --Considered to be a country
["GB-NIR"] = {alpha3="NIR",numeric="000",name="Northern Ireland"}, --Considered to be a country
["GB-SCT"] = {alpha3="SCT",numeric="000",name="Scotland"}, --Considered to be a country
["GB-WLS"] = {alpha3="WLS",numeric="000",name="Wales"}, --Considered to be a country
["GB-EAW"] = {alpha3="EAW",numeric="000",name="England and Wales"}, --Considered to be a country
["GD"] = {alpha3="GRD",numeric="308",name="Grenada"},
["GE"] = {alpha3="GEO",numeric="268",name="Georgia"},
["GF"] = {alpha3="GUF",numeric="254",name="French Guiana"},
["GG"] = {alpha3="GGY",numeric="831",name="Guernsey"},
["GH"] = {alpha3="GHA",numeric="288",name="Ghana"},
["GI"] = {alpha3="GIB",numeric="292",name="Gibraltar"},
["GL"] = {alpha3="GRL",numeric="304",name="Greenland"},
["GM"] = {alpha3="GMB",numeric="270",name="Gambia"},
["GN"] = {alpha3="GIN",numeric="324",name="Guinea"},
["GP"] = {alpha3="GLP",numeric="312",name="Guadeloupe"},
["GQ"] = {alpha3="GNQ",numeric="226",name="Equatorial Guinea"},
["GR"] = {alpha3="GRC",numeric="300",name="Greece"},
["GS"] = {alpha3="SGS",numeric="239",name="South Georgia and the South Sandwich Islands"},
["GT"] = {alpha3="GTM",numeric="320",name="Guatemala"},
["GU"] = {alpha3="GUM",numeric="316",name="Guam"},
["GW"] = {alpha3="GNB",numeric="624",name="Guinea-Bissau"},
["GY"] = {alpha3="GUY",numeric="328",name="Guyana"},
["HK"] = {alpha3="HKG",numeric="344",name="Hong Kong",altnames={"Hong Kong SAR","HKSAR"}},
["HM"] = {alpha3="HMD",numeric="334",name="Heard Island and McDonald Islands",altnames={"Heard and McDonald Islands"}},
["HN"] = {alpha3="HND",numeric="340",name="Honduras"},
["HR"] = {alpha3="HRV",numeric="191",name="Croatia"},
["HT"] = {alpha3="HTI",numeric="332",name="Haiti"},
["HU"] = {alpha3="HUN",numeric="348",name="Hungary"},
["ID"] = {alpha3="IDN",numeric="360",name="Indonesia"},
["IE"] = {alpha3="IRL",numeric="372",name="Ireland",altnames={"Republic of Ireland"}},
["IL"] = {alpha3="ISR",numeric="376",name="Israel"},
["IM"] = {alpha3="IMN",numeric="833",name="Isle of Man"},
["IN"] = {alpha3="IND",numeric="356",name="India"},
["IO"] = {alpha3="IOT",numeric="086",name="British Indian Ocean Territory"},
["IQ"] = {alpha3="IRQ",numeric="368",name="Iraq"},
["IR"] = {alpha3="IRN",numeric="364",name="Iran",isoname="Iran (Islamic Republic of)"},
["IS"] = {alpha3="ISL",numeric="352",name="Iceland"},
["IT"] = {alpha3="ITA",numeric="380",name="Italy"},
["JE"] = {alpha3="JEY",numeric="832",name="Jersey"},
["JM"] = {alpha3="JAM",numeric="388",name="Jamaica"},
["JO"] = {alpha3="JOR",numeric="400",name="Jordan"},
["JP"] = {alpha3="JPN",numeric="392",name="Japan"},
["KE"] = {alpha3="KEN",numeric="404",name="Kenya"},
["KG"] = {alpha3="KGZ",numeric="417",name="Kyrgyzstan"},
["KH"] = {alpha3="KHM",numeric="116",name="Cambodia"},
["KI"] = {alpha3="KIR",numeric="296",name="Kiribati"},
["KM"] = {alpha3="COM",numeric="174",name="Comoros"},
["KN"] = {alpha3="KNA",numeric="659",name="Saint Kitts and Nevis",altnames={"St Kitts and Nevis"}},
["KP"] = {alpha3="PRK",numeric="408",name="North Korea",isoname="Korea (Democratic People's Republic of)",altnames={"Democratic People's Republic of Korea"}},
["KR"] = {alpha3="KOR",numeric="410",name="South Korea",isoname="Korea, Republic of",altnames={"Republic of Korea"}},
["KW"] = {alpha3="KWT",numeric="414",name="Kuwait"},
["KY"] = {alpha3="CYM",numeric="136",name="Cayman Islands"},
["KZ"] = {alpha3="KAZ",numeric="398",name="Kazakhstan"},
["LA"] = {alpha3="LAO",numeric="418",name="Laos",isoname="Lao People's Democratic Republic"},
["LB"] = {alpha3="LBN",numeric="422",name="Lebanon"},
["LC"] = {alpha3="LCA",numeric="662",name="Saint Lucia",altnames={"St Lucia"}},
["LI"] = {alpha3="LIE",numeric="438",name="Liechtenstein"},
["LK"] = {alpha3="LKA",numeric="144",name="Sri Lanka"},
["LR"] = {alpha3="LBR",numeric="430",name="Liberia"},
["LS"] = {alpha3="LSO",numeric="426",name="Lesotho"},
["LT"] = {alpha3="LTU",numeric="440",name="Lithuania"},
["LU"] = {alpha3="LUX",numeric="442",name="Luxembourg"},
["LV"] = {alpha3="LVA",numeric="428",name="Latvia"},
["LY"] = {alpha3="LBY",numeric="434",name="Libya"},
["MA"] = {alpha3="MAR",numeric="504",name="Morocco"},
["MC"] = {alpha3="MCO",numeric="492",name="Monaco"},
["MD"] = {alpha3="MDA",numeric="498",name="Moldova",isoname="Moldova, Republic of"},
["ME"] = {alpha3="MNE",numeric="499",name="Montenegro"},
["MF"] = {alpha3="MAF",numeric="663",name="Saint-Martin",isoname="Saint Martin (French part)",altnames={"St Martin","St Martin (French part)","Collectivity of Saint Martin","Collectivity of St Martin"}},
["MG"] = {alpha3="MDG",numeric="450",name="Madagascar"},
["MH"] = {alpha3="MHL",numeric="584",name="Marshall Islands"},
["MK"] = {alpha3="MKD",numeric="807",name="North Macedonia",altnames={"Republic of North Macedonia","Macedonia","Republic of Macedonia","Macedonia, the former Yugoslav Republic of"}},
["ML"] = {alpha3="MLI",numeric="466",name="Mali"},
["MM"] = {alpha3="MMR",numeric="104",name="Myanmar",altnames={"Burma"}},
["MN"] = {alpha3="MNG",numeric="496",name="Mongolia"},
["MO"] = {alpha3="MAC",numeric="446",name="Macau",isoname="Macao",altnames={"Macau SAR","Macao SAR"}},
["MP"] = {alpha3="MNP",numeric="580",name="Northern Mariana Islands"},
["MQ"] = {alpha3="MTQ",numeric="474",name="Martinique"},
["MR"] = {alpha3="MRT",numeric="478",name="Mauritania"},
["MS"] = {alpha3="MSR",numeric="500",name="Montserrat"},
["MT"] = {alpha3="MLT",numeric="470",name="Malta"},
["MU"] = {alpha3="MUS",numeric="480",name="Mauritius"},
["MV"] = {alpha3="MDV",numeric="462",name="Maldives"},
["MW"] = {alpha3="MWI",numeric="454",name="Malawi"},
["MX"] = {alpha3="MEX",numeric="484",name="Mexico"},
["MY"] = {alpha3="MYS",numeric="458",name="Malaysia"},
["MZ"] = {alpha3="MOZ",numeric="508",name="Mozambique"},
["NA"] = {alpha3="NAM",numeric="516",name="Namibia"},
["NC"] = {alpha3="NCL",numeric="540",name="New Caledonia"},
["NE"] = {alpha3="NER",numeric="562",name="Niger"},
["NF"] = {alpha3="NFK",numeric="574",name="Norfolk Island"},
["NG"] = {alpha3="NGA",numeric="566",name="Nigeria"},
["NI"] = {alpha3="NIC",numeric="558",name="Nicaragua"},
["NL"] = {alpha3="NLD",numeric="528",name="Netherlands"},
["NO"] = {alpha3="NOR",numeric="578",name="Norway"},
["NP"] = {alpha3="NPL",numeric="524",name="Nepal"},
["NR"] = {alpha3="NRU",numeric="520",name="Nauru"},
["NU"] = {alpha3="NIU",numeric="570",name="Niue"},
["NZ"] = {alpha3="NZL",numeric="554",name="New Zealand",altnames={"Aotearoa"}},
["OM"] = {alpha3="OMN",numeric="512",name="Oman"},
["PA"] = {alpha3="PAN",numeric="591",name="Panama"},
["PE"] = {alpha3="PER",numeric="604",name="Peru"},
["PF"] = {alpha3="PYF",numeric="258",name="French Polynesia"},
["PG"] = {alpha3="PNG",numeric="598",name="Papua New Guinea"},
["PH"] = {alpha3="PHL",numeric="608",name="Philippines"},
["PK"] = {alpha3="PAK",numeric="586",name="Pakistan"},
["PL"] = {alpha3="POL",numeric="616",name="Poland"},
["PM"] = {alpha3="SPM",numeric="666",name="Saint Pierre and Miquelon",altnames={"St Pierre and Miquelon"}},
["PN"] = {alpha3="PCN",numeric="612",name="Pitcairn"},
["PR"] = {alpha3="PRI",numeric="630",name="Puerto Rico"},
["PS"] = {alpha3="PSE",numeric="275",name="Palestine",isoname="Palestine, State of",altnames={"State of Palestine"}},
["PT"] = {alpha3="PRT",numeric="620",name="Portugal"},
["PW"] = {alpha3="PLW",numeric="585",name="Palau"},
["PY"] = {alpha3="PRY",numeric="600",name="Paraguay"},
["QA"] = {alpha3="QAT",numeric="634",name="Qatar"},
["RE"] = {alpha3="REU",numeric="638",name="Réunion"},
["RO"] = {alpha3="ROU",numeric="642",name="Romania"},
["RS"] = {alpha3="SRB",numeric="688",name="Serbia"},
["RU"] = {alpha3="RUS",numeric="643",name="Russia",isoname="Russian Federation"},
["RW"] = {alpha3="RWA",numeric="646",name="Rwanda"},
["SA"] = {alpha3="SAU",numeric="682",name="Saudi Arabia"},
["SB"] = {alpha3="SLB",numeric="090",name="Solomon Islands"},
["SC"] = {alpha3="SYC",numeric="690",name="Seychelles"},
["SD"] = {alpha3="SDN",numeric="729",name="Sudan"},
["SE"] = {alpha3="SWE",numeric="752",name="Sweden"},
["SG"] = {alpha3="SGP",numeric="702",name="Singapore"},
["SH"] = {alpha3="SHN",numeric="654",name="Saint Helena, Ascension and Tristan da Cunha"},
["SI"] = {alpha3="SVN",numeric="705",name="Slovenia"},
["SJ"] = {alpha3="SJM",numeric="744",name="Svalbard and Jan Mayen"},
["SK"] = {alpha3="SVK",numeric="703",name="Slovakia"},
["SL"] = {alpha3="SLE",numeric="694",name="Sierra Leone"},
["SM"] = {alpha3="SMR",numeric="674",name="San Marino"},
["SN"] = {alpha3="SEN",numeric="686",name="Senegal"},
["SO"] = {alpha3="SOM",numeric="706",name="Somalia"},
["SR"] = {alpha3="SUR",numeric="740",name="Suriname"},
["SS"] = {alpha3="SSD",numeric="728",name="South Sudan"},
["ST"] = {alpha3="STP",numeric="678",name="São Tomé and Príncipe",isoname="Sao Tome and Principe",altnames={"Democratic Republic of Sao Tome and Principe"}},
["SV"] = {alpha3="SLV",numeric="222",name="El Salvador"},
["SX"] = {alpha3="SXM",numeric="534",name="Sint Maarten",isoname="Sint Maarten (Dutch part)",altnames={"St Maarten","Saint Martin (Dutch part)","St Martin (Dutch part)"}},
["SY"] = {alpha3="SYR",numeric="760",name="Syria",isoname="Syrian Arab Republic"},
["SZ"] = {alpha3="SWZ",numeric="748",name="Eswatini",altnames={"Swaziland"}},
["TC"] = {alpha3="TCA",numeric="796",name="Turks and Caicos Islands"},
["TD"] = {alpha3="TCD",numeric="148",name="Chad"},
["TF"] = {alpha3="ATF",numeric="260",name="French Southern and Antarctic Lands",isoname="French Southern Territories"},
["TG"] = {alpha3="TGO",numeric="768",name="Togo"},
["TH"] = {alpha3="THA",numeric="764",name="Thailand"},
["TJ"] = {alpha3="TJK",numeric="762",name="Tajikistan"},
["TK"] = {alpha3="TKL",numeric="772",name="Tokelau"},
["TL"] = {alpha3="TLS",numeric="626",name="Timor-Leste",altnames={"East Timor"}},
["TM"] = {alpha3="TKM",numeric="795",name="Turkmenistan"},
["TN"] = {alpha3="TUN",numeric="788",name="Tunisia"},
["TO"] = {alpha3="TON",numeric="776",name="Tonga"},
["TR"] = {alpha3="TUR",numeric="792",name="Turkey",isoname="Türkiye"},
["TT"] = {alpha3="TTO",numeric="780",name="Trinidad and Tobago"},
["TV"] = {alpha3="TUV",numeric="798",name="Tuvalu"},
["TW"] = {alpha3="TWN",numeric="158",name="Taiwan",isoname="Taiwan, Province of China",altnames={"Republic of China"}},
["TZ"] = {alpha3="TZA",numeric="834",name="Tanzania",isoname="Tanzania, United Republic of"},
["UA"] = {alpha3="UKR",numeric="804",name="Ukraine"},
["UG"] = {alpha3="UGA",numeric="800",name="Uganda"},
["UM"] = {alpha3="UMI",numeric="581",name="United States Minor Outlying Islands"},
["US"] = {alpha3="USA",numeric="840",name="United States",isoname="United States of America",altnames={"US","USA","U.S."}},
["UY"] = {alpha3="URY",numeric="858",name="Uruguay"},
["UZ"] = {alpha3="UZB",numeric="860",name="Uzbekistan"},
["VA"] = {alpha3="VAT",numeric="336",name="Vatican City",isoname="Holy See",altnames={"Holy See (Vatican City State)","Vatican City State"}},
["VC"] = {alpha3="VCT",numeric="670",name="Saint Vincent and the Grenadines",altnames={"St Vincent and the Grenadines"}},
["VE"] = {alpha3="VEN",numeric="862",name="Venezuela",isoname="Venezuela (Bolivarian Republic of)"},
["VG"] = {alpha3="VGB",numeric="092",name="British Virgin Islands",isoname="Virgin Islands (British)",altnames={"UK Virgin Islands","BVI"}},
["VI"] = {alpha3="VIR",numeric="850",name="United States Virgin Islands",isoname="Virgin Islands (U.S.)",altnames={"US Virgin Islands","USVI"}},
["VN"] = {alpha3="VNM",numeric="704",name="Vietnam",isoname="Viet Nam"},
["VU"] = {alpha3="VUT",numeric="548",name="Vanuatu"},
["WF"] = {alpha3="WLF",numeric="876",name="Wallis and Futuna"},
["WS"] = {alpha3="WSM",numeric="882",name="Samoa"},
["YE"] = {alpha3="YEM",numeric="887",name="Yemen"},
["YT"] = {alpha3="MYT",numeric="175",name="Mayotte"},
["ZA"] = {alpha3="ZAF",numeric="710",name="South Africa"},
["ZM"] = {alpha3="ZMB",numeric="894",name="Zambia"},
["ZW"] = {alpha3="ZWE",numeric="716",name="Zimbabwe"}
}
1ae753fe1fa53ce062b0a008dbc9778d589666f0
Template:Hidden begin
10
231
469
468
2023-09-14T01:15:14Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
<includeonly><templatestyles src="Template:Hidden begin/styles.css"/><div class="hidden-begin mw-collapsible {{#ifeq:{{{showhide|{{{toggle}}}}}}|left|mw-collapsible-leftside-toggle}} {{#if:{{{expanded|}}}||mw-collapsed}} {{{class|}}}" style="{{#if:{{{width|}}}|width:{{{width}}};}} {{#if:{{{border|}}}|border:{{{border}}};}} {{#if:{{{bgcolor|}}}|background-color:{{{bgcolor}}};}} {{{style|}}}"><!--
--><div class="hidden-title" style="{{#if:{{{ta1|}}}|text-align:{{{ta1}}};}} {{#if:{{{titlebgcolor|}}}|background-color:{{{titlebgcolor}}};}} {{{titlestyle|}}}">{{{title|{{{header|}}}}}}</div><!--
--><div class="hidden-content mw-collapsible-content" style="{{#if:{{{ta2|}}}|text-align:{{{ta2}}};}} {{#if:{{{contentbgcolor|}}}|background-color:{{{contentbgcolor}}};}} {{{contentstyle|{{{bodystyle|}}}}}}"><!--
Content added after the template
--></includeonly><noinclude>
{{Documentation}}
</noinclude>
be0f4e092203b931810fbff9ed6a1b7af51c025f
Template:Hidden end
10
232
471
470
2023-09-14T01:15:15Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
<includeonly></div></div></includeonly><noinclude>
{{hatnote|Templates {{noredirect|Template:End hidden|End hidden}} and {{noredirect|Template:End hidden section|End hidden section}} redirect here.}}
{{Documentation|Template:Hidden begin/doc}}
</noinclude>
6cc7eb4776ef10092d5f7d48da123117e7b430b2
Template:Convinfobox
10
233
473
472
2023-09-14T01:15:15Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{Convinfobox/{{#if:{{{1|}}}|pri}}{{#if:{{{3|}}}|sec}}{{#if:{{{6|}}}|{{#if:{{{5|}}}|ter}}3|2}}|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5|}}}|{{{6|}}}|{{{7|}}}|sp={{{sp|}}}|lk={{{lk|off}}}|abbr={{{abbr|on}}}|disp={{{disp|}}}|adj={{{adj|}}}|sigfig={{{sigfig|}}}}}<noinclude>{{documentation}}</noinclude>
dd1f683285c4b5ba7197ff1275954bd1592ad76a
Template:Convinfobox/pri2
10
234
475
474
2023-09-14T01:15:15Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
<includeonly>{{convert|{{{1}}}|{{{2}}}|{{{4}}}|{{{5|}}}|sp={{{sp|}}}|lk={{{lk|off}}}|abbr={{{abbr|on}}}|disp={{{disp|}}}|adj={{{adj|}}}|sigfig={{{sigfig|}}}}}</includeonly><noinclude>
[[Category:Subtemplates of Template Convinfobox]]
</noinclude>
4f7541f33c39c2bce052ff78783cf168d9b310b2
Template:Convinfobox/prisec2
10
235
477
476
2023-09-14T01:15:16Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
#REDIRECT [[Template:Convinfobox/pri2]]<!--{{convert/{{{2}}}|{{{1}}}|{{{3}}}|{{{4}}}|d=valunit2/{{{d}}}}}<noinclude>
[[Category:Subtemplates of Template Convinfobox]]
</noinclude>-->
b2680a6b956cc0cd7c35c6ea3085e03944317fb9
Template:Native name
10
239
485
484
2023-09-14T01:15:17Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
<includeonly>{{#invoke:native name|native_name}}</includeonly><noinclude>{{Documentation}}</noinclude>
8ef2e413bdb984b6a4b78857616db695b6658203
Module:Native name
828
240
487
486
2023-09-14T01:15:18Z
Ilovethehitgameomori
2
1 revision imported
Scribunto
text/plain
require('strict');
local getArgs = require ('Module:Arguments').getArgs;
local lang_module = require ('Module:Lang');
local yes_no = require('Module:Yesno')
local defined_values = {
italic = {['no']='no', ['off']='no'}, -- values accepted by |italic= and |italics=; {{lang}} expects 'no' so 'off' must be translated
paren = {['no']=true, ['off']=true, ['omit']=true}, -- values accepted by |paren=
}
local messages_t = {
tag_required = 'an IETF language tag as parameter {{{1}}} is required', -- for {{native name}}
name_required = 'a name as parameter {{{2}}} is required',
tag_required_idx = 'an IETF language tag in |tag%s= is required', -- for {{native name}} when called from {{native name list}}
name_required_idx = 'a name in |name%s= is required',
empty_list = 'list is empty', -- for {{native name list}}
positional = 'positional parameters not supported',
br_list = '<br /> lists not allowed', -- for {{native name checker}}
list_markup = 'list markup expected for multiple names',
malformed_param = 'parameter value is malformed',
}
local help_links_t = {
['native name'] = '[[Template:Native name|help]]',
['native name checker'] = '[[Template:Native name checker|help]]',
['native name list'] = '[[Template:Native name list|help]]',
}
local error_cats_t = {
['native name'] = '[[Category:Native name template errors]]',
['native name checker'] = '[[Category:Native name checker template errors]]',
['native name list'] = '[[Category:Native name list template errors]]',
}
--[[--------------------------< E R R O R _ M S G >------------------------------------------------------------
returns a formatted error message
]]
local function error_msg (msg, template, index)
local cat = ((0 == mw.title.getCurrentTitle().namespace) and error_cats_t[template]) or '';
if index then
local message = string.format (msg, index);
return string.format ('<span style="color:#d33">Error {{%s}}: %s (%s)</span>%s', template, message, help_links_t[template], cat)
end
return string.format ('<span style="color:#d33">Error {{%s}}: %s (%s)</span>%s', template, msg, help_links_t[template], cat)
end
--[=[-------------------------< _ N A T I V E _ N A M E >------------------------------------------------------
implements {{native name}}; entry point from a module
<args_t> is a table of parameter name/value pairs. Parameters that are supported are:
args_t[1] - IETF language tag (required)
args_t[2] - the native name (required)
args_t.italic - accepts string values 'no' or 'off'; {{lang}} expects 'no' so 'off' must be translated
args_t.italics - alias of |italic=
args_t.paren - accepts 'omit', 'off', or 'no'
args_t.icon - alias of paren
args_t.parensize -
args_t.fontsize - deprecated alias of |parensize=
args_t.nolink - any value inhibits wikilinking of language name
args_t.suppress_empty_list_error - when set to 'yes', suppresses an 'empty' error message; mostly for use within another template
this function calls these functions in Module:lang:
_is_ietf_tag
_lang
_name_from_tag
TODO:
add support for romanization and transliteration?
add support for postfix so that 'mis' can render something like this:
{{native|name|mis|Chotilapacquen|parent=omit|postfix= ([[Coahuiltecan languages|Coahuiltecan]])}}
Chotilapacquen (Coahuiltecan)
]=]
local function _native_name (args_t)
local template = (args_t.template and args_t.template) or 'native name'; -- for error messaging; use 'native name list' when called from native_name_list(), etc
if not (args_t[1] or args_t[2]) and yes_no (args_t.suppress_empty_list_error) then
return ''; -- if empty list error is suppressed, return empty string
elseif not args_t[1] then
return error_msg ((args_t.index and messages_t.tag_required_idx) or messages_t.tag_required, template, args_t.index)
elseif not args_t[2] then
return error_msg ((args_t.index and messages_t.name_required_idx) or messages_t.name_required, template, args_t.index)
end
args_t.italic = args_t.italics or args_t.italic; -- plural form first in {{native name}} but singular form for {{lang}}
args_t.italic = defined_values.italic[args_t.italic] or nil; -- translate assigned value
args_t.italics = nil; -- so unset as unneeded
args_t.paren = args_t.paren or args_t.icon;
args_t.icon = nil; -- unset as unneeded
args_t.parensize = args_t.parensize or args_t.fontsize or '100%';
args_t.fontsize = nil; -- unset as unneeded
local out_t = {};
table.insert (out_t, lang_module._lang ({args_t[1], args_t[2], ['italic']=args_t.italic, ['template']=template}));
if not defined_values.paren[args_t.paren] then
table.insert (out_t, ' ');
table.insert (out_t, table.concat ({
'<span class="languageicon" style="font-size:',
args_t.parensize,
'; font-weight:normal">'}));
if args_t.nolink then
table.insert (out_t, table.concat ({'(', lang_module._name_from_tag ({args_t[1], ['template']=template}), ')'}));
else
if lang_module._is_ietf_tag (args_t[1]) then
table.insert (out_t, table.concat ({'(', lang_module._name_from_tag ({args_t[1], ['link'] ='yes', ['template']=template}), ')'}));
else
table.insert (out_t, '(language?)'); -- TODO: any reason to keep this?
end
end
table.insert (out_t, '</span>');
end
return table.concat (out_t);
end
--[[--------------------------< N A T I V E _ N A M E >--------------------------------------------------------
implements {{native name}}; entry point from the template
{{#invoke:native name|native_name|<tag>|<name>|italic=|paren=|parensize=|nolink=}}
]]
local function native_name (frame)
return _native_name (getArgs (frame));
end
--[[--------------------------> _ N A T I V E _ N A M E _ L I S T >--------------------------------------------
implements {{native name}}; entry point from a module
<args_t> is a table of parameter name/value pairs. Supports enumerated forms of the {{native name}} parameters:
args_t.tagn - IETF language tag (|tag1= required)
args_t.namen - the native name (|name1= required)
args_t.italicn - accepts string values 'no' or 'off'
args_t.italicsn - alias of |italicn=
args_t.parenn - accepts 'omit', 'off', or 'no'
args_t.iconn - alias of paren
args_t.parensizen -
args_t.fontsizen - deprecated alias of |parensizen=
args_t.nolinkn - any value inhibits wikilinking of language name
also supports:
args_t.postfixn - wikitext to be appended to list item n (references other appropriate text)
args_t.suppress_empty_list_error - when set to 'yes', suppresses an 'empty list' error message; mostly for use within another template
]]
local function _native_name_list (args_t)
if args_t[1] then
return error_msg (messages_t.positional, 'native name list')
end
local unsorted_enumerators_t = {} -- unsorted k/v table of tagn and namen enumerators where k is the enumerator and v is always true
for param, _ in pairs (args_t) do -- loop through all parameters
local enumerator = mw.ustring.match (param, "^tag(%d+)$") -- is this a |tagn= parameter? extract enumerator if present
if enumerator then -- if there is an enumerator
unsorted_enumerators_t[tonumber(enumerator)] = true -- add enumerator to the table
else
local name_match = mw.ustring.match (param, "^name(%d+)$") -- is this a |tagn= parameter? extract enumerator if present
if name_match then -- if there is an enumerator
unsorted_enumerators_t[tonumber (name_match)] = true -- add enumerator to the table
end
end
end
local enumerators_t = {} -- will hold a sorted sequence of enumerators
for n, _ in pairs (unsorted_enumerators_t) do -- loop through the k/v table of enumerators
table.insert (enumerators_t, n) -- add the enumerator to the sequence
end
table.sort (enumerators_t) -- and ascending sort
local list_t = {}; -- list of formatted native names goes here
for _, n in ipairs (enumerators_t) do -- loop through the sorted enumerators
table.insert (list_t, table.concat ({
_native_name ({ -- go render the native name
args_t['tag'..n],
args_t['name'..n],
['italic'] = args_t['italic'..n],
['italics'] = args_t['italics'..n],
['paren'] = args_t['paren'..n],
['icon'] = args_t['icon'..n],
['parensize'] = args_t['parensize'..n],
['fontsize'] = args_t['fontsize'..n],
['nolink'] = args_t['nolink'..n],
['template'] = 'native name list', -- for error messaging
['index'] = n, -- for error messaging
}),
args_t['postfix'..n] or '',
}));
end
if 0 == #list_t then
return (yes_no (args_t.suppress_empty_list_error) and '') or -- return empty string when error suppressed
error_msg (messages_t.empty_list, 'native name list'); -- otherwise error
elseif 1 == #list_t then
return list_t[1]; -- return the very short list; TODO: add error?
else
return require ('Module:List').unbulleted (list_t); -- use unbulleted list from module
end
end
--[[--------------------------< N A T I V E _ N A M E _ L I S T >----------------------------------------------
implements {{native name list}}; entry point from the template
{{#invoke:native name list|native_name_list|tag1=<tag>|name1=<name>|italic1=|paren1=|parensize1=|nolink1=}}
]]
local function native_name_list (frame)
return _native_name_list (getArgs (frame));
end
--[[--------------------------< _ N A T I V E _ N A M E _ C H E C K E R >--------------------------------------
entry point from a module
implements {{native name checker}}
for use inside infoboxen:
|dataxx = {{native name checker|{{{native_name|}}}}}
inspects rendered content of {{{native_name}}}:
expects: at least one lang="<valid IETF tag>" html attribute; tag must begin with 2 or three letters followed
by a hyphen or double quote character: lang="zh-Hant" or lang="nav" or lang="oj"
emits error message when 2 or more lang="<valid IETF tag>" html attribute but list markup <li> tag not found
emits error message if any form of '<br />' tag is found per MOS:NOBREAK
returns:
nothing when |native_name= is omitted or empty
assigned value when no error
error message on error
]]
local function _native_name_checker (args_t)
local value = args_t[1];
if not value then -- if |native_name= is omitted or empty
return; -- return nothing
end
local _, count = value:gsub ('lang="%a%a%a?[%-"]%a*', '%1');
if 0 == count then
return table.concat ({value, error_msg (messages_t.malformed_param, 'native name checker')}, ' '); -- no {{lang}} or {{native_name}} template
end
if 1 < count then
if not value:find ('<div class="plainlist *" *>') or not value:find ('</div>$') then -- must be wrapped in 'plainlist' div
return table.concat ({value, error_msg (messages_t.list_markup, 'native name checker')}, ' ');
end
end
if value:find ('< */? *[Bb][Rr] */? *>') then -- look for something that vaguely resembles a <br /> tag
return table.concat ({value, error_msg (messages_t.br_list, 'native name checker')}, ' ');
end
return value; -- no failed tests, return the value as is
end
--[[--------------------------< N A T I V E _ N A M E _ C H E C K E R >--------------------------------------
entry point from a module
implements {{native name checker}}
]]
local function native_name_checker (frame)
return _native_name_checker (getArgs (frame));
end
--[[--------------------------< E X P O R T S >----------------------------------------------------------------
]]
return {
native_name = native_name, -- template interface
native_name_list = native_name_list,
native_name_checker = native_name_checker,
_native_name = _native_name, -- other module interface
_native_name_list = _native_name_list,
_native_name_checker = _native_name_checker,
}
b58f845623d3e920e8098e96bd84a56d2d3079bb
Template:Hatnote
10
241
489
488
2023-09-14T01:15:18Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
<includeonly>{{#invoke:Hatnote|hatnote}}</includeonly><noinclude>
{{documentation}}
<!-- Categories go on the /doc subpage, and interwikis go on Wikidata. -->
</noinclude>
4a1d1028d07c9056022807a96051e1c82cf2a1c7
Template:Country data Austria
10
242
491
490
2023-09-14T01:15:18Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{ {{{1<noinclude>|country showdata</noinclude>}}}
| alias = Austria
| flag alias = Flag of Austria.svg
| flag alias-empire = Flag of the Habsburg Monarchy.svg
| flag alias-state = Flag of Austria (state).svg
| flag alias-1230 = Flag of Austria (1230–1934).svg
| flag alias-war = Austria-Hungary-flag-1869-1914-naval-1786-1869-merchant.svg
| flag alias-1934 = State flag of Austria (1934–1938).svg
| flag alias-1938 = Flag of Germany (1935–1945).svg
| flag alias-army = Flag of Austria (state).svg
| flag alias-air force = Flag of Austria (state).svg
| link alias-army = Austrian Land Forces
| flag alias-naval = Flag of Austria (state).svg
| link alias-naval = Austrian Navy
| link alias-air force = Austrian Air Force
| flag alias-navy = Flag of Austria (state).svg
| link alias-navy = Austrian Navy
| size = {{{size|}}}
| name = {{{name|}}}
| altlink = {{{altlink|}}}
| variant = {{{variant|}}}
<noinclude>
| var1 = empire
| var2 = state
| var3 = 1230
| var4 = war
| var5 = 1934
| var6 = 1938
| redir1 = AUT
| redir2 = Archduchy of Austria
| related1 = Austria-Hungary
</noinclude>
}}
09169aeb2e7aab99900a74b755f38a6af79d73a8
Template:Country data Croatia
10
243
493
492
2023-09-14T01:15:19Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{ {{{1<noinclude>|country showdata</noinclude>}}}
| alias = Croatia
| flag alias = Flag of Croatia.svg
| flag alias-civil = Civil Ensign of Croatia.svg
| flag alias-1990 = Flag of Croatia (1990).svg
| flag alias-naval = Naval ensign of Croatia.svg
| link alias-naval = Croatian Navy
| flag alias-air force = Flag of the Croatian Air Force.svg
| link alias-air force = Croatian Air Force
| link alias-military = Armed Forces of Croatia
| flag alias-army = Flag of Croatian Army.svg
| link alias-army = Croatian Army
| flag alias-navy = Naval ensign of Croatia.svg
| link alias-navy = Croatian Navy
| size = {{{size|}}}
| name = {{{name|}}}
| altlink = {{{altlink|}}}
| variant = {{{variant|}}}
<noinclude>
| var1 = civil
| var2 = 1990
| redir1 = HRV
| redir2 = CRO
| related1 = Independent State of Croatia
| related2 = SR Croatia
| related3 = PR Croatia
| related4 = Kingdom of Croatia (Habsburg)
</noinclude>
}}
b48856d8f7becf31f9935ba8fce138f3283dc4ea
Template:Country data France
10
244
495
494
2023-09-14T01:15:19Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{ {{{1<noinclude>|country showdata</noinclude>}}}
| alias = France
| flag alias = Flag of France.svg
| flag alias-1790 = Flag of France (1790–1794).svg
| flag alias-1794 = Flag of France (1794–1815, 1830–1958).svg
| flag alias-1814 = Flag of the Kingdom of France (1814-1830).svg
| flag alias-1830 = Flag of France (1794–1815, 1830–1958).svg
| flag alias-1848 = Drapeau france 1848.svg
| flag alias-1848a = Drapeau france 1848.svg
| flag alias-1848b = Flag of France (1794–1815, 1830–1958).svg
| flag alias-1974 = Flag of France (lighter variant).svg
| flag alias-naval = Civil and Naval Ensign of France.svg
| flag alias-naval-1790 = Flag of French-Navy-Revolution.svg
| flag alias-air force = Flag of France.svg
| link alias-air force = French Air and Space Force
| flag alias-coast guard = French Maritime Gendarmerie racing stripe.svg
| border-coast guard =
| link alias-coast guard = French Maritime Gendarmerie
| flag alias-army = Flag of France.svg
| link alias-army = French Army
| link alias-naval = French Navy
| flag alias-navy = Civil and Naval Ensign of France.svg
| link alias-navy = French Navy
| size = {{{size|}}}
| name = {{{name|}}}
| altlink = {{{altlink|}}}
| variant = {{{variant|}}}
<noinclude>
| var1 = 1790
| var2 = 1794
| var3 = 1814
| var4 = 1830
| var5 = 1848a
| var6 = 1848b
| var7 = 1974
| var8 = naval-1790
| redir1 = FRA
| related1 = Kingdom of France
| related2 = Free France
</noinclude>
}}
6489f5636282c8d82ad1b5a74115901b2a150efe
Template:Country data Germany
10
245
497
496
2023-09-14T01:15:19Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{safesubst<noinclude />: {{{1<noinclude>|country showdata</noinclude>}}}
| alias = Germany
| flag alias = Flag of Germany.svg
| flag alias-1866 = Flag of the German Empire.svg
| link alias-1866 = German Empire
| flag alias-empire = Flag of the German Empire.svg
| link alias-empire = German Empire
| flag alias-1919 = Flag of Germany (3-2 aspect ratio).svg
| link alias-1919 = Weimar Republic
| flag alias-Weimar = Flag of Germany (3-2 aspect ratio).svg
| link alias-Weimar = Weimar Republic
| flag alias-1933 = Flag of Germany (1933-1935).svg
| flag alias-1935 = Flag of Germany (1935–1945).svg
| link alias-1935 = Nazi Germany
| flag alias-Nazi = Flag of Germany (1935–1945).svg
| link alias-Nazi = Nazi Germany
| flag alias-1946 = Merchant flag of Germany (1946–1949).svg
| border-1946 =
| flag alias-1949 = Flag of Germany.svg
| flag alias-EUA = German Olympic flag (1959-1968).svg
| flag alias-gold = Flag of West Germany; Flag of Germany (1990–1996).svg
| flag alias-state = Flag of Germany (state).svg
| flag alias-naval = Naval Ensign of Germany.svg
| border-naval =
| link alias-naval = German Navy
| flag alias-coast guard=German Federal Coast Guard racing stripe.svg
| border-coast guard=
| link alias-coast guard=German Federal Coast Guard
| flag alias-army = Colour of Germany.svg
| flag alias-air force =Flag of Germany (state).svg
| link alias-air force = German Air Force
| link alias-army = German Army
| flag alias-navy = Naval Ensign of Germany.svg
| link alias-navy = German Navy
| border-navy =
| border-army=
| size = {{{size|}}}
| name = {{{name|}}}
| altlink = {{{altlink|}}}
| variant = {{{variant|}}}
<noinclude>
| var1 = 1866
| var2 = empire
| var3 = 1919
| var4 = Weimar
| var5 = 1933
| var6 = 1935
| var7 = Nazi
| var8 = 1946
| var9 = 1949
| var10 = EUA
| var11 = gold
| var12 = state
| redir1 = DEU
| redir2 = GER
| related1 = German Empire
| related2 = Weimar Republic
| related3 = Nazi Germany
| related4 = Allied-occupied Germany
| related5 = East Germany
| related6 = West Germany
</noinclude>
}}
f8c90307d21fdadc176f684f3fc1be65db23f569
Template:Country data Netherlands
10
246
499
498
2023-09-14T01:15:20Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{ {{{1<noinclude>|country showdata</noinclude>}}}
| alias = Netherlands
| flag alias = Flag of the Netherlands.svg
| flag alias-prinsengeus = Naval Jack of the Netherlands.svg
| flag alias-army =Flag of the Royal Netherlands Army.svg
| flag alias-air force=Flag of the Royal Netherlands Air Force.svg
| link alias-air force= Royal Netherlands Air Force
| link alias-army= Royal Netherlands Army
| link alias-naval = Royal Netherlands Navy
| flag alias-navy = Naval Jack of the Netherlands.svg
| link alias-navy=Royal Netherlands Navy
| flag alias-marines = Naval Jack of the Netherlands.svg
| link alias-marines = Netherlands Marine Corps
| size = {{{size|}}}
| name = {{{name|}}}
| altlink = {{{altlink|}}}
| variant = {{{variant|}}}
<noinclude>
| var1 = prinsengeus
| redir1 = NLD
| redir2 = NED
| redir3 = The Netherlands
| related1 = Kingdom of the Netherlands
| related2 = Dutch Republic
| related3 = Batavian Republic
</noinclude>
}}
1c723f169b6e9824c190beea044f0bdf8852db76
Template:Country data Spain
10
247
501
500
2023-09-14T01:15:20Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{ {{{1<noinclude>|country showdata</noinclude>}}}
| alias = Spain
| flag alias = Flag of Spain.svg
| flag alias-1506 = Flag of Cross of Burgundy.svg
| flag alias-1701 = Bandera de España 1701-1748.svg
| flag alias-1748 = Bandera de España 1748-1785.svg
| flag alias-1760 = Bandera de España 1760-1785.svg
| flag alias-1785 = Flag of Spain (1785–1873, 1875–1931).svg
| flag alias-1873 = Flag of the First Spanish Republic.svg
| flag alias-1874 = Flag of Spain (1785–1873, 1875–1931).svg
| flag alias-1931 = Flag of Spain (1931–1939).svg
| flag alias-civil-1931 = Flag of the Second Spanish Republic (plain).svg
| flag alias-1936 = Bandera del bando nacional 1936-1938.svg
| flag alias-1938 = Flag of Spain (1938–1945).svg
| flag alias-1945 = Flag of Spain (1945–1977).svg
| flag alias-1977 = Flag of Spain (1977–1981).svg
| flag alias-civil = Flag of Spain (Civil).svg
| flag alias-civil-1785 = BandMercante1785.svg
| flag alias-navy = Flag of Spain.svg
| link alias-navy = Spanish Navy
| flag alias-marines = Flag of Spain.svg
| link alias-marines = Spanish Marine Infantry
| flag alias-army = Flag of Spain.svg
| link alias-army = Spanish Army
| flag alias-naval = Naval Jack of Spain.svg
| link alias-naval = Spanish Navy
| flag alias-air force = Flag of Spain.svg
| link alias-air force = Spanish Air and Space Force
| size = {{{size|}}}
| name = {{{name|}}}
| altlink = {{{altlink|}}}
| variant = {{{variant|}}}
<noinclude>
| var1 = 1506
| var2 = 1701
| var3 = 1748
| var4 = 1760
| var5 = 1785
| var6 = 1873
| var7 = 1874
| var8 = 1931
| var9 = civil-1931
| var10 = 1936
| var11 = 1938
| var12 = 1945
| var13 = 1977
| var14 = civil
| var15 = civil-1785
| redir1 = ESP
| redir2 = SPA
| related1 = Spanish Empire
| related2 = Kingdom of Spain
| related3 = Spanish Republic
| related4 = Spanish State
| related5 = Francoist Spain
</noinclude>
}}
a27e5d2bc6539467e8a94c500b05f5caf7b87dff
Template:Country data Sweden
10
248
503
502
2023-09-14T01:15:20Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{ {{{1<noinclude>|country showdata</noinclude>}}}
| alias = Sweden
| flag alias = Flag of Sweden.svg
| flag alias-army = Naval Ensign of Sweden.svg
| flag alias-air force =Naval Ensign of Sweden.svg
| flag alias-1818 = Swedish and Norwegian merchant flag 1818-1844.svg
| flag alias-1844 = Swedish civil ensign (1844–1905).svg
| flag alias-1905 = Flag of Sweden (pre-1906).svg
| flag alias-naval = Naval Ensign of Sweden.svg
| flag alias-naval-1844 = Naval Ensign of Sweden (1844-1905).svg
| flag alias-naval-1815 = Swedish and Norwegian naval ensign (1815-1844).svg
| link alias-army = Swedish Army
| link alias-air force = Swedish Air Force
| link alias-naval = Swedish Navy
| flag alias-navy = Naval Ensign of Sweden.svg
| link alias-navy = Swedish Navy
| border-army =
| border-air force =
| border-naval =
| border-navy =
| border-naval-1815 =
| border-naval-1844 =
| size = {{{size|}}}
| name = {{{name|}}}
| altlink = {{{altlink|}}}
| altvar = {{{altvar|}}}
| variant = {{{variant|}}}
<noinclude>
| var1 = 1818
| var2 = 1844
| var3 = 1905
| var4 = naval-1844
| var5 = naval-1815
| redir1 = SWE
</noinclude>
}}
046def916df87772775106a1b2c5cc5e1590e529
Template:Str left
10
249
505
504
2023-09-14T01:15:21Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
<includeonly>{{safesubst:padleft:|{{{2|1}}}|{{{1}}}}}</includeonly><noinclude>
{{documentation}}
<!-- Categories go on the /doc subpage, and interwikis go on Wikidata. -->
</noinclude>
2048b0d7b35e156528655b1d090e8b5ffab3f400
Template:Country data European Union
10
250
507
506
2023-09-14T01:15:21Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{ {{{1<noinclude>|country showdata</noinclude>}}}
| alias = European Union
| flag alias = Flag of Europe.svg
| size = {{{size|}}}
| name = {{{name|}}}
<noinclude>
| redir1 = EU
| related1 = Europe
</noinclude>
}}
a0a90732df569849342cb7fb84f87ad11d803cb7
Template:Country data Italy
10
251
509
508
2023-09-14T01:15:22Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{ {{{1<noinclude>|country showdata</noinclude>}}}
| alias = Italy
| flag alias = Flag of Italy.svg
| flag alias-1861 = Flag of Italy (1861–1946).svg
| flag alias-1943 = War flag of the Italian Social Republic.svg
| flag alias-2003 = Flag of Italy (2003–2006).svg
| flag alias-civil = Civil Ensign of Italy.svg
| flag alias-naval = Naval Ensign of Italy.svg
| flag alias-navy-1947 = Naval Ensign of Italy (1947-2013).svg
| link alias-naval = Italian Navy
| link alias-air force = Italian Air Force
| link alias-army = Italian Army
| flag alias-navy = Naval Ensign of Italy.svg
| link alias-navy = Italian Navy
| link alias-roller hockey = Italy {{{mw}}} national roller hockey team
| size = {{{size|}}}
| name = {{{name|}}}
| variant = {{{variant|}}}
| altlink = {{{altlink|}}}
| altvar = {{{altvar|}}}
<noinclude>
| var1 = 1861
| var2 = 1943
| var4 = 2003
| var5 = civil
| var6 = navy-1947
| redir1 = ITA
| related1 = Kingdom of Italy
| related2 = Italian Social Republic
| related3 = Napoleonic Italy
</noinclude>
}}
305bf5a66b74b7211326d9326b28d66a836e8721
Template:Remove first word
10
252
511
510
2023-09-14T01:15:23Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{<includeonly>safesubst:</includeonly>#invoke:String|replace|source={{{1}}}|pattern=^[^{{{sep|%s}}}]*{{{sep|%s}}}*|replace=|plain=false}}<noinclude>{{Documentation}}</noinclude>
df7a9e692f68be1581be06af5f51eaed5483b4c8
Template:Country data Cyprus
10
253
513
512
2023-09-14T01:15:23Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{ {{{1<noinclude>|country showdata</noinclude>}}}
| alias = Cyprus
| flag alias = Flag of Cyprus.svg
| flag alias-1878 = Flag of the United Kingdom.svg
| flag alias-1881 = Flag of Cyprus (1881–1922).svg
| flag alias-colonial = Blue Ensign of Cyprus (1922).svg
| flag alias-April 1960 = Flag of Cyprus (1960).svg
| flag alias-1960 = Flag of Cyprus (1960–2006).svg
| link alias-army = Cypriot Ground Forces
| size = {{{size|}}}
| name = {{{name|}}}
| variant = {{{variant|}}}
| altlink = {{{altlink|}}}
<noinclude>
| redir1 = CYP
| var1 = 1878
| var2 = 1881
| var3 = colonial
| var4 = April 1960
| var5 = 1960
</noinclude>
}}
7480d14089e4230b22a47579a3da386902cc7bdd
Template:Collapse top
10
254
515
514
2023-09-14T01:15:24Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
<div style="margin-left:{{{indent|0}}}"><!-- NOTE: width renders incorrectly if added to main STYLE section -->
{| <!-- Template:Collapse top --> class="mw-collapsible mw-archivedtalk {{<includeonly>safesubst:</includeonly>#if:{{{expand|{{{collapse|}}}}}}||mw-collapsed}} {{{class|}}}" style="background: {{{bg1|transparent}}}; text-align: left; border: {{{border|1px}}} solid {{{b-color|Silver}}}; margin: 0.2em auto auto; width:{{<includeonly>safesubst:</includeonly>#if:{{{width|}}}|{{{width}}}|100%}}; clear: {{{clear|both}}}; padding: 1px;"
|-
! style="background: {{{bg|#{{main other|F0F2F5|CCFFCC}}}}}; font-size:87%; padding:0.2em 0.3em; text-align:{{<includeonly>safesubst:</includeonly>#if:{{{left|}}}|left|{{<includeonly>safesubst:</includeonly>#if:{{{align|}}}|left|center}}}}; {{<includeonly>safesubst:</includeonly>#if:{{{fc|}}}|color: {{{fc}}};|}}" | <div style="font-size:115%;{{<includeonly>safesubst:</includeonly>#if:{{{left|}}}||margin:0 4em}}">{{{1|{{{title|{{{reason|{{{header|{{{heading|{{{result|Extended content}}}}}}}}}}}}}}}}}}</div>
{{<includeonly>safesubst:</includeonly>#if:{{{warning|{{{2|}}}}}}
|{{<includeonly>safesubst:</includeonly>!}}-
{{<includeonly>safesubst:</includeonly>!}} style="text-align:center; font-style:italic;" {{<includeonly>safesubst:</includeonly>!}} {{{2|The following is a closed discussion. {{strongbad|Please do not modify it.}} }}} }}
|-
| style="border: solid {{{border2|1px Silver}}}; padding: {{{padding|0.6em}}}; background: {{{bg2|White}}};" {{<includeonly>safesubst:</includeonly>!}}<noinclude>
{{lorem ipsum|3}}
{{Collapse bottom}}
{{Documentation}}
</noinclude>
247cc43d5198baf8804d0926529cbbdd7be91113
Template:Collapse bottom
10
255
517
516
2023-09-14T01:15:24Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
<includeonly>|}</div></includeonly><noinclude>
{{Documentation|Template:Collapse top/doc}}
<!-- PLEASE ADD THIS TEMPLATE'S CATEGORIES AND INTERWIKIS TO THE /doc SUBPAGE, THANKS -->
</noinclude>
64b210e8ab0882b262da50e9fbccf2132bc34fab
Template:Native phrase
10
257
521
520
2023-09-14T01:15:25Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
#redirect [[Template:Native name]]
561f2c45647b28659d991f0a467779366e7ec49e
Template:Country data Portugal
10
258
523
522
2023-09-14T01:15:26Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{ {{{1<noinclude>|country showdata</noinclude>}}}
| alias = Portugal
| flag alias = Flag of Portugal.svg
| flag alias-1248 = PortugueseFlag1248.svg
| flag alias-1385 = PortugueseFlag1385.svg
| flag alias-1495 = Flag Portugal (1495).svg
| flag alias-1578 = Flag Portugal (1578).svg
| flag alias-1640 = Flag Portugal (1640).svg
| flag alias-1707 = Flag Portugal (1707).svg
| flag alias-1750 = Flag of Portugal (1750).svg
| flag alias-1816 = Flag of the United Kingdom of Portugal, Brazil, and the Algarves.svg
| flag alias-1830 = Flag Portugal (1830).svg
| flag alias-civil = Flag Portugal sea (1830).svg
| flag alias-air force=Portugal Air force fin flash.svg
| flag alias-army = Military flag of Portugal.svg
| link alias-air force = Portuguese Air Force
| link alias-army = Portuguese Army
| link alias-naval = Portuguese Navy
| flag alias-navy=Naval Jack of Portugal.svg
| link alias-navy = Portuguese Navy
| flag alias-marines=Naval Jack of Portugal.svg
| link alias-marines=Portuguese Marine Corps
| size = {{{size|}}}
| name = {{{name|}}}
| altlink = {{{altlink|}}}
| variant = {{{variant|}}}
<noinclude>
| var1 = 1248
| var2 = 1385
| var3 = 1495
| var4 = 1578
| var5 = 1640
| var6 = 1707
| var7 = 1750
| var8 = 1816
| var9 = 1830
| var13 = civil
| redir1 = PRT
| redir2 = POR
| related1 = Portuguese Empire
</noinclude>
}}
208ba0708db45e46bb27b8b9f46d8c0b7b4bb9ed
Template:Country data Belgium
10
259
525
524
2023-09-14T01:15:26Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{ {{{1<noinclude>|country showdata</noinclude>}}}
| alias = Belgium
| flag alias = Flag of Belgium (civil).svg <!-- Not the official flag of Belgium, but see talk page for objections to using the state flag as the default -->
| flag alias-government = Government Ensign of Belgium.svg
| flag alias-state = Flag of Belgium.svg<!-- The official flag of Belgium. See talk page for why it is not the default. -->
| flag alias-1830 = Flag of Belgium (1830).svg
| flag alias-1858 = Royal ensign of Belgium (1858).svg
| flag alias-army = Flag of the Belgian Land Component.svg
| link alias-army = Belgian Land Component
| flag alias-naval = Naval Ensign of Belgium.svg
| link alias-naval = Belgian Navy
| flag alias-air force = Air Force Ensign of Belgium.svg
| link alias-air force = Belgian Air Component
| flag alias-navy = Naval Ensign of Belgium.svg
| link alias-navy = Belgian Navy
| size = {{{size|}}}
| name = {{{name|}}}
| altlink = {{{altlink|}}}
| variant = {{{variant|}}}
<noinclude>
| var1 = state
| var2 = government
| var3 = 1830
| var4 = 1858
| redir1 = BEL
</noinclude>
}}
f0f17baf77dfb0ac61bc71743e2811ff99176a5e
Template:Country data Bulgaria
10
260
527
526
2023-09-14T01:15:26Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{ {{{1<noinclude>|country showdata</noinclude>}}}
| alias = Bulgaria
| flag alias = Flag of Bulgaria.svg
| flag alias-1878 = Flag of Bulgaria.svg
| flag alias-1947 = Flag of Bulgaria (1946–1948).svg
| flag alias-1948 = Flag of Bulgaria (1948–1967).svg
| flag alias-1967 = Flag of Bulgaria (1967-1971).svg
| flag alias-1971 = Flag of Bulgaria (1971–1990).svg
| flag alias-naval-1879 = Naval Ensign of Bulgaria (1878-1944).svg
| flag alias-naval-1949 = Naval Ensign of Bulgaria (1949-1955).svg
| flag alias-naval-1955 = Naval Ensign of Bulgaria (1955-1990).svg
| flag alias-naval-1991 = Naval Ensign of Bulgaria 1991-2005.svg
| flag alias-naval = Naval Ensign of Bulgaria.svg
| link alias-naval = Bulgarian Navy
| flag alias-army = War flag of Bulgaria.svg
| link alias-army = Bulgarian Land Forces
| link alias-air force = Bulgarian Air Force
| flag alias-navy = Naval Ensign of Bulgaria.svg
| link alias-navy = Bulgarian Navy
| size = {{{size|}}}
| name = {{{name|}}}
| altlink = {{{altlink|}}}
| variant = {{{variant|}}}
<noinclude>
| var1 = 1878
| var2 = 1947
| var3 = 1948
| var4 = 1967
| var5 = 1971
| var6 = naval-1879
| var7 = naval-1949
| var8 = naval-1955
| var9 = naval-1991
| redir1 = BGR
| redir2 = BUL
| related1 = Kingdom of Bulgaria
</noinclude>
}}
3c6d30533fdfb1975878aa79f5e7f467985c402e
Template:Country data Denmark
10
261
529
528
2023-09-14T01:15:27Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{ {{{1<noinclude>|country showdata</noinclude>}}}
| alias = Denmark
| flag alias = Flag of Denmark.svg
| flag alias-state = Flag of Denmark (state).svg
| border-state =
| flag alias-naval = Naval Ensign of Denmark.svg
| link alias-naval = Royal Danish Navy
| link alias-army = Royal Danish Army
| flag alias-army = Flag of Denmark (state).svg
| link alias-air force = Royal Danish Air Force
| flag alias-air force = Flag of Denmark (state).svg
| flag alias-navy = Naval Ensign of Denmark.svg
| link alias-navy = Royal Danish Navy
| border-army =
| border-air force =
| border-naval =
| border-navy =
| size = {{{size|}}}
| name = {{{name|}}}
| altlink = {{{altlink|}}}
| variant = {{{variant|}}}
<noinclude>
| var1 = state
| redir1 = DNK
| redir2 = DEN
| redir3 = Kingdom of Denmark
</noinclude>
}}
5598dd9004bbdd8ead3c89bfede63f7ca49a6169
Template:Country data Hungary
10
262
531
530
2023-09-14T01:15:28Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{ {{{1<noinclude>|country showdata</noinclude>}}}
| alias = Hungary
| flag alias = Flag of Hungary.svg
| flag alias-1848 = Flag of Hungary (1848-1849, 1867-1869).svg
| flag alias-1849 = Flag of the Habsburg Monarchy.svg
| flag alias-1867 = Flag of Hungary (1848-1849, 1867-1869).svg
| flag alias-1869 = Flag of Hungary (1869-1874).svg
| flag alias-1874 = Flag of Hungary (1874-1896).svg
| flag alias-1896 = Flag of Hungary (1896-1915; angels).svg
| flag alias-1915 = Flag of Hungary (1915-1918; angels).svg
| flag alias-1918 = Flag of Hungary (1918-1919).svg
| flag alias-1919 = Flag of Hungary (1919).svg
| flag alias-1920 = Flag of Hungary (1915-1918, 1919-1946).svg
| flag alias-1946 = Flag of Hungary (1946-1949, 1956-1957; 1-2 aspect ratio).svg
| flag alias-1949 = Flag of Hungary (1949-1956; 1-2 aspect ratio).svg
| flag alias-1956 = Flag of Hungary (1946-1949, 1956-1957; 1-2 aspect ratio).svg
| flag alias-1957 = Flag of Hungary.svg
| flag alias-state = Flag of Hungary with arms (state).svg
| flag alias-civil = Civil Ensign of Hungary.svg
| flag alias-naval = Naval Ensign of Hungary.svg
| link alias-naval = Hungarian Defence Forces
| flag alias-military = Flag of the Hungarian Defence Forces.svg
| link alias-military = Hungarian Defence Forces
| flag alias-army = War Flag of Hungary.svg
| link alias-army = Hungarian Ground Forces
| link alias-air force = Hungarian Air Force
| flag alias-navy = Naval Ensign of Hungary.svg
| link alias-navy = Hungarian Defence Forces
| size = {{{size|}}}
| name = {{{name|}}}
| altlink = {{{altlink|}}}
| variant = {{{variant|}}}
<noinclude>
| var1 = 1848
| var2 = 1849
| var3 = 1867
| var4 = 1869
| var5 = 1874
| var6 = 1896
| var7 = 1915
| var8 = 1918
| var9 = 1919
| var10 = 1920
| var11 = 1946
| var12 = 1949
| var13 = 1956
| var14 = 1957
| var15 = state
| var16 = civil
| redir1 = HUN
| related1 = Austria-Hungary
</noinclude>
}}
88752fd60055fe5e7639e859ebfe4a6950f9719f
Template:Country data Poland
10
263
533
532
2023-09-14T01:15:28Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{ {{{1<noinclude>|country showdata</noinclude>}}}
| alias = Poland
| flag alias = Flag of Poland.svg
| flag alias-state = Flag of Poland (with coat of arms).svg
| flag alias-1815 = Flag of the Congress of Poland.svg
| flag alias-1919 = Flag of Poland (1919-1928).svg
| flag alias-1928 = Flag of Poland (1928–1980).svg
| flag alias-1955 = Flag of Poland (with coat of arms, 1955-1980).svg
| flag alias-1980 = Flag of Poland (with coat of arms, 1980-1990).svg
| flag alias-1990 = Flag of Poland (with coat of arms).svg
| flag alias-naval = PL navy flag IIIRP.svg
| border-naval =
| flag alias-naval-1919 = Naval Ensign of IIRP v1.svg
| border-naval-1919 =
| flag alias-naval-1946 = Naval Ensign of PRL v1.svg
| border-naval-1946 =
| flag alias-naval-auxiliary = Flaga pomocniczych jednostek pływających Polskiej Marynarki Wojennej.svg
| flag alias-naval-auxiliary-1955 = POL Bandera pjp PRL v1.svg
| link alias-naval = Polish Navy
| flag alias-navy = Naval Ensign of Poland.svg
| border-navy =
| link alias-navy = Polish Navy
| flag alias-marines = Flag of the Polish Land Forces.svg
| border-marines =
| link alias-marines = Polish 7th Coastal Defense Brigade
| flag alias-air force = PL air force flag IIIRP.svg
| border-air force =
| link alias-air force = Polish Air Force
| flag alias-army = Flag of the Polish Land Forces.svg
| border-army =
| link alias-army = Polish Land Forces
| size = {{{size|}}}
| size flag alias-naval = 25px
| size flag alias-naval-1919 = 25px
| size flag alias-naval-1946 = 25px
| size flag alias-air force = 25px
| name = {{{name|}}}
| altlink = {{{altlink|}}}
| variant = {{{variant|}}}
<noinclude>
| var1 = state
| var2 = 1815
| var3 = 1919
| var4 = 1928
| var5 = 1955
| var6 = 1980
| var7 = 1990
| var10 = naval-1919
| var11 = naval-1946
| var12 = naval-auxiliary
| var13 = naval-auxiliary-1955
| redir1 = POL
</noinclude>
}}
a5df6d9ca5a0da2e55a10a8eb85e931668b222a9
Template:Country data Greece
10
265
537
536
2023-09-14T01:15:29Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{ {{{1<noinclude>|country showdata</noinclude>}}}
| alias = Greece
| flag alias = Flag of Greece.svg
| flag alias-old = Flag of Greece (1822-1978).svg
| flag alias-1970 = Flag of Greece (1970-1975).svg
| flag alias-royal = State flag of Greece (1863–1924;1935–73).svg
| flag alias-otto = Flag of Greece (1822-1978).svg
| flag alias-army = Hellenic Army War Flag.svg
| link alias-army = Hellenic Army
| border-army=
| flag alias-air force=Fin Flash of Greece.svg
| link alias-air force=Hellenic Air Force
| flag alias-royalnavy = Naval Ensign of Kingdom of Greece.svg
| link alias-naval = Hellenic Navy
| flag alias-navy = Flag of Greece.svg
| link alias-navy = Hellenic Navy
| link alias-military = Hellenic Armed Forces
| link alias-royalnavy = Royal Hellenic Navy
| size = {{{size|}}}
| name = {{{name|}}}
| altlink = {{{altlink|}}}
| variant = {{{variant|}}}
<noinclude>
| var1 = old
| var2 = 1970
| var3 = royal
| var4 = otto
| var5 = royalnavy
| redir1 = GRC
| redir2 = GRE
</noinclude>
}}
9362470d876ccba9fb1cf88c0a43720002dfeccf
Template:Country data Romania
10
266
539
538
2023-09-14T01:15:29Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{ {{{1<noinclude>|country showdata</noinclude>}}}
| alias = Romania
| flag alias = Flag of Romania.svg
| flag alias-1859 = Flag of the United Principalities of Wallachia and Moldavia (1859 - 1862).svg
| flag alias-1862 = Flag of the United Principalities of Romania (1862–1866).svg
| flag alias-1866 = Flag of Romania.svg
| flag alias-1948 = Flag of Romania (1948-1952).svg
| flag alias-1952 = Flag of Romania (1952-1965).svg
| flag alias-1965 = Flag of Romania (1965-1989).svg
| link alias-naval = Romanian Naval Forces
| flag alias-naval = Flag of Romania.svg
| flag alias-air force = Flag of the Romanian Air Force (obverse).svg
| link alias-air force = Romanian Air Force
| flag alias-army = Flag of the Romanian Land Forces (Obverse).svg
| link alias-army = Romanian Land Forces
| flag alias-navy = Flag of the Romanian Naval Forces (Obverse).svg
| link alias-navy = Romanian Naval Forces
| size = {{{size|}}}
| name = {{{name|}}}
| altlink = {{{altlink|}}}
| variant = {{{variant|}}}
<noinclude>
| var1 = 1859
| var2 = 1862
| var3 = 1866
| var4 = 1948
| var5 = 1952
| var6 = 1965
| redir1 = ROU
| redir2 = ROM
| related1 = Kingdom of Romania
</noinclude>
}}
b8f3670e159bf57644dc35ad076a061de391bac7
Template:Flagcountry
10
267
541
540
2023-09-14T01:15:30Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{country data {{{1}}}|flagcountry/core|variant={{{variant|{{{2|}}}}}}|size={{{size|}}}|name={{{name|}}}}}{{#invoke:Check for unknown parameters|check|unknown={{main other|[[Category:Pages using flagcountry template with unknown parameters|_VALUE_{{PAGENAME}}]]}}|preview=Page using [[Template:Flagcountry]] with unknown parameter "_VALUE_"|ignoreblank=y| 1 | 2 | name | size | variant }}<noinclude>{{documentation}}</noinclude>
8e77099d5f28ae1a07d27fb07c9fac8684bd56cf
Template:Flagcountry/core
10
268
543
542
2023-09-14T01:15:30Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
<span class="datasortkey" data-sort-value="{{{sortkey|{{{shortname alias|{{{alias}}}}}}}}}"><!--
--><span class="flagicon"><!--
-->[[File:{{{flag alias-{{{variant}}}|{{{flag alias}}}}}}|<!--
-->{{#if:{{{size|}}}|{{{size}}}|{{{size flag alias-{{{variant}}}|{{#if:{{{variant|}}}|23x15px|{{{size flag alias|23x15px}}}}}}}}}}|<!--
-->{{{border-{{{variant}}}|{{{border|border}}}}}} |<!--
-->alt=|<!--
-->link=]] <!--
-->{{#switch:{{{flag alias}}}|Flag of Switzerland.svg|Flag of the Vatican City.svg|Flag of Switzerland (Pantone).svg|Flag of Vatican City State - 2023 version.svg= }}<!--
-->{{#ifeq:{{{alias}}}|Nepal| }}<!--
--></span>[[{{{link alias-{{{variant}}}|{{{alias}}}}}}|<!--
-->{{#if:{{{name|}}}|{{{name}}}|{{{shortname alias|{{{alias}}}}}}}}]]<!--
--></span><noinclude>{{documentation}}</noinclude>
1f6cdc61b8d06e6993f1621ac4b695389268eedf
Template:Lower
10
269
545
544
2023-09-14T01:15:31Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
<span style="position: relative; top: {{safesubst<noinclude />:#if:{{{2|}}}|{{{1}}}|0.6em}};">{{{2|{{{1}}}}}}</span><noinclude>
{{documentation}}
</noinclude>
8c1373e7c520b1f0a9dd17ea8a02e8922e84bb99
Template:Country data EU
10
270
547
546
2023-09-14T01:15:31Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
#REDIRECT [[Template:Country data European Union]]<noinclude>[[Category: Country data redirects|EU]]</noinclude>
2267fd165f54795dc23946ea44a5a5f233a3d041
Template:Country data Finland
10
271
549
548
2023-09-14T01:15:31Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{ {{{1<noinclude>|country showdata</noinclude>}}}
| alias = Finland
| flag alias = Flag of Finland.svg
| flag alias-grand duchy = Flag of Russia.svg
| flag alias-1809 = Flag of Russia.svg
| flag alias-1917 = Flag of Finland 1918 (state).svg
| flag alias-1918 = Flag of Finland (1918-1920).svg
| flag alias-1920 = Flag of Finland.svg
| flag alias-state = Flag of Finland (state).svg
| flag alias-state-1918 = Flag of Finland 1918-1920 (State).svg
| flag alias-state-1920 = Flag of Finland 1920-1978 (State).svg
| flag alias-naval = Military Flag of Finland.svg
| border-naval =
| flag alias-naval-1918 = Flag of Finland 1918-1920 (Military).svg
| border-naval-1918 =
| flag alias-naval-1920 = Flag of Finland 1920-1978 (Military).svg
| border-naval-1920 =
| link alias-naval = Finnish Navy
| flag alias-navy = Naval Jack of Finland.svg
| link alias-navy = Finnish Navy
| link alias-air force = Finnish Air Force
| link alias-army = Finnish Army
| size = {{{size|}}}
| name = {{{name|}}}
| altlink = {{{altlink|}}}
| variant = {{{variant|}}}
<noinclude>
| var1 = grand duchy
| var2 = 1809
| var3 = 1917
| var4 = 1918
| var5 = 1920
| var6 = state
| var7 = state-1918
| var8 = state-1920
| var9 = naval-1918
| var10 = naval-1920
| redir1 = FIN
| related1 = Åland
</noinclude>
}}
2b032fd45283601b72bcda96d62ac73a3218f5ec
Template:Country data Slovenia
10
272
551
550
2023-09-14T01:15:32Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{ {{{1<noinclude>|country showdata</noinclude>}}}
| alias = Slovenia
| flag alias = Flag of Slovenia.svg
| link alias-army = Slovenian Ground Force
| link alias-military=Slovenian Armed Forces
| flag alias-military=Flag of the Slovenian Armed Forces.svg
| flag alias-naval=Naval Jack of Slovenia.svg
| link alias-naval=Slovenian Navy
| link-alias-navy=Slovenian Navy
| size = {{{size|}}}
| variant = {{{variant|}}}
| name = {{{name|}}}
| altlink = {{{altlink|}}}
<noinclude>
| redir1 = SVN
| redir2 = SLO
| related1 = SR Slovenia
</noinclude>
}}
68574d7f8429700e25b2100ce323c396d0954025
Template:Country data Luxembourg
10
273
553
552
2023-09-14T01:15:32Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{ {{{1<noinclude>|country showdata</noinclude>}}}
| alias = Luxembourg
| flag alias = Flag of Luxembourg.svg
| flag alias-civil = Civil Ensign of Luxembourg.svg
| size = {{{size|}}}
| name = {{{name|}}}
| altlink = {{{altlink|}}}
| variant = {{{variant|}}}
<noinclude>
| redir1 = LUX
| var1 = civil
</noinclude>
}}
9c76f01b95d0d97baea7583cf7d8cad58336978b
Template:Country data Czech Republic
10
274
555
554
2023-09-14T01:15:33Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{ {{{1<noinclude>|country showdata</noinclude>}}}
| alias = Czech Republic
| flag alias = Flag of the Czech Republic.svg
| flag alias-1990 = Flag of Bohemia.svg
| flag alias-air force = Flag of the Czech Air Force.svg
| link alias-air force = Czech Air Force
| flag alias-army = Flag of the Czech Land Force.svg
| link alias-army = Czech Land Forces
| size = {{{size|}}}
| name = {{{name|}}}
| variant = {{{variant|}}}
| altlink = {{{altlink|}}}
| altvar = {{{altvar|}}}
<noinclude>
| var1 = 1990
| redir1 = CZE
| redir2 = Czechia
| related1 = Czechoslovakia
| related2 = Bohemia
| related3 = Slovakia
</noinclude>
}}
6c23f290bd62faa6f881f7891d1142783e26ee21
Template:Country data Latvia
10
275
557
556
2023-09-14T01:15:33Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{ {{{1<noinclude>|country showdata</noinclude>}}}
| alias = Latvia
| flag alias = Flag of Latvia.svg
| flag alias-naval = Naval Ensign of Latvia.svg
| link alias-naval = Latvian Naval Forces
| link alias-army = Latvian Land Forces
| flag alias-navy = Naval Ensign of Latvia.svg
| link alias-navy = Latvian Naval Forces
| size = {{{size|}}}
| name = {{{name|}}}
| altlink = {{{altlink|}}}
| variant = {{{variant|}}}
<noinclude>
| redir1 = LVA
| redir2 = LAT
| related1 = Latvian SSR
</noinclude>
}}
b73038430b70fdf779abd8896f6b69e2cb3a2eb7
Template:Country data Slovakia
10
276
559
558
2023-09-14T01:15:33Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{ {{{1<noinclude>|country showdata</noinclude>}}}
| alias = Slovakia
| flag alias = Flag of Slovakia.svg
| flag alias-1939 = Flag of Slovakia (1939–1945).svg
| flag alias-1990 = Flag of Slovakia (1939–1945).svg
| link alias-army = Ground Forces of the Slovak Republic{{!}}Slovak Ground Forces
| size = {{{size|}}}
| name = {{{name|}}}
| altlink = {{{altlink|}}}
| variant = {{{variant|}}}
<noinclude>
| var1 = 1939
| var2 = 1990
| redir1 = SVK
| related1 = Czechoslovakia
</noinclude>
}}
e7b28706d1a4e6fc783c1d519d45426534ecb325
Template:Country data Lithuania
10
277
561
560
2023-09-14T01:15:35Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{ {{{1<noinclude>|country showdata</noinclude>}}}
| alias = Lithuania
| flag alias = Flag of Lithuania.svg
| flag alias-1918 = Flag of Lithuania 1918-1940.svg
| flag alias-1988 = Flag of Lithuania (1988-2004).svg
| flag alias-naval = Naval Ensign of Lithuania.svg
| link alias-naval = Lithuanian Naval Force
| flag alias-military=Flag of the Lithuanian Armed Forces.png
| link alias-military=Lithuanian Armed Forces
| flag alias-army = Flag of the Lithuanian Army.svg
| link alias-army = Lithuanian Land Force
| flag alias-navy=Flag of Lithuania (state).svg
| link alias-navy = Lithuanian Naval Force
| flag alias-air force=Air Force Ensign of Lithuania.svg
| link alias-air force=Lithuanian Air Force
| size = {{{size|}}}
| name = {{{name|}}}
| altlink = {{{altlink|}}}
| altvar = {{{altvar|}}}
| variant = {{{variant|}}}
<noinclude>
| var1 = 1918
| var2 = 1988
| redir1 = LTU
| related1 = Lithuanian SSR
</noinclude>
}}
ff73a63b7cb85165f1f72854a062d92b4a488078
Template:Country data Estonia
10
278
563
562
2023-09-14T01:15:35Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{ {{{1<noinclude>|country showdata</noinclude>}}}
| alias = Estonia
| flag alias = Flag of Estonia.svg
| flag alias-naval = Naval Jack of Estonia.svg
| link alias-naval = Estonian Navy
| flag alias-army=Flag of Estonian Land Forces.svg
| link alias-army=Estonian Land Forces
| flag alias-air force =Flag of the Estonia Air Force.png
| link alias-air force = Estonian Air Force
| flag alias-navy = Naval Ensign of Estonia.svg
| link alias-navy = Estonian Navy
| border-naval =
| size = {{{size|}}}
| name = {{{name|}}}
| altlink = {{{altlink|}}}
| variant = {{{variant|}}}
<noinclude>
| redir1 = EST
| related1 = Estonian SSR
</noinclude>
}}
9d47f0787ce2f607d4f6b61cd4956aa9ac9fd47f
Template:Country data Malta
10
279
565
564
2023-09-14T01:15:35Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{ {{{1<noinclude>|country showdata</noinclude>}}}
| alias = Malta
| flag alias = Flag of Malta.svg
| flag alias-1875 = Flag of Malta (1875–1898).svg
| flag alias-1898 = Flag of Malta (1898–1923).svg
| flag alias-1923 = Flag of Malta (1923–1943).svg
| flag alias-1943 = Flag of Malta (1943–1964).svg
| flag alias-unofficial-1943 = Flag of Malta (1943).svg
| flag alias-colonial = Flag of Malta (1943-1964).svg <!-- deprecated, but in use -->
| flag alias-civil = Civil Ensign of Malta.svg
| link alias-naval = Maritime Squadron of the Armed Forces of Malta
| link alias-navy = Maritime Squadron of the Armed Forces of Malta
| flag alias-navy =Naval Jack of Malta.svg
| flag alias-1814 = 19th Century Flag of Malta.svg
| size = {{{size|}}}
| name = {{{name|}}}
| altlink = {{{altlink|}}}
| variant = {{{variant|}}}
<noinclude>
| var1 = 1875
| var2 = 1898
| var3 = 1923
| var4 = 1943
| var5 = unofficial-1943
| var6 = civil
| var7 = 1814
| redir1 = MLT
| related1 = Sovereign Military Order of Malta
</noinclude>
}}
abdbfec3b581828dc7c870e10ed7e938c73d9857
Template:Country data Ireland
10
280
567
566
2023-09-14T01:15:36Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{ {{{1<noinclude>|country showdata</noinclude>}}}
| hatnote = {{Hatnote|This template contains data that applies to the [[Ireland|entire island]]. For the [[Republic of Ireland|sovereign state]], see [[Template:Country data Republic of Ireland]].}}
| alias = {{#if:{{{altvar|}}}|Ireland|{{#if:{{{variant|}}}|Ireland|Republic of Ireland}}}}
| shortname alias = Ireland
| flag alias = Flag of Ireland.svg
| flag alias-1783 = Saint Patrick's Saltire.svg
| flag alias-4prov = Four Provinces Flag.svg
| flag alias-green = Green harp flag of Ireland.svg
| flag alias-football = Saint Patrick's Saltire.svg
| link alias-football = Ireland national football team (1882–1950)
| flag alias-hockey = Flag of Ireland hockey team.svg
| flag alias-field hockey = Flag of Ireland hockey team.svg
| {{#ifeq:{{{altlink}}}|A national rugby union team|link alias-rugby union|empty}} = Ireland Wolfhounds
| flag alias-rugby union = IRFU flag.svg
| flag alias-rugby sevens = IRFU flag.svg
| flag alias-rugby league = Four Provinces Flag.svg
| flag alias-cricket = Cricket Ireland flag.svg
| link alias-cricket = Ireland {{{mw|}}} {{{age|}}} cricket team
| flag alias-quidditch = Flag of Quidditch Ireland.svg
| flag alias-air force=Flag of the Irish Air Corps.svg
| link alias-air force=Irish Air Corps
| link alias-naval=Irish Naval Service
| flag alias-military=Flag_of_the_Irish_Defence_Forces.svg
| link alias-military=Irish Defence Forces
| flag alias-army=Flag of the Irish Defence Forces.svg
| link alias-army=Irish Army
| flag alias-navy=Irish Naval Service Colour.svg
| link alias-navy=Irish Naval Service
| flag alias-coast guard=Coast Guard Flag (Ireland).svg
| link alias-coast guard=Irish Coast Guard
| size = {{{size|}}}
| name = {{{name|}}}
| altlink = {{{altlink|}}}
| altvar = {{{altvar|}}}
| variant = {{{variant|}}}
<noinclude>
| var1 = 1783
| var2 = green
| var3 = 4prov
| var4 = football
| var5 = rugby union
| var6 = hockey
| var7 = cricket
| var8 = quidditch
| redir1 = IRE
| redir2 = EIR
| related1 = Republic of Ireland
| related2 = Southern Ireland
| related3 = Kingdom of Ireland
| related4 = Lordship of Ireland
| related5 = Irish Free State
</noinclude>
}}
e5e1f2f51926d8f51389937da62183021c07cb35
Template:Infobox former country
10
281
569
568
2023-09-14T01:15:36Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
#REDIRECT [[Template:Infobox country]]
{{r from merger}}
d1a087676a1c1fbf80c00fb58bf83cff967f7de4
Template:Raise
10
282
571
570
2023-09-14T01:15:36Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
<span style="position:relative; bottom:{{#if:{{{2|}}} |{{{1}}} |0.6em}};">{{{2|{{{1}}}}}}</span><noinclude>{{Documentation}}</noinclude>
da747eda753555e094baeeb84eeca1be020ee399
Template:Cob
10
283
573
572
2023-09-14T01:15:37Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
#REDIRECT [[Template:Collapse bottom]]
{{Redirect category shell|
{{R from template shortcut}}
}}
1cd16c56552caeb938d794d973d1a13c885f7830
Template:Infobox geopolitical organization
10
284
575
574
2023-09-14T01:15:38Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
#REDIRECT [[Template:Infobox country]]{{R from alternate name}}
<!-- see Template:Infobox Geopolitical organization -->
4d4892c38a22f1866ca7a29f81ddbc7fc26967f5
Template:UF-hcard-place
10
285
577
576
2023-09-14T01:15:41Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
The HTML mark up produced by this template includes an [[HCard|hCard microformat]], which makes the place-name and location [[Parsing|parsable]] by computers, either acting automatically to catalogue article across Wikipedia, or via a browser tool operated by a person, to (for example) add the subject to an address book. For more information about the use of [[microformat]]s on Wikipedia, please see [[WP:UF|the microformat project]].
If the place or venue has an "established", "founded", "opened" or similar date that is specific to the day, use {{tl|start date}} [[Wikipedia:WikiProject Microformats/dates|unless the date is before 1583 CE]]. If it has a URL, use {{tl|URL}}.
hCard uses HTML classes including:
{{flatlist |
* adr
* category
* country-name
* extended-address
* fn
* label
* locality
* nickname
* note
* org
* street-address
* url
* vcard
}}
'''Please do not rename or remove these classes nor collapse nested elements which use them.'''<includeonly>{{sandbox other||[[Category:Templates generating hCards]]}}</includeonly><noinclude>
[[Category:Templates generating hCards]]
[[Category:Microformat (uF) message templates]]
</noinclude>
4dd5b2fed1d81094b0e7b4f51a6009b556b539b3
Template:DMCA
10
289
585
584
2023-09-14T01:43:05Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
#REDIRECT [[Template:Dated maintenance category (articles)]]
{{Redirect category shell|
{{R from move}}
{{R from modification}}
{{R from template shortcut}}
}}
711d3f1c53fa704297f675a8dcf1a56719c5b654
Template:Dated maintenance category
10
290
587
586
2023-09-14T01:43:05Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
<nowiki/><!--This nowiki helps to prevent whitespace at the top of articles-->{{#ifeq:{{FULLROOTPAGENAME}}|Wikipedia:Template messages|<!--Do not categorize-->|<!--
-->{{#ifexpr:{{#if:{{NAMESPACE}}|0|1}}+{{#ifeq:{{{onlyarticles|no}}}|yes|0|1}}
|{{#if:{{{3|}}}
|[[Category:{{{1}}} {{{2}}} {{{3}}}]]<!--
-->{{#ifexist:Category:{{{1}}} {{{2}}} {{{3}}}
|<!--
-->|[[Category:Articles with invalid date parameter in template]]<!--
-->}}
|[[Category:{{#if:{{{5|}}}
|{{{5}}}<!--
-->|{{{1}}}<!--
-->}}]]<!--
-->}}{{#if:{{{4|}}}
|[[Category:{{{4}}}]]}}<!--
-->}}<!--
-->}}<noinclude>
{{documentation}}
</noinclude>
41e7d4000124d4f718ddf222af0b72825048c4c4
Template:FULLROOTPAGENAME
10
291
589
588
2023-09-14T01:43:06Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{ safesubst:<noinclude/>#if: {{ safesubst:<noinclude/>Ns has subpages | {{ safesubst:<noinclude/>#if:{{{1|}}}|{{ safesubst:<noinclude/>NAMESPACE:{{{1}}}}}|{{ safesubst:<noinclude/>NAMESPACE}}}} }}
| {{ safesubst:<noinclude/>#titleparts:{{ safesubst:<noinclude/>#if:{{{1|}}}|{{{1}}}|{{ safesubst:<noinclude/>FULLPAGENAME}}}}|1}}
| {{ safesubst:<noinclude/>#if:{{{1|}}}|{{{1}}}|{{ safesubst:<noinclude/>FULLPAGENAME}}}}
}}<noinclude>
{{documentation}}
</noinclude>
fd0c4e7050dded2d50e5df405e6e5e31dd0d46ac
Template:Ns has subpages
10
292
591
590
2023-09-14T01:43:06Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{<includeonly>safesubst:</includeonly>#invoke:Ns has subpages|main}}<noinclude>
{{documentation}}
<!-- Categories go on the /doc subpage and interwikis go on Wikidata. -->
</noinclude>
060d2d01af26cb67fd90a7c346a0d2d5e450a040
Module:Unsubst
828
293
593
592
2023-09-14T01:43:07Z
Ilovethehitgameomori
2
1 revision imported
Scribunto
text/plain
local checkType = require('libraryUtil').checkType
local p = {}
local BODY_PARAM = '$B'
local specialParams = {
['$params'] = 'parameter list',
['$aliases'] = 'parameter aliases',
['$flags'] = 'flags',
['$B'] = 'template content',
['$template-name'] = 'template invocation name override',
}
function p.main(frame, body)
-- If we are substing, this function returns a template invocation, and if
-- not, it returns the template body. The template body can be specified in
-- the body parameter, or in the template parameter defined in the
-- BODY_PARAM variable. This function can be called from Lua or from
-- #invoke.
-- Return the template body if we aren't substing.
if not mw.isSubsting() then
if body ~= nil then
return body
elseif frame.args[BODY_PARAM] ~= nil then
return frame.args[BODY_PARAM]
else
error(string.format(
"no template content specified (use parameter '%s' from #invoke)",
BODY_PARAM
), 2)
end
end
-- Sanity check for the frame object.
if type(frame) ~= 'table'
or type(frame.getParent) ~= 'function'
or not frame:getParent()
then
error(
"argument #1 to 'main' must be a frame object with a parent " ..
"frame available",
2
)
end
-- Find the invocation name.
local mTemplateInvocation = require('Module:Template invocation')
local name
if frame.args['$template-name'] and '' ~= frame.args['$template-name'] then
name = frame.args['$template-name'] -- override whatever the template name is with this name
else
name = mTemplateInvocation.name(frame:getParent():getTitle())
end
-- Combine passed args with passed defaults
local args = {}
if string.find( ','..(frame.args['$flags'] or '')..',', ',%s*override%s*,' ) then
for k, v in pairs( frame:getParent().args ) do
args[k] = v
end
for k, v in pairs( frame.args ) do
if not specialParams[k] then
if v == '__DATE__' then
v = mw.getContentLanguage():formatDate( 'F Y' )
end
args[k] = v
end
end
else
for k, v in pairs( frame.args ) do
if not specialParams[k] then
if v == '__DATE__' then
v = mw.getContentLanguage():formatDate( 'F Y' )
end
args[k] = v
end
end
for k, v in pairs( frame:getParent().args ) do
args[k] = v
end
end
-- Trim parameters, if not specified otherwise
if not string.find( ','..(frame.args['$flags'] or '')..',', ',%s*keep%-whitespace%s*,' ) then
for k, v in pairs( args ) do args[k] = mw.ustring.match(v, '^%s*(.*)%s*$') or '' end
end
-- Pull information from parameter aliases
local aliases = {}
if frame.args['$aliases'] then
local list = mw.text.split( frame.args['$aliases'], '%s*,%s*' )
for k, v in ipairs( list ) do
local tmp = mw.text.split( v, '%s*>%s*' )
aliases[tonumber(mw.ustring.match(tmp[1], '^[1-9][0-9]*$')) or tmp[1]] = ((tonumber(mw.ustring.match(tmp[2], '^[1-9][0-9]*$'))) or tmp[2])
end
end
for k, v in pairs( aliases ) do
if args[k] and ( not args[v] or args[v] == '' ) then
args[v] = args[k]
end
args[k] = nil
end
-- Remove empty parameters, if specified
if string.find( ','..(frame.args['$flags'] or '')..',', ',%s*remove%-empty%s*,' ) then
local tmp = 0
for k, v in ipairs( args ) do
if v ~= '' or ( args[k+1] and args[k+1] ~= '' ) or ( args[k+2] and args[k+2] ~= '' ) then
tmp = k
else
break
end
end
for k, v in pairs( args ) do
if v == '' then
if not (type(k) == 'number' and k < tmp) then args[k] = nil end
end
end
end
-- Order parameters
if frame.args['$params'] then
local params, tmp = mw.text.split( frame.args['$params'], '%s*,%s*' ), {}
for k, v in ipairs(params) do
v = tonumber(mw.ustring.match(v, '^[1-9][0-9]*$')) or v
if args[v] then tmp[v], args[v] = args[v], nil end
end
for k, v in pairs(args) do tmp[k], args[k] = args[k], nil end
args = tmp
end
return mTemplateInvocation.invocation(name, args)
end
p[''] = p.main -- For backwards compatibility
return p
7f01ffc8aa2ac4a4772f14c12e0b77e384ecabb6
Module:Ns has subpages
828
294
595
594
2023-09-14T01:43:07Z
Ilovethehitgameomori
2
1 revision imported
Scribunto
text/plain
-- This module implements [[Template:Ns has subpages]].
-- While the template is fairly simple, this information is made available to
-- Lua directly, so using a module means that we don't have to update the
-- template as new namespaces are added.
local p = {}
function p._main(ns, frame)
-- Get the current namespace if we were not passed one.
if not ns then
ns = mw.title.getCurrentTitle().namespace
end
-- Look up the namespace table from mw.site.namespaces. This should work
-- for a majority of cases.
local nsTable = mw.site.namespaces[ns]
-- Try using string matching to get the namespace from page names.
-- Do a quick and dirty bad title check to try and make sure we do the same
-- thing as {{NAMESPACE}} in most cases.
if not nsTable and type(ns) == 'string' and not ns:find('[<>|%[%]{}]') then
local nsStripped = ns:gsub('^[_%s]*:', '')
nsStripped = nsStripped:gsub(':.*$', '')
nsTable = mw.site.namespaces[nsStripped]
end
-- If we still have no match then try the {{NAMESPACE}} parser function,
-- which should catch the remainder of cases. Don't use a mw.title object,
-- as this would increment the expensive function count for each new page
-- tested.
if not nsTable then
frame = frame or mw.getCurrentFrame()
local nsProcessed = frame:callParserFunction('NAMESPACE', ns)
nsTable = nsProcessed and mw.site.namespaces[nsProcessed]
end
return nsTable and nsTable.hasSubpages
end
function p.main(frame)
local ns = frame:getParent().args[1]
if ns then
ns = ns:match('^%s*(.-)%s*$') -- trim whitespace
ns = tonumber(ns) or ns
end
local hasSubpages = p._main(ns, frame)
return hasSubpages and 'yes' or ''
end
return p
e133068ba73738b16e1e3eba47735516a461eb5b
Template:Use dmy dates
10
295
597
596
2023-09-14T01:43:09Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{ <includeonly>safesubst:</includeonly>#invoke:Unsubst||date=__DATE__ |$B=
{{DMCA|Use dmy dates|from|{{{date|}}}}}{{#invoke:Check for unknown parameters|check|unknown={{main other|[[Category:Pages using Use dmy dates template with unknown parameters|_VALUE_{{PAGENAME}}]]}}|preview=Page using [[Template:Use dmy dates]] with unknown parameter "_VALUE_"|ignoreblank=y| cs1-dates | date }}}}<noinclude>{{documentation}}</noinclude>
3a087cd27e88fd70a0765c62d5ab506c3b73c9e7
Template:Section link
10
296
599
598
2023-09-14T01:43:12Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{#invoke:Section link|main}}<noinclude>
{{documentation}}
<!-- Categories go on the /doc subpage and interwikis go on Wikidata. -->
</noinclude>
8d047e5845f8a9b74a4655b5dd79ca7595a8f88b
Module:Section link
828
297
601
600
2023-09-14T01:43:12Z
Ilovethehitgameomori
2
1 revision imported
Scribunto
text/plain
-- This module implements {{section link}}.
require('strict');
local checkType = require('libraryUtil').checkType
local p = {}
local function makeSectionLink(page, section, display)
display = display or section
page = page or ''
-- MediaWiki doesn't allow these in `page`, so only need to do for `section`
if type(section) == 'string' then
section = string.gsub(section, "{", "{")
section = string.gsub(section, "}", "}")
end
return string.format('[[%s#%s|%s]]', page, section, display)
end
local function normalizeTitle(title)
title = mw.ustring.gsub(mw.ustring.gsub(title, "'", ""), '"', '')
title = mw.ustring.gsub(title, "%b<>", "")
return mw.title.new(title).prefixedText
end
function p._main(page, sections, options, title)
-- Validate input.
checkType('_main', 1, page, 'string', true)
checkType('_main', 3, options, 'table', true)
if sections == nil then
sections = {}
elseif type(sections) == 'string' then
sections = {sections}
elseif type(sections) ~= 'table' then
error(string.format(
"type error in argument #2 to '_main' " ..
"(string, table or nil expected, got %s)",
type(sections)
), 2)
end
options = options or {}
title = title or mw.title.getCurrentTitle()
-- Deal with blank page names elegantly
if page and not page:find('%S') then
page = nil
options.nopage = true
end
-- Make the link(s).
local isShowingPage = not options.nopage
if #sections <= 1 then
local linkPage = page or ''
local section = sections[1] or 'Notes'
local display = '§ ' .. section
if isShowingPage then
page = page or title.prefixedText
if options.display and options.display ~= '' then
if normalizeTitle(options.display) == normalizeTitle(page) then
display = options.display .. ' ' .. display
else
error(string.format(
'Display title "%s" was ignored since it is ' ..
"not equivalent to the page's actual title",
options.display
), 0)
end
else
display = page .. ' ' .. display
end
end
return makeSectionLink(linkPage, section, display)
else
-- Multiple sections. First, make a list of the links to display.
local ret = {}
for i, section in ipairs(sections) do
ret[i] = makeSectionLink(page, section)
end
-- Assemble the list of links into a string with mw.text.listToText.
-- We use the default separator for mw.text.listToText, but a custom
-- conjunction. There is also a special case conjunction if we only
-- have two links.
local conjunction
if #sections == 2 then
conjunction = '​ and '
else
conjunction = ', and '
end
ret = mw.text.listToText(ret, nil, conjunction)
-- Add the intro text.
local intro = '§§ '
if isShowingPage then
intro = (page or title.prefixedText) .. ' ' .. intro
end
ret = intro .. ret
return ret
end
end
function p.main(frame)
local yesno = require('Module:Yesno')
local args = require('Module:Arguments').getArgs(frame, {
wrappers = 'Template:Section link',
valueFunc = function (key, value)
value = value:match('^%s*(.-)%s*$') -- Trim whitespace
-- Allow blank first parameters, as the wikitext template does this.
if value ~= '' or key == 1 then
return value
end
end
})
for k, v in pairs(args) do -- replace underscores in the positional parameter values
if 'number' == type(k) then
if not yesno (args['keep-underscores']) then -- unless |keep-underscores=yes
args[k] = mw.uri.decode (v, 'WIKI'); -- percent-decode; replace underscores with space characters
else
args[k] = mw.uri.decode (v, 'PATH'); -- percent-decode; retain underscores
end
end
end
-- Sort the arguments.
local page
local sections, options = {}, {}
for k, v in pairs(args) do
if k == 1 then
-- Doing this in the loop because of a bug in [[Module:Arguments]]
-- when using pairs with deleted arguments.
page = mw.text.decode(v, true)
elseif type(k) == 'number' then
sections[k] = v
else
options[k] = v
end
end
options.nopage = yesno (options.nopage); -- make boolean
-- Extract section from page, if present
if page then
local p, s = page:match('^(.-)#(.*)$')
if p then page, sections[1] = p, s end
end
-- Compress the sections array.
local function compressArray(t)
local nums, ret = {}, {}
for num in pairs(t) do
nums[#nums + 1] = num
end
table.sort(nums)
for i, num in ipairs(nums) do
ret[i] = t[num]
end
return ret
end
sections = compressArray(sections)
return p._main(page, sections, options)
end
return p
5cc61d43dc601ca43e9472500fc5cd09ca7cea44
Template:Used in system
10
298
603
602
2023-09-14T01:43:15Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{#invoke:High-use|main|1=|2={{{2|}}}|system={{#if:{{{1|}}}|{{{1}}}|in system messages}}<noinclude>|nocat=true</noinclude>}}<noinclude>
{{documentation}}<!-- Add categories and interwikis to the /doc subpage, not here! -->
</noinclude>
0abe278369db6cbbe319e7452d7644e27e11c532
Template:Elc
10
299
605
604
2023-09-14T01:43:17Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
<includeonly><code>[<nowiki/>[{{{1}}}{{#if:{{{2|}}}|{{!}}{{{2}}}}}]<nowiki/>]{{{3|}}}</code></includeonly><!--
--><noinclude>
{{documentation}}
</noinclude>
d76ca6072fb7ca852811a573aa38e9026487417c
Template:Mlx
10
300
607
606
2023-09-14T01:43:17Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
#REDIRECT [[Template:Module link expanded]]
{{Redirect category shell|
{{R from move}}
}}
3a80cf77e735d41b1611f1bd7f028ce9941330a2
Module:InfoboxImage/doc
828
301
609
608
2023-09-14T01:43:28Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{used in system}}
{{Module rating|protected}}
==Overview==
This module is used within infoboxes to process the image parameters and tidy up the formatting of the result.
==Parameters==
{| class="wikitable"
! Parameter
! Description
|-
| image
| Required. The main parameter that should be passed over which contains the image info.
|-
| size
| Size to display image, in pixels. Use is discouraged per [[WP:THUMBSIZE]]; see {{Para|upright}} below instead.
|-
| maxsize
| Maximum size to display image. Note: If no size or sizedefault params specified then image will be shown at maxsize.
|-
| sizedefault
| The size to use for the image if no size param is specified. Defaults to [[Wikipedia:Autosizing images|frameless]].
|-
| alt
| Alt text for the image.
|-
| title
| Title text for image (mouseover text).
|-
| border
| If yes, then a border is added.
|-
| page
| The page number to be displayed when using a multi-page image.
|-
| upright
| If upright=yes, adds "upright" which displays image at 75% of default image size (which is 220px if not changed at [[Special:Preferences]]). If a value, adds "upright=''value''" to image, where values less than 1 scale the image down (0.9 = 90%) and values greater than 1 scale the image up (1.15 = 115%).
|-
| center
| If yes, then the image is centered.
|-
| thumbtime
| thumbtime param, used for video clips.
|-
| suppressplaceholder
| If no, then will not suppress certain placeholder images. See {{section link||Placeholder images which can be suppressed}}.
|-
| link
| Page to go to when clicking on the image.
|-
| class
| HTML classes to add to the image.
|}
Note: If you specify the maxsize or sizedefault params, then you should include the px after the number.
{{Use dmy dates|date=July 2016}}
==Parameters displayed in image syntax==
All parameters:
:<syntaxhighlight lang="wikitext" style="overflow:auto;">{{#invoke:InfoboxImage | InfoboxImage | image={{{image}}} | size={{{size}}} | maxsize={{{maxsize}}} | sizedefault={{{sizedefault}}} | upright={{{upright}}} | alt={{{alt}}} | title={{{title}}} | thumbtime={{{thumbtime}}} | link={{{link}}} | border=yes | center=yes | page={{{page}}} | class={{{class}}} }}</syntaxhighlight>
:<code>{{#invoke:InfoboxImage | InfoboxImage | image={{{image}}} | size={{{size}}} | maxsize={{{maxsize}}} | sizedefault={{{sizedefault}}} | upright={{{upright}}} | alt={{{alt}}} | title={{{title}}} | thumbtime={{{thumbtime}}} | link={{{link}}} | border=yes | center=yes | page={{{page}}} | class={{{class}}}}}</code>
When "size" and "maxsize" are defined, the smaller of the two is used (if "px" is omitted it will be added by the module):
:<syntaxhighlight lang="wikitext" style="overflow:auto;">{{#invoke:InfoboxImage | InfoboxImage | image={{{image}}} | size=300px | maxsize=250px }}</syntaxhighlight>
:<code>{{#invoke:InfoboxImage | InfoboxImage | image={{{image}}} | size=300px | maxsize=250px }}</code>
When "size" is not defined, "sizedefault" is used, even if larger than "maxsize" (in actual use "px" is required after the number; omitted here to show it is not added by the module):
:<syntaxhighlight lang="wikitext" style="overflow:auto;">{{#invoke:InfoboxImage | InfoboxImage | image={{{image}}} | sizedefault=250px | maxsize=200px }}</syntaxhighlight>
:<code>{{#invoke:InfoboxImage | InfoboxImage | image={{{image}}} | sizedefault=250px | maxsize=200px }}</code>
When "size" and "sizedefault" are not defined, "maxsize" is used (in actual use "px" is required after the number; omitted here to show it is not added by the module):
:<syntaxhighlight lang="wikitext" style="overflow:auto;">{{#invoke:InfoboxImage | InfoboxImage | image={{{image}}} | maxsize=250px }}</syntaxhighlight>
:<code>{{#invoke:InfoboxImage | InfoboxImage | image={{{image}}} | maxsize=250px }}</code>
When "size", "sizedefault", and "maxsize" are not defined, "frameless" is added, which displays the image at the default thumbnail size (220px, but logged in users can change this at [[Special:Preferences]]) and is required if using "upright" to scale the default size:
:<syntaxhighlight lang="wikitext" style="overflow:auto;">{{#invoke:InfoboxImage | InfoboxImage | image={{{image}}} }}</syntaxhighlight>
:<code>{{#invoke:InfoboxImage | InfoboxImage | image={{{image}}} }}</code>
Use of "upright" without a number value, which displays the image at approximately 75% of the user's default size (multiplied by 0.75 then rounded to nearest 10):
:<syntaxhighlight lang="wikitext" style="overflow:auto;">{{#invoke:InfoboxImage | InfoboxImage | image={{{image}}} | upright = yes }}</syntaxhighlight>
:<code>{{#invoke:InfoboxImage | InfoboxImage | image={{{image}}} | upright = yes }}</code>
When "alt" is used without "title", the alt text is also used as the title:
:<syntaxhighlight lang="wikitext" style="overflow:auto;">{{#invoke:InfoboxImage | InfoboxImage | image={{{image}}} | alt = Alt text }}</syntaxhighlight>
:<code>{{#invoke:InfoboxImage | InfoboxImage | image={{{image}}} | alt = Alt text }}</code>
For more information, see [[Wikipedia:Extended image syntax]].
==Sample usage==
<syntaxhighlight lang="wikitext" style="overflow:auto;">
|image = {{#invoke:InfoboxImage|InfoboxImage|image={{{image|}}}|upright={{{image_upright|1}}}|alt={{{alt|}}}}}
</syntaxhighlight>
==Examples==
{| class="wikitable"
|-
| {{mlx|InfoboxImage|InfoboxImage}}
| {{#invoke:InfoboxImage|InfoboxImage}}
|-
| {{mlx|InfoboxImage|InfoboxImage|image{{=}}}}
| {{#invoke:InfoboxImage|InfoboxImage|image=}}
|-
|
{{mlx|InfoboxImage|InfoboxImage|image{{=}}Abbey Rd Studios.jpg}}<br />
{{mlx|InfoboxImage|InfoboxImage|image{{=}}File:Abbey Rd Studios.jpg}}<br />
{{mlx|InfoboxImage|InfoboxImage|image{{=}}Image:Abbey Rd Studios.jpg}}
| {{#invoke:InfoboxImage|InfoboxImage|image=Abbey Rd Studios.jpg}}
|-
|
{{mlx|InfoboxImage|InfoboxImage|image{{=}}Abbey Rd Studios.jpg|upright{{=}}yes}}<br />
| {{#invoke:InfoboxImage|InfoboxImage|image=Abbey Rd Studios.jpg|upright=yes}}
|-
|
{{mlx|InfoboxImage|InfoboxImage|image{{=}}Abbey Rd Studios.jpg|upright{{=}}1.2}}<br />
| {{#invoke:InfoboxImage|InfoboxImage|image=Abbey Rd Studios.jpg|upright=1.2}}
|-
|
{{mlx|InfoboxImage|InfoboxImage|image{{=}}Abbey Rd Studios.jpg|size{{=}}100px}}<br />
{{mlx|InfoboxImage|InfoboxImage|image{{=}}Abbey Rd Studios.jpg|size{{=}}100}}
| {{#invoke:InfoboxImage|InfoboxImage|image=Abbey Rd Studios.jpg|size=100px}}
|-
| {{mlx|InfoboxImage|InfoboxImage|image{{=}}{{elc|Image:Abbey Rd Studios.jpg|200px}}}}
| {{#invoke:InfoboxImage|InfoboxImage|image=[[Image:Abbey Rd Studios.jpg|200px]]}}
|-
| {{mlx|InfoboxImage|InfoboxImage|image{{=}}{{elc|Image:Abbey Rd Studios.jpg|200px}}|title=Abbey Road!}}
| {{#invoke:InfoboxImage|InfoboxImage|image=[[Image:Abbey Rd Studios.jpg|200px]]|title=Abbey Road!}}
|-
| {{mlx|InfoboxImage|InfoboxImage|image{{=}}Abbey Rd Studios.jpg|sizedefault{{=}}250px|alt{{=}}The front stairs and door of Abbey Road Studios}}
| {{#invoke:InfoboxImage|InfoboxImage|image=Abbey Rd Studios.jpg|sizedefault=250px|alt=The front stairs and door of Abbey Road Studios}}
|-
| {{mlx|InfoboxImage|InfoboxImage|image{{=}}Abbey Rd Studios.jpg|sizedefault{{=}}250|alt{{=}}The front stairs and door of Abbey Road Studios}}
| {{#invoke:InfoboxImage|InfoboxImage|image=Abbey Rd Studios.jpg|sizedefault=250|alt=The front stairs and door of Abbey Road Studios}}
|-
| {{mlx|InfoboxImage|InfoboxImage|image{{=}}Abbey Rd Studios.jpg|sizedefault{{=}}250px|alt{{=}}The front stairs and door of Abbey Road Studios|title=Exterior, front view of Abbey Road studios}}
| {{#invoke:InfoboxImage|InfoboxImage|image=Abbey Rd Studios.jpg|sizedefault=250px|alt=The front stairs and door of Abbey Road Studios|title=Exterior, front view of Abbey Road studios}}
|-
| {{mlx|InfoboxImage|InfoboxImage|image{{=}}Abbey Rd Studios.jpg|alt{{=}}The front stairs and door of Abbey Road Studios}}
| {{#invoke:InfoboxImage|InfoboxImage|image=Abbey Rd Studios.jpg|alt=The front stairs and door of Abbey Road Studios}}
|-
| {{mlx|InfoboxImage|InfoboxImage|image{{=}}Abbey Rd Studios.jpg|size{{=}}100px|alt{{=}}The front stairs and door of Abbey Road Studios}}
| {{#invoke:InfoboxImage|InfoboxImage|image=Abbey Rd Studios.jpg|size=100px|alt=The front stairs and door of Abbey Road Studios}}
|-
| {{mlx|InfoboxImage|InfoboxImage|image{{=}}Bandera de Bilbao.svg|size{{=}}100|border{{=}}yes}}
| {{#invoke:InfoboxImage|InfoboxImage|image=Bandera de Bilbao.svg|size=200|border=yes}}
|-
| {{mlx|InfoboxImage|InfoboxImage|image{{=}}Image is needed male.svg}}
| {{#invoke:InfoboxImage|InfoboxImage|image=Image is needed male.svg}}
|-
| {{mlx|InfoboxImage|InfoboxImage|image{{=}}Image is needed male.svg|suppressplaceholder=no}}
| {{#invoke:InfoboxImage|InfoboxImage|image=Image is needed male.svg|suppressplaceholder=no}}
|-
| {{mlx|InfoboxImage|InfoboxImage|image{{=}}{{elc|File:Image is needed male.svg|200px}}}}
| {{#invoke:InfoboxImage|InfoboxImage|image=[[File:Image is needed male.svg|200px]]}}
|-
| {{mlx|InfoboxImage|InfoboxImage|image{{=}}{{elc|File:Image is needed male.svg|200px}}|suppressplaceholder{{=}}no}}
| {{#invoke:InfoboxImage|InfoboxImage|image=[[File:Image is needed male.svg|200px]]|suppressplaceholder=no}}
|-
| {{mlx|InfoboxImage|InfoboxImage|image{{=}}Abbey Rd Studios.jpg|size=50px|maxsize{{=}}100px}}
| {{#invoke:InfoboxImage|InfoboxImage|image=Abbey Rd Studios.jpg|size=50px|maxsize=100px}}
|-
| {{mlx|InfoboxImage|InfoboxImage|image{{=}}Abbey Rd Studios.jpg|size=200px|maxsize{{=}}100px}}
| {{#invoke:InfoboxImage|InfoboxImage|image=Abbey Rd Studios.jpg|size=200px|maxsize=100px}}
|-
| {{mlx|InfoboxImage|InfoboxImage|image{{=}}{{elc|File:Abbey Rd Studios.jpg|200px}}|maxsize{{=}}100px}}
| {{#invoke:InfoboxImage|InfoboxImage|image=[[File:Abbey Rd Studios.jpg|200px]]|maxsize=100px}}
|-
| {{mlx|InfoboxImage|InfoboxImage|image{{=}}Abbey Rd Studios.jpg|maxsize{{=}}100px|center{{=}}yes}}
| {{#invoke:InfoboxImage|InfoboxImage|image=Abbey Rd Studios.jpg|maxsize=100px|center=yes}}
|-
| {{mlx|InfoboxImage|InfoboxImage|image{{=}}no such image|maxsize{{=}}100px|center{{=}}yes}}<!-- this issue sh'd be fixed somewhow-->
| {{#invoke:InfoboxImage|InfoboxImage|image=no such image|maxsize=100px|center=yes}}
|}
== Placeholder images which can be suppressed ==
{|
| style="vertical-align:top;" |
* [[:File:Blue - replace this image female.svg]]
* [[:File:Blue - replace this image male.svg]]
* [[:File:Female no free image yet.png]]
* [[:File:Male no free image yet.png]]
* [[:File:Flag of None (square).svg]]
* [[:File:Flag of None.svg]]
* [[:File:Flag of.svg]]
* [[:File:Green - replace this image female.svg]]
* [[:File:Green - replace this image male.svg]]
* [[:File:Image is needed female.svg]]
* [[:File:Image is needed male.svg]]
* [[:File:Location map of None.svg]]
* [[:File:Male no free image yet.png]]
* [[:File:Missing flag.png]]
* [[:File:No flag.svg]]
* [[:File:No free portrait.svg]]
* [[:File:No portrait (female).svg]]
* [[:File:No portrait (male).svg]]
* [[:File:Red - replace this image female.svg]]
* [[:File:Red - replace this image male.svg]]
* [[:File:Replace this image female (blue).svg]]
* [[:File:Replace this image female.svg]]
* [[:File:Replace this image male (blue).svg]]
* [[:File:Replace this image male.svg]]
* [[:File:Silver - replace this image female.svg]]
* [[:File:Silver - replace this image male.svg]]
* [[:File:Replace this image.svg]]
* [[:File:Cricket no pic.png]]
* [[:File:CarersLogo.gif]]
* [[:File:Diagram Needed.svg]]
* [[:File:Example.jpg]]
* [[:File:Image placeholder.png]]
* [[:File:No male portrait.svg]]
* [[:File:Nocover-upload.png]]
* [[:File:NoDVDcover copy.png]]
* [[:File:Noribbon.svg]]
| style="vertical-align:top;" |
* [[:File:No portrait-BFD-test.svg]]
* [[:File:Placeholder barnstar ribbon.png]]
* [[:File:Project Trains no image.png]]
* [[:File:Image-request.png]]
* [[:File:Sin bandera.svg]]
* [[:File:Sin escudo.svg]]
* [[:File:Replace this image - temple.png]]
* [[:File:Replace this image butterfly.png]]
* [[:File:Replace this image.svg]]
* [[:File:Replace this image1.svg]]
* [[:File:Resolution angle.png]]
* [[:File:Image-No portrait-text-BFD-test.svg]]
* [[:File:Insert image here.svg]]
* [[:File:No image available.png]]
* [[:File:NO IMAGE YET square.png]]
* [[:File:NO IMAGE YET.png]]
* [[:File:No Photo Available.svg]]
* [[:File:No Screenshot.svg]]
* [[:File:No-image-available.jpg]]
* [[:File:Null.png]]
* [[:File:PictureNeeded.gif]]
* [[:File:Place holder.jpg]]
* [[:File:Unbenannt.JPG]]
* [[:File:UploadACopyrightFreeImage.svg]]
* [[:File:UploadAnImage.gif]]
* [[:File:UploadAnImage.svg]]
* [[:File:UploadAnImageShort.svg]]
* [[:File:CarersLogo.gif]]
* [[:File:Diagram Needed.svg]]
* [[:File:No male portrait.svg]]
* [[:File:NoDVDcover copy.png]]
* [[:File:Placeholder barnstar ribbon.png]]
* [[:File:Project Trains no image.png]]
* [[:File:Image-request.png]]
|}
== Tracking categories ==
* {{clc|Pages using infoboxes with thumbnail images}}
<includeonly>{{Sandbox other||
{{DEFAULTSORT:Image, {{PAGENAME}}}}
[[Category:Modules for image handling]]
[[Category:Modules that add a tracking category]]
[[Category:Infobox modules]]
}}</includeonly>
c94fcbc786f35c8e23c8f499b3090efc604852c7
Template:Module link expanded
10
302
611
610
2023-09-14T01:43:28Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
<includeonly><code>{{{{{{{|safesubst:}}}#invoke:Separated entries|main|[[Module:{{{1}}}{{{section|}}}|#invoke:{{{1}}}]]|{{{2|''function''}}}|separator=|}}}}</code></includeonly><noinclude>{{documentation}}<!-- Categories go on the /doc subpage and interwikis go on Wikidata. --></noinclude>
fe65540c0f768ae41c071fe8617ea0d5c38617e7
Template:Dated maintenance category (articles)
10
303
613
612
2023-09-14T01:43:29Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{Dated maintenance category
|onlyarticles=yes
|1={{{1|}}}
|2={{{2|}}}
|3={{{3|}}}
|4={{{4|}}}
|5={{{5|}}}
}}<noinclude>
{{documentation|Template:Dated maintenance category/doc}}
</noinclude>
6bbc57c75cc28708a0e71dd658224d5945d80d68
Module:Side box
828
304
615
614
2023-09-14T01:43:30Z
Ilovethehitgameomori
2
1 revision imported
Scribunto
text/plain
local yesno = require('Module:Yesno')
local p = {}
local function makeData(args)
local data = {}
-- Main table classes
data.classes = {}
if yesno(args.metadata) ~= false then
table.insert(data.classes, 'metadata')
end
if args.position and args.position:lower() == 'left' then
table.insert(data.classes, 'side-box-left')
else
table.insert(data.classes, 'side-box-right')
end
if args.collapsible then
table.insert(data.classes, 'mw-collapsible')
if args.collapsible == "collapsed" then
table.insert(data.classes, 'mw-collapsed')
end
data.collapsible = true
end
table.insert(data.classes, args.class)
-- Image
if args.image and args.image ~= 'none' then
data.image = args.image
end
-- we have to check to see if a downstream use has plainlist like
-- Template:Sister_project. also it's the default. wikitext is :(
if args.textclass == 'plainlist' or not args.textclass then
data.textclass = 'plainlist'
data.plainlist_templatestyles = 'Plainlist/styles.css'
else
data.textclass = args.textclass
end
-- Copy over data that does not need adjusting
local argsToCopy = {
-- aria qualities
'role',
'labelledby',
-- Styles
'style',
'textstyle',
'templatestyles',
-- Above row
'above',
'abovestyle',
-- Body row
'text',
'imageright',
-- Below row
'below',
}
for i, key in ipairs(argsToCopy) do
data[key] = args[key]
end
return data
end
local function renderSidebox(data)
-- Renders the sidebox HTML.
-- Table root
local root = mw.html.create('div')
root:attr('role', data.role)
:attr('aria-labelledby', data.labelledby)
:addClass('side-box')
for i, class in ipairs(data.classes or {}) do
root:addClass(class)
end
if data.style then
root:cssText(data.style)
end
local frame = mw.getCurrentFrame()
if data.plainlist_templatestyles then
root:wikitext(frame:extensionTag{
name = 'templatestyles', args = { src = data.plainlist_templatestyles }
})
end
-- The "above" row
if data.above then
local above = root:newline():tag('div')
above:addClass('side-box-abovebelow')
:newline()
:wikitext(data.above)
if data.textstyle then
above:cssText(data.textstyle)
end
if data.abovestyle then
above:cssText(data.abovestyle)
end
end
-- The body row
local body = root:newline():tag('div')
body:addClass('side-box-flex')
:addClass(data.collapsible and 'mw-collapsible-content')
:newline()
if data.image then
body:tag('div')
:addClass('side-box-image')
:wikitext(data.image)
end
local text = body:newline():tag('div')
text:addClass('side-box-text')
:addClass(data.textclass)
if data.textstyle then
text:cssText(data.textstyle)
end
text:wikitext(data.text)
if data.imageright then
body:newline():tag('div')
:addClass('side-box-imageright')
:wikitext(data.imageright)
end
-- The below row
if data.below then
local below = root:newline():tag('div')
below
:addClass('side-box-abovebelow')
:wikitext(data.below)
if data.textstyle then
below:cssText(data.textstyle)
end
end
root:newline()
local templatestyles = ''
if data.templatestyles then
templatestyles = frame:extensionTag{
name = 'templatestyles', args = { src = data.templatestyles }
}
end
return frame:extensionTag{
name = 'templatestyles', args = { src = 'Module:Side box/styles.css' }
} .. templatestyles .. tostring(root)
end
function p._main(args)
local data = makeData(args)
return renderSidebox(data)
end
function p.main(frame)
local origArgs = frame:getParent().args
local args = {}
for k, v in pairs(origArgs) do
v = v:match('%s*(.-)%s*$')
if v ~= '' then
args[k] = v
end
end
return p._main(args)
end
return p
096bef4a3721857fc16eb509a4f8d75973484485
Template:Side box
10
305
617
616
2023-09-14T01:43:31Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{#invoke:Side box|main}}<noinclude>
{{documentation}}
<!-- Categories go on the /doc subpage, and interwikis go on Wikidata. -->
</noinclude>
f02d48c7bd2f7bc64e2982d16b3578c99137d27e
Template:Sister project
10
306
619
618
2023-09-14T01:43:31Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{Side box
| metadata=no
| position = {{{position|}}}
| image =
{{#switch: {{{image|}}}
| none = <!-- "image=none", do nothing -->
| = <!-- No image fed, select an image -->
[[File:{{#switch: {{lc: {{{project|}}} }}
| commons|c = Commons-logo.svg
| meta|metawiki|m = Wikimedia Community Logo.svg
| wikibooks|wbk|wb|b = Wikibooks-logo-en-noslogan.svg
| wikidata|data = Wikidata-logo.svg
| wikiquote|quote|wqt|q = Wikiquote-logo.svg
| wikipedia|wp|w|iw = Wikipedia-logo-v2.svg
| wikisource|source|ws|s = Wikisource-logo.svg
| wiktionary|wikt|wkt|wdy|d = Wiktionary-logo-en-v2.svg
| wikinews|news|wnw|n = Wikinews-logo.svg
| wikispecies|species = Wikispecies-logo.svg
| wikiversity|wvy|v = Wikiversity logo 2017.svg
| wikivoyage|voyage|voy = Wikivoyage-Logo-v3-icon.svg
| mediawiki|mw = MediaWiki-2020-icon.svg
| outreachwiki|outreach = Wikimedia Outreach.png
| incubator = Incubator-notext.svg
| #default = Wikimedia-logo.svg
}}|40x40px|class=noviewer|alt=|link=
]]
| #default = {{{image|}}}
}}
| textclass = {{{textclass|plainlist}}}
| textstyle = {{{textstyle|}}}
| text = {{{text}}}
| below = {{{below|}}}
| imageright = {{{imageright|}}}
| class = plainlinks sistersitebox
}}<noinclude>{{Documentation}}<!-- Add categories and interwikis to the /doc subpage, not here! --></noinclude>
0929197ea6267d9d63d80f9f8432fe1cfbe7ace8
Module:Uses Wikidata
828
307
621
620
2023-09-14T01:43:33Z
Ilovethehitgameomori
2
1 revision imported
Scribunto
text/plain
local p = {}
function p.usesProperty(frame)
local args = frame.getParent(frame).args or nil
if mw.text.trim(args[1] or '') == '' then
args = frame.args
end
local result = '<ul>'
local ii = 1
while true do
local p_num = mw.text.trim(args[ii] or '')
if p_num ~= '' then
local label = mw.wikibase.getLabel(p_num) or "NO LABEL"
result = result .. "<li>[[File:Disc Plain blue dark.svg|middle|4px|link=|alt=]] <b><i>[[d:Property talk:" .. p_num .. "|" .. label .. " (" .. string.upper(p_num) .. ")]]</i></b> (see <span class='plainlinks'>[https://query.wikidata.org/embed.html#SELECT%20%3FWikidata_item_%20%3FWikidata_item_Label%20%3Fvalue%20%3FvalueLabel%20%3FEnglish_Wikipedia_article%20%23Show%20data%20in%20this%20order%0A%7B%0A%09%3FWikidata_item_%20wdt%3A" .. p_num .. "%20%3Fvalue%20.%20%23Collecting%20all%20items%20which%20have%20" .. p_num .. "%20data%2C%20from%20whole%20Wikidata%20item%20pages%0A%09OPTIONAL%20%7B%3FEnglish_Wikipedia_article%20schema%3Aabout%20%3FWikidata_item_%3B%20schema%3AisPartOf%20%3Chttps%3A%2F%2Fen.wikipedia.org%2F%3E%20.%7D%20%23If%20collected%20item%20has%20link%20to%20English%20Wikipedia%2C%20show%20that%0A%09SERVICE%20wikibase%3Alabel%20%7B%20bd%3AserviceParam%20wikibase%3Alanguage%20%22en%22%20%20%7D%20%23Show%20label%20in%20this%20language.%20%22en%22%20is%20English.%20%20%20%0A%7D%0ALIMIT%201000 uses]</span>)</li>"
ii = ii + 1
else break
end
end
result = result.."</ul>"
return result
end
function p.tuProperty(frame)
local parent = frame.getParent(frame)
local result = '<ul>'
local ii = 1
while true do
local p_num = mw.text.trim(parent.args[ii] or '')
if p_num ~= '' then
local label = mw.wikibase.getLabel(p_num) or "NO LABEL"
result = result .. "<li><span style='font-size:90%;line-height:1;'>●</span> <b>[[d:Property:" .. p_num .. "|" .. label .. "]]</b> <span style='font-size:90%;'>([[d:Property talk:" .. string.upper(p_num) .. "|" .. p_num .. "]])</span></li>"
ii = ii + 1
else break
end
end
result = result.."</ul>"
return result
end
return p
8b704fdbc00fb94538c56f18c5c01f1e72963ea9
Module:Transclusion count/data/C
828
308
623
622
2023-09-14T01:43:34Z
Ilovethehitgameomori
2
1 revision imported
Scribunto
text/plain
return {
["C"] = 652000,
["C-Class"] = 17000,
["C-SPAN"] = 12000,
["C-cmn"] = 2600,
["C-pl"] = 52000,
["C."] = 4100,
["CAN"] = 20000,
["CANelec"] = 14000,
["CANelec/gain"] = 2600,
["CANelec/hold"] = 4900,
["CANelec/source"] = 7100,
["CANelec/top"] = 6400,
["CANelec/total"] = 6200,
["CAS"] = 3800,
["CBB_Standings_End"] = 15000,
["CBB_Standings_Entry"] = 15000,
["CBB_Standings_Start"] = 15000,
["CBB_Yearly_Record_End"] = 3100,
["CBB_Yearly_Record_Entry"] = 3100,
["CBB_Yearly_Record_Start"] = 3000,
["CBB_Yearly_Record_Subhead"] = 3700,
["CBB_Yearly_Record_Subtotal"] = 2900,
["CBB_roster/Footer"] = 8000,
["CBB_roster/Header"] = 8000,
["CBB_roster/Player"] = 8000,
["CBB_schedule_end"] = 11000,
["CBB_schedule_entry"] = 11000,
["CBB_schedule_start"] = 11000,
["CBB_standings_end"] = 16000,
["CBB_standings_entry"] = 15000,
["CBB_standings_start"] = 15000,
["CBB_yearly_record_end"] = 4100,
["CBB_yearly_record_end/legend"] = 3600,
["CBB_yearly_record_entry"] = 4100,
["CBB_yearly_record_start"] = 4000,
["CBB_yearly_record_subhead"] = 3800,
["CBB_yearly_record_subtotal"] = 3800,
["CBSB_Standings_End"] = 4300,
["CBSB_Standings_Entry"] = 4300,
["CBSB_Standings_Start"] = 4300,
["CBSB_link"] = 3500,
["CBSB_standings_end"] = 4400,
["CBSB_standings_entry"] = 4500,
["CBSB_standings_start"] = 4500,
["CC0"] = 3800,
["CENTURY"] = 16000,
["CFB_Standings_End"] = 34000,
["CFB_Standings_Entry"] = 34000,
["CFB_Standings_Start"] = 34000,
["CFB_Yearly_Record_End"] = 6900,
["CFB_Yearly_Record_End/legend"] = 2400,
["CFB_Yearly_Record_Entry"] = 6900,
["CFB_Yearly_Record_Start"] = 6900,
["CFB_Yearly_Record_Subhead"] = 6900,
["CFB_Yearly_Record_Subtotal"] = 6700,
["CFB_schedule"] = 26000,
["CFB_schedule_entry"] = 19000,
["CFB_standings_end"] = 34000,
["CFB_standings_entry"] = 34000,
["CFB_standings_start"] = 34000,
["CFL_Year"] = 5600,
["CGF_year"] = 2600,
["CHE"] = 10000,
["CHI"] = 2700,
["CHL"] = 3600,
["CHN"] = 11000,
["CN"] = 3400,
["CO2"] = 3300,
["COI"] = 14000,
["COIUL"] = 129000,
["COI_editnotice"] = 6700,
["COL"] = 5000,
["COLON"] = 13000,
["CRI"] = 2200,
["CRO"] = 5400,
["CSK"] = 2800,
["CSS_image_crop"] = 4700,
["CUB"] = 3700,
["CURRENTDATE"] = 3600,
["CURRENTMINUTE"] = 2500,
["CYP"] = 2100,
["CZE"] = 15000,
["Calendar"] = 2400,
["California/color"] = 12000,
["Call_sign_disambiguation"] = 3100,
["Campaignbox"] = 23000,
["CanProvName"] = 14000,
["CanadaByProvinceCatNav"] = 9800,
["CanadaProvinceThe"] = 4000,
["Canadian_English"] = 7000,
["Canadian_Parliament_links"] = 5100,
["Canadian_election_result"] = 14000,
["Canadian_election_result/gain"] = 2700,
["Canadian_election_result/hold"] = 5000,
["Canadian_election_result/source"] = 8200,
["Canadian_election_result/top"] = 14000,
["Canadian_election_result/total"] = 11000,
["Canadian_party_colour"] = 8200,
["Canadian_party_colour/colour"] = 18000,
["Canadian_party_colour/colour/default"] = 18000,
["Canadian_party_colour/name"] = 15000,
["Canadian_party_colour/name/default"] = 6900,
["Canned_search"] = 5700,
["Cascite"] = 15000,
["Caselaw_source"] = 4000,
["Cassini-Ehess"] = 2600,
["Cast_listing"] = 16000,
["Castlist"] = 2400,
["Cat"] = 354000,
["CatAutoTOC"] = 660000,
["CatAutoTOC/core"] = 659000,
["CatRel"] = 3800,
["CatTrack"] = 3100,
["Cat_class"] = 6700,
["Cat_in_use"] = 50000,
["Cat_main"] = 200000,
["Cat_more"] = 101000,
["Cat_more_if_exists"] = 41000,
["Cat_see_also"] = 3500,
["Catalog_lookup_link"] = 516000,
["Category-Class"] = 14000,
["Category-inline"] = 9100,
["Category_TOC"] = 72000,
["Category_TOC/tracking"] = 72000,
["Category_U.S._State_elections_by_year"] = 7300,
["Category_U.S._State_elections_by_year/core"] = 7300,
["Category_class"] = 36000,
["Category_class/column"] = 36000,
["Category_class/second_row_column"] = 36000,
["Category_described_in_year"] = 5700,
["Category_diffuse"] = 7800,
["Category_disambiguation"] = 2400,
["Category_disambiguation/category_link"] = 2400,
["Category_explanation"] = 236000,
["Category_handler"] = 3310000,
["Category_ifexist"] = 5000,
["Category_importance"] = 10000,
["Category_importance/column"] = 10000,
["Category_importance/second_row_column"] = 10000,
["Category_link"] = 136000,
["Category_link_with_count"] = 6800,
["Category_more"] = 112000,
["Category_more_if_exists"] = 41000,
["Category_ordered_by_date"] = 11000,
["Category_other"] = 903000,
["Category_redirect"] = 109000,
["Category_see_also"] = 39000,
["Category_see_also/Category_pair_check"] = 39000,
["Category_see_also_if_exists"] = 73000,
["Category_see_also_if_exists_2"] = 88000,
["Category_title"] = 2400,
["Catexp"] = 7900,
["CathEncy"] = 2200,
["Catholic"] = 4000,
["Catholic_Encyclopedia"] = 5100,
["Catmain"] = 28000,
["Catmore"] = 9400,
["Cbb_link"] = 8700,
["Cbignore"] = 100000,
["Cbsb_link"] = 2100,
["Cc-by-2.5"] = 3800,
["Cc-by-3.0"] = 8500,
["Cc-by-sa-2.5"] = 2600,
["Cc-by-sa-2.5,2.0,1.0"] = 2600,
["Cc-by-sa-3.0"] = 25000,
["Cc-by-sa-3.0,2.5,2.0,1.0"] = 2200,
["Cc-by-sa-3.0-migrated"] = 24000,
["Cc-by-sa-4.0"] = 10000,
["Cc-zero"] = 3700,
["CensusAU"] = 9100,
["Census_2016_AUS"] = 6900,
["Cent"] = 5800,
["Center"] = 288000,
["Centralized_discussion"] = 6100,
["Centralized_discussion/core"] = 6100,
["Centralized_discussion/styles.css"] = 6100,
["Centre"] = 3200,
["Century"] = 2100,
["Century_name_from_decade"] = 2400,
["Century_name_from_decade_or_year"] = 77000,
["Century_name_from_title_decade"] = 7600,
["Century_name_from_title_year"] = 7600,
["Certification_Cite/Title"] = 30000,
["Certification_Cite/URL"] = 34000,
["Certification_Cite/archivedate"] = 6100,
["Certification_Cite/archiveurl"] = 6100,
["Certification_Cite_Ref"] = 30000,
["Certification_Table_Bottom"] = 29000,
["Certification_Table_Entry"] = 30000,
["Certification_Table_Entry/Foot"] = 29000,
["Certification_Table_Entry/Foot/helper"] = 29000,
["Certification_Table_Entry/Region"] = 30000,
["Certification_Table_Entry/Sales"] = 29000,
["Certification_Table_Entry/Sales/AustrianPeriod"] = 2000,
["Certification_Table_Entry/Sales/BelgianPeriod"] = 2100,
["Certification_Table_Entry/Sales/DanishPeriod"] = 3300,
["Certification_Table_Entry/Sales/DanishPeriodHelper1"] = 3300,
["Certification_Table_Entry/Sales/DanishPeriodHelper2"] = 3300,
["Certification_Table_Entry/Sales/GermanPeriod"] = 4000,
["Certification_Table_Entry/Sales/ItalianHelper"] = 3200,
["Certification_Table_Entry/Sales/NewZealandPeriod"] = 2100,
["Certification_Table_Entry/Sales/SwedishPeriod"] = 2100,
["Certification_Table_Separator"] = 2400,
["Certification_Table_Top"] = 30000,
["Cfb_link"] = 24000,
["Cfd_result"] = 2400,
["Cfdend"] = 4000,
["Chart"] = 4600,
["Chart/end"] = 4700,
["Chart/start"] = 4600,
["Chart_bottom"] = 3500,
["Chart_top"] = 3500,
["Check_completeness_of_transclusions"] = 19000,
["Check_talk"] = 30000,
["Check_talk_wp"] = 1370000,
["Check_winner_by_scores"] = 13000,
["CheckedSockpuppet"] = 7200,
["Checked_sockpuppet"] = 18000,
["Checkedsockpuppet"] = 5300,
["Checkip"] = 13000,
["Checkuser"] = 76000,
["Checkuserblock-account"] = 17000,
["Chem"] = 5800,
["Chem/atom"] = 5700,
["Chem/link"] = 5800,
["Chem2"] = 4900,
["Chem_molar_mass"] = 18000,
["Chem_molar_mass/format"] = 18000,
["Chembox"] = 14000,
["Chembox/styles.css"] = 14000,
["Chembox_3DMet"] = 14000,
["Chembox_3DMet/format"] = 14000,
["Chembox_AllOtherNames"] = 13000,
["Chembox_AllOtherNames/format"] = 13000,
["Chembox_Appearance"] = 6100,
["Chembox_BoilingPt"] = 3800,
["Chembox_CASNo"] = 14000,
["Chembox_CASNo/format"] = 14000,
["Chembox_CalcTemperatures"] = 6700,
["Chembox_ChEBI"] = 14000,
["Chembox_ChEBI/format"] = 14000,
["Chembox_ChEMBL"] = 14000,
["Chembox_ChEMBL/format"] = 14000,
["Chembox_ChemSpiderID"] = 14000,
["Chembox_ChemSpiderID/format"] = 14000,
["Chembox_CompTox"] = 14000,
["Chembox_CompTox/format"] = 14000,
["Chembox_Datapage_check"] = 14000,
["Chembox_Density"] = 4900,
["Chembox_DrugBank"] = 14000,
["Chembox_DrugBank/format"] = 14000,
["Chembox_ECHA"] = 7600,
["Chembox_ECNumber"] = 14000,
["Chembox_ECNumber/format"] = 14000,
["Chembox_Elements"] = 14000,
["Chembox_Elements/molecular_formula"] = 18000,
["Chembox_Footer"] = 14000,
["Chembox_Footer/tracking"] = 14000,
["Chembox_GHS_(set)"] = 3500,
["Chembox_Hazards"] = 12000,
["Chembox_IUPHAR_ligand"] = 14000,
["Chembox_IUPHAR_ligand/format"] = 14000,
["Chembox_Identifiers"] = 14000,
["Chembox_InChI"] = 13000,
["Chembox_InChI/format"] = 13000,
["Chembox_Indexlist"] = 14000,
["Chembox_Jmol"] = 14000,
["Chembox_Jmol/format"] = 14000,
["Chembox_KEGG"] = 14000,
["Chembox_KEGG/format"] = 14000,
["Chembox_MeltingPt"] = 5800,
["Chembox_Properties"] = 14000,
["Chembox_PubChem"] = 14000,
["Chembox_PubChem/format"] = 14000,
["Chembox_RTECS"] = 14000,
["Chembox_RTECS/format"] = 14000,
["Chembox_Related"] = 3400,
["Chembox_SMILES"] = 13000,
["Chembox_SMILES/format"] = 13000,
["Chembox_SolubilityInWater"] = 3900,
["Chembox_Structure"] = 2100,
["Chembox_UNII"] = 14000,
["Chembox_UNII/format"] = 14000,
["Chembox_headerbar"] = 14000,
["Chembox_image"] = 13000,
["Chembox_image_cell"] = 12000,
["Chembox_image_sbs"] = 13000,
["Chembox_parametercheck"] = 13000,
["Chembox_setDatarow"] = 4500,
["Chembox_setHeader"] = 4500,
["Chembox_templatePar/formatPreviewMessage"] = 14000,
["Chembox_verification"] = 7100,
["Chemicals"] = 7400,
["Chemistry"] = 3100,
["Chemspidercite"] = 11000,
["Chessgames_player"] = 3600,
["Chinese"] = 7200,
["Chr"] = 9100,
["ChristianityWikiProject"] = 5700,
["Circa"] = 71000,
["Circular_reference"] = 4100,
["Citation"] = 404000,
["Citation/make_link"] = 6100,
["Citation/styles.css"] = 46000,
["Citation_needed"] = 546000,
["Citation_needed_span"] = 3500,
["Citation_style"] = 4200,
["Cite_AV_media"] = 43000,
["Cite_AV_media_notes"] = 26000,
["Cite_Appletons'"] = 2400,
["Cite_Australian_Dictionary_of_Biography"] = 3300,
["Cite_Catholic_Encyclopedia"] = 8300,
["Cite_Colledge2006"] = 3100,
["Cite_DCB"] = 2800,
["Cite_DNB"] = 18000,
["Cite_EB1911"] = 25000,
["Cite_GNIS"] = 2300,
["Cite_Gaia_DR2"] = 2100,
["Cite_IUCN"] = 58000,
["Cite_Instagram"] = 2100,
["Cite_Jewish_Encyclopedia"] = 2900,
["Cite_NIE"] = 3600,
["Cite_NSW_Parliament"] = 3300,
["Cite_NSW_SHR"] = 2600,
["Cite_ODNB"] = 18000,
["Cite_Q"] = 44000,
["Cite_QHR"] = 3000,
["Cite_QPN"] = 4000,
["Cite_Rowlett"] = 2500,
["Cite_Russian_law"] = 7800,
["Cite_Ryan"] = 3200,
["Cite_Sports-Reference"] = 54000,
["Cite_USGov"] = 24000,
["Cite_WoRMS"] = 5500,
["Cite_act"] = 2700,
["Cite_arXiv"] = 5000,
["Cite_bcgnis"] = 3100,
["Cite_book"] = 1600000,
["Cite_certification"] = 34000,
["Cite_cgndb"] = 3300,
["Cite_comic"] = 2100,
["Cite_conference"] = 16000,
["Cite_court"] = 5400,
["Cite_court/styles.css"] = 5400,
["Cite_dictionary"] = 3600,
["Cite_encyclopedia"] = 204000,
["Cite_episode"] = 17000,
["Cite_gnis"] = 34000,
["Cite_interview"] = 7800,
["Cite_iucn"] = 58000,
["Cite_journal"] = 959000,
["Cite_magazine"] = 273000,
["Cite_manual"] = 2000,
["Cite_map"] = 40000,
["Cite_news"] = 1520000,
["Cite_newspaper_The_Times"] = 6600,
["Cite_patent"] = 5500,
["Cite_patent/authors"] = 4400,
["Cite_patent/core"] = 5800,
["Cite_peakbagger"] = 4600,
["Cite_podcast"] = 3900,
["Cite_press_release"] = 65000,
["Cite_report"] = 36000,
["Cite_rowlett"] = 2500,
["Cite_simbad"] = 4500,
["Cite_sports-reference"] = 59000,
["Cite_thesis"] = 32000,
["Cite_tweet"] = 36000,
["Cite_video"] = 12000,
["Cite_video_game"] = 3000,
["Cite_web"] = 4580000,
["Cite_wikisource"] = 5600,
["Cite_wikisource/make_link"] = 58000,
["Civil_navigation"] = 2800,
["Cl"] = 133000,
["Clade"] = 7600,
["Clade/styles.css"] = 7600,
["Clarify"] = 41000,
["Class"] = 85000,
["Class/colour"] = 9160000,
["Class/icon"] = 21000,
["Class_mask"] = 8240000,
["Class_mask/b"] = 322000,
["Classical"] = 6900,
["Classicon"] = 4700,
["Clc"] = 5900,
["Cleanup"] = 10000,
["Cleanup_bare_URLs"] = 27000,
["Cleanup_reorganize"] = 2500,
["Cleanup_rewrite"] = 5900,
["Clear"] = 2960000,
["Clear-left"] = 4100,
["Clear_left"] = 31000,
["Clear_right"] = 2600,
["Clerk-Note"] = 9900,
["Clerk_Request"] = 2000,
["Clerknote"] = 7500,
["Clickable_button"] = 16000,
["Clickable_button_2"] = 961000,
["Closed_access"] = 4500,
["Closed_rfc_top"] = 2200,
["Clr"] = 3600,
["Clubplayerscat"] = 8500,
["Cmbox"] = 420000,
["Cn"] = 94000,
["Cnote2"] = 2300,
["Cnote2_Begin"] = 2300,
["Cnote2_End"] = 2300,
["Coat_of_arms"] = 5100,
["Cob"] = 12000,
["Code"] = 51000,
["Col-1-of-2"] = 2400,
["Col-2"] = 171000,
["Col-2-of-2"] = 2300,
["Col-3"] = 10000,
["Col-4"] = 3500,
["Col-begin"] = 213000,
["Col-break"] = 211000,
["Col-end"] = 212000,
["Col-float"] = 2700,
["Col-float-break"] = 2600,
["Col-float-end"] = 2700,
["Col-float/styles.css"] = 2700,
["Col-start"] = 20000,
["Colbegin"] = 21000,
["Colend"] = 23000,
["Collapse"] = 9700,
["Collapse_bottom"] = 52000,
["Collapse_top"] = 52000,
["Collapsebottom"] = 3800,
["Collapsetop"] = 3800,
["Collapsible_list"] = 53000,
["Collapsible_option"] = 135000,
["College"] = 8900,
["CollegePrimaryHeader"] = 6100,
["CollegePrimaryStyle"] = 97000,
["CollegeSecondaryStyle"] = 3600,
["College_Athlete_Recruit_End"] = 2900,
["College_Athlete_Recruit_Entry"] = 3000,
["College_Athlete_Recruit_Start"] = 3000,
["College_athlete_recruit_end"] = 4000,
["College_athlete_recruit_entry"] = 4200,
["College_athlete_recruit_start"] = 4200,
["College_color_list"] = 3900,
["Colon"] = 18000,
["Color"] = 467000,
["Color_box"] = 73000,
["Colorbox"] = 3600,
["Colorbull"] = 4900,
["Colored_link"] = 63000,
["Colors"] = 3800,
["Colour"] = 5800,
["Colour_box"] = 2000,
["Coloured_link"] = 7000,
["Column"] = 2400,
["Column/styles.css"] = 2400,
["Columns-end"] = 2200,
["Columns-list"] = 97000,
["Columns-start"] = 2200,
["Comedy"] = 2500,
["Comic_Book_DB"] = 3500,
["Comicbookdb"] = 3500,
["Comics-replaceability"] = 2900,
["Comics_infobox_sec/creator_nat"] = 2800,
["Comics_infobox_sec/formcat"] = 3200,
["Comics_infobox_sec/genre"] = 4000,
["Comics_infobox_sec/genrecat"] = 3700,
["Comics_infobox_sec/styles.css"] = 8100,
["Comicsproj"] = 28000,
["Comma_separated_entries"] = 429000,
["Comma_separated_values"] = 47000,
["Comment"] = 5200,
["Committed_identity"] = 3000,
["Committed_identity/styles.css"] = 3000,
["Commons"] = 66000,
["Commons-inline"] = 20000,
["Commons_cat"] = 48000,
["Commons_category"] = 846000,
["Commons_category-inline"] = 148000,
["Commons_category_inline"] = 6100,
["Commonscat"] = 65000,
["Commonscat-inline"] = 17000,
["Commonscat_inline"] = 2400,
["Commonscatinline"] = 6800,
["Compact_TOC"] = 7000,
["Compact_ToC"] = 4800,
["Compare"] = 5200,
["Compare_image_with_Wikidata"] = 10000,
["Composition_bar"] = 10000,
["Confirmed"] = 16000,
["Confused"] = 2800,
["Confusing"] = 2400,
["CongBio"] = 9600,
["CongLinks"] = 4600,
["Connected_contributor"] = 18000,
["Connected_contributor_(paid)"] = 6900,
["Constellation_navbox"] = 6800,
["Container"] = 11000,
["Container_cat"] = 7600,
["Container_category"] = 42000,
["Containercat"] = 2600,
["Contains_special_characters"] = 4100,
["Contains_special_characters/core"] = 4100,
["Contains_special_characters/styles.css"] = 4100,
["Content_category"] = 7600,
["Contentious_topics/list"] = 13000,
["Contentious_topics/page_restriction_editnotice_base"] = 2600,
["Contentious_topics/page_restriction_talk_notice_base"] = 3600,
["Contentious_topics/talk_notice"] = 6700,
["Context"] = 2700,
["Continent2continental"] = 16000,
["Continent_adjective_to_noun"] = 2200,
["Controversial"] = 3300,
["Convert"] = 1170000,
["Convinfobox"] = 205000,
["Convinfobox/2"] = 17000,
["Convinfobox/3"] = 119000,
["Convinfobox/pri2"] = 63000,
["Convinfobox/prisec2"] = 3100,
["Convinfobox/prisec3"] = 26000,
["Convinfobox/sec2"] = 9300,
["Coord"] = 1330000,
["Coord_missing"] = 95000,
["Coord_missing/CheckCat"] = 94000,
["Coords"] = 7600,
["Copied"] = 19000,
["Copy_edit"] = 2600,
["Copy_to_Wikimedia_Commons"] = 109000,
["Copyvios"] = 4400,
["Cospar"] = 2600,
["Cot"] = 12000,
["Count"] = 665000,
["Country2continent"] = 36000,
["Country2continental"] = 2400,
["Country2nationality"] = 344000,
["CountryPrefixThe"] = 109000,
["Country_abbreviation"] = 88000,
["Country_alias"] = 16000,
["Country_at_games_navbox"] = 2700,
["Country_at_games_navbox/below"] = 2700,
["Country_data"] = 7100,
["Country_data_AFG"] = 2300,
["Country_data_ALB"] = 6700,
["Country_data_ALG"] = 9400,
["Country_data_AND"] = 3000,
["Country_data_ANG"] = 3900,
["Country_data_ARG"] = 47000,
["Country_data_ARM"] = 7400,
["Country_data_AUS"] = 76000,
["Country_data_AUT"] = 46000,
["Country_data_AZE"] = 9200,
["Country_data_Afghanistan"] = 12000,
["Country_data_Alaska"] = 2100,
["Country_data_Albania"] = 20000,
["Country_data_Alberta"] = 3700,
["Country_data_Algeria"] = 25000,
["Country_data_American_Samoa"] = 2900,
["Country_data_Andorra"] = 8000,
["Country_data_Angola"] = 12000,
["Country_data_Anguilla"] = 2500,
["Country_data_Antigua_and_Barbuda"] = 6200,
["Country_data_Apulia"] = 7900,
["Country_data_Argentina"] = 81000,
["Country_data_Arizona"] = 2300,
["Country_data_Arkansas"] = 2000,
["Country_data_Armenia"] = 22000,
["Country_data_Aruba"] = 3600,
["Country_data_Australia"] = 127000,
["Country_data_Austria"] = 79000,
["Country_data_Azerbaijan"] = 28000,
["Country_data_BAH"] = 4000,
["Country_data_BAN"] = 3900,
["Country_data_BAR"] = 2400,
["Country_data_BEL"] = 51000,
["Country_data_BER"] = 2300,
["Country_data_BHR"] = 4600,
["Country_data_BIH"] = 13000,
["Country_data_BLR"] = 24000,
["Country_data_BOL"] = 5800,
["Country_data_BOT"] = 2400,
["Country_data_BRA"] = 58000,
["Country_data_BUL"] = 26000,
["Country_data_Bahamas"] = 9800,
["Country_data_Bahrain"] = 12000,
["Country_data_Bangladesh"] = 19000,
["Country_data_Barbados"] = 8100,
["Country_data_Belarus"] = 44000,
["Country_data_Belgium"] = 89000,
["Country_data_Belize"] = 5300,
["Country_data_Benin"] = 7400,
["Country_data_Bermuda"] = 5800,
["Country_data_Bhutan"] = 4700,
["Country_data_Bolivia"] = 15000,
["Country_data_Bosnia_and_Herzegovina"] = 29000,
["Country_data_Botswana"] = 9200,
["Country_data_Brazil"] = 102000,
["Country_data_British_Columbia"] = 3400,
["Country_data_British_Raj"] = 2300,
["Country_data_British_Virgin_Islands"] = 3300,
["Country_data_Brunei"] = 6300,
["Country_data_Bulgaria"] = 52000,
["Country_data_Burkina_Faso"] = 10000,
["Country_data_Burma"] = 2700,
["Country_data_Burundi"] = 6100,
["Country_data_CAM"] = 2100,
["Country_data_CAN"] = 59000,
["Country_data_CGO"] = 2400,
["Country_data_CHE"] = 4700,
["Country_data_CHI"] = 18000,
["Country_data_CHL"] = 2100,
["Country_data_CHN"] = 42000,
["Country_data_CIV"] = 8200,
["Country_data_CMR"] = 8800,
["Country_data_COD"] = 3200,
["Country_data_COL"] = 25000,
["Country_data_CPV"] = 2100,
["Country_data_CRC"] = 6700,
["Country_data_CRO"] = 33000,
["Country_data_CUB"] = 10000,
["Country_data_CYP"] = 9200,
["Country_data_CZE"] = 46000,
["Country_data_California"] = 5900,
["Country_data_Cambodia"] = 8900,
["Country_data_Cameroon"] = 18000,
["Country_data_Canada"] = 122000,
["Country_data_Cape_Verde"] = 6400,
["Country_data_Castile_and_León"] = 2000,
["Country_data_Catalonia"] = 3100,
["Country_data_Cayman_Islands"] = 4200,
["Country_data_Central_African_Republic"] = 5100,
["Country_data_Chad"] = 5600,
["Country_data_Chile"] = 40000,
["Country_data_China"] = 84000,
["Country_data_Chinese_Taipei"] = 20000,
["Country_data_Colombia"] = 46000,
["Country_data_Colorado"] = 5700,
["Country_data_Comoros"] = 4500,
["Country_data_Confederate_States_of_America"] = 3100,
["Country_data_Connecticut"] = 3200,
["Country_data_Cook_Islands"] = 3800,
["Country_data_Costa_Rica"] = 18000,
["Country_data_Croatia"] = 57000,
["Country_data_Cuba"] = 23000,
["Country_data_Curaçao"] = 3600,
["Country_data_Cyprus"] = 23000,
["Country_data_Czech_Republic"] = 82000,
["Country_data_Czechoslovakia"] = 19000,
["Country_data_DEN"] = 34000,
["Country_data_DEU"] = 8700,
["Country_data_DNK"] = 3600,
["Country_data_DOM"] = 7300,
["Country_data_Democratic_Republic_of_the_Congo"] = 13000,
["Country_data_Denmark"] = 69000,
["Country_data_Djibouti"] = 4600,
["Country_data_Dominica"] = 4300,
["Country_data_Dominican_Republic"] = 17000,
["Country_data_ECU"] = 12000,
["Country_data_EGY"] = 14000,
["Country_data_ENG"] = 47000,
["Country_data_ESA"] = 2300,
["Country_data_ESP"] = 73000,
["Country_data_EST"] = 14000,
["Country_data_ETH"] = 3600,
["Country_data_EU"] = 3700,
["Country_data_East_Germany"] = 14000,
["Country_data_East_Timor"] = 5000,
["Country_data_Ecuador"] = 25000,
["Country_data_Egypt"] = 32000,
["Country_data_El_Salvador"] = 13000,
["Country_data_Empire_of_Japan"] = 4000,
["Country_data_England"] = 97000,
["Country_data_Equatorial_Guinea"] = 5200,
["Country_data_Eritrea"] = 5500,
["Country_data_Estonia"] = 35000,
["Country_data_Eswatini"] = 5100,
["Country_data_Ethiopia"] = 13000,
["Country_data_Europe"] = 2400,
["Country_data_European_Union"] = 7400,
["Country_data_FIJ"] = 3900,
["Country_data_FIN"] = 34000,
["Country_data_FRA"] = 99000,
["Country_data_FRG"] = 15000,
["Country_data_FRO"] = 2100,
["Country_data_FR_Yugoslavia"] = 4000,
["Country_data_Faroe_Islands"] = 5500,
["Country_data_Federated_States_of_Micronesia"] = 3100,
["Country_data_Fiji"] = 12000,
["Country_data_Finland"] = 69000,
["Country_data_Florida"] = 6600,
["Country_data_France"] = 194000,
["Country_data_French_Guiana"] = 2100,
["Country_data_French_Polynesia"] = 3800,
["Country_data_GAB"] = 2400,
["Country_data_GAM"] = 2100,
["Country_data_GBR"] = 55000,
["Country_data_GDR"] = 8400,
["Country_data_GEO"] = 14000,
["Country_data_GER"] = 82000,
["Country_data_GHA"] = 9900,
["Country_data_GRE"] = 26000,
["Country_data_GUA"] = 5100,
["Country_data_GUI"] = 3200,
["Country_data_GUY"] = 2300,
["Country_data_Gabon"] = 7600,
["Country_data_Gambia"] = 6900,
["Country_data_Georgia"] = 10000,
["Country_data_Georgia_(U.S._state)"] = 2800,
["Country_data_Georgia_(country)"] = 29000,
["Country_data_German_Empire"] = 5400,
["Country_data_Germany"] = 152000,
["Country_data_Ghana"] = 24000,
["Country_data_Gibraltar"] = 5000,
["Country_data_Great_Britain"] = 75000,
["Country_data_Greece"] = 58000,
["Country_data_Greenland"] = 2900,
["Country_data_Grenada"] = 5300,
["Country_data_Guadeloupe"] = 2800,
["Country_data_Guam"] = 4700,
["Country_data_Guatemala"] = 13000,
["Country_data_Guernsey"] = 2200,
["Country_data_Guinea"] = 8500,
["Country_data_Guinea-Bissau"] = 5100,
["Country_data_Guyana"] = 7500,
["Country_data_HAI"] = 3200,
["Country_data_HKG"] = 13000,
["Country_data_HON"] = 4400,
["Country_data_HUN"] = 37000,
["Country_data_Haiti"] = 8800,
["Country_data_Honduras"] = 12000,
["Country_data_Hong_Kong"] = 26000,
["Country_data_Hungary"] = 71000,
["Country_data_IDN"] = 5000,
["Country_data_INA"] = 10000,
["Country_data_IND"] = 30000,
["Country_data_IRE"] = 11000,
["Country_data_IRI"] = 5500,
["Country_data_IRL"] = 21000,
["Country_data_IRN"] = 6300,
["Country_data_IRQ"] = 4200,
["Country_data_ISL"] = 8700,
["Country_data_ISR"] = 21000,
["Country_data_ITA"] = 87000,
["Country_data_Iceland"] = 23000,
["Country_data_Idaho"] = 2000,
["Country_data_Illinois"] = 4400,
["Country_data_India"] = 110000,
["Country_data_Indiana"] = 2700,
["Country_data_Indonesia"] = 37000,
["Country_data_Iowa"] = 2900,
["Country_data_Iran"] = 92000,
["Country_data_Iraq"] = 14000,
["Country_data_Ireland"] = 35000,
["Country_data_Isle_of_Man"] = 2900,
["Country_data_Israel"] = 46000,
["Country_data_Italy"] = 146000,
["Country_data_Ivory_Coast"] = 18000,
["Country_data_JAM"] = 9900,
["Country_data_JOR"] = 4100,
["Country_data_JP"] = 8100,
["Country_data_JPN"] = 60000,
["Country_data_Jamaica"] = 21000,
["Country_data_Japan"] = 119000,
["Country_data_Jersey"] = 2600,
["Country_data_Jordan"] = 12000,
["Country_data_KAZ"] = 20000,
["Country_data_KEN"] = 7500,
["Country_data_KGZ"] = 3800,
["Country_data_KOR"] = 31000,
["Country_data_KOS"] = 2400,
["Country_data_KSA"] = 6100,
["Country_data_KUW"] = 4100,
["Country_data_Kazakhstan"] = 34000,
["Country_data_Kenya"] = 20000,
["Country_data_Kingdom_of_France"] = 2100,
["Country_data_Kingdom_of_Great_Britain"] = 4800,
["Country_data_Kingdom_of_Italy"] = 4200,
["Country_data_Kiribati"] = 3000,
["Country_data_Kosovo"] = 8900,
["Country_data_Kuwait"] = 11000,
["Country_data_Kyrgyzstan"] = 9400,
["Country_data_LAT"] = 15000,
["Country_data_LBN"] = 2400,
["Country_data_LIB"] = 2600,
["Country_data_LIE"] = 3200,
["Country_data_LIT"] = 3100,
["Country_data_LTU"] = 12000,
["Country_data_LUX"] = 11000,
["Country_data_LVA"] = 2600,
["Country_data_Laos"] = 7600,
["Country_data_Latvia"] = 32000,
["Country_data_Lebanon"] = 15000,
["Country_data_Lesotho"] = 5200,
["Country_data_Liberia"] = 7300,
["Country_data_Libya"] = 8700,
["Country_data_Liechtenstein"] = 7800,
["Country_data_Lithuania"] = 32000,
["Country_data_Luxembourg"] = 24000,
["Country_data_MAC"] = 2500,
["Country_data_MAD"] = 2000,
["Country_data_MAR"] = 12000,
["Country_data_MAS"] = 11000,
["Country_data_MDA"] = 7800,
["Country_data_MEX"] = 30000,
["Country_data_MGL"] = 3000,
["Country_data_MKD"] = 7600,
["Country_data_MLI"] = 4400,
["Country_data_MLT"] = 5600,
["Country_data_MNE"] = 7900,
["Country_data_MON"] = 3800,
["Country_data_MOZ"] = 2200,
["Country_data_MRI"] = 2100,
["Country_data_MYA"] = 3000,
["Country_data_MYS"] = 3800,
["Country_data_Macau"] = 6400,
["Country_data_Macedonia"] = 4900,
["Country_data_Madagascar"] = 9100,
["Country_data_Malawi"] = 5700,
["Country_data_Malaysia"] = 36000,
["Country_data_Maldives"] = 6200,
["Country_data_Mali"] = 12000,
["Country_data_Malta"] = 17000,
["Country_data_Manitoba"] = 2500,
["Country_data_Marshall_Islands"] = 3700,
["Country_data_Martinique"] = 2900,
["Country_data_Maryland"] = 3000,
["Country_data_Massachusetts"] = 3000,
["Country_data_Mauritania"] = 5900,
["Country_data_Mauritius"] = 8100,
["Country_data_Mexico"] = 67000,
["Country_data_Michigan"] = 4300,
["Country_data_Minnesota"] = 3700,
["Country_data_Missouri"] = 2100,
["Country_data_Moldova"] = 19000,
["Country_data_Monaco"] = 10000,
["Country_data_Mongolia"] = 9900,
["Country_data_Montana"] = 2100,
["Country_data_Montenegro"] = 18000,
["Country_data_Montserrat"] = 2500,
["Country_data_Morocco"] = 28000,
["Country_data_Mozambique"] = 7400,
["Country_data_Myanmar"] = 14000,
["Country_data_NAM"] = 3400,
["Country_data_NED"] = 61000,
["Country_data_NEP"] = 2900,
["Country_data_NGA"] = 8300,
["Country_data_NGR"] = 8100,
["Country_data_NIR"] = 10000,
["Country_data_NLD"] = 6200,
["Country_data_NOR"] = 30000,
["Country_data_NZ"] = 3200,
["Country_data_NZL"] = 32000,
["Country_data_Namibia"] = 9900,
["Country_data_Nauru"] = 2500,
["Country_data_Nazi_Germany"] = 9800,
["Country_data_Nepal"] = 17000,
["Country_data_Netherlands"] = 114000,
["Country_data_Netherlands_Antilles"] = 2300,
["Country_data_New_Brunswick"] = 2500,
["Country_data_New_Caledonia"] = 3400,
["Country_data_New_Jersey"] = 4200,
["Country_data_New_South_Wales"] = 5800,
["Country_data_New_York"] = 4800,
["Country_data_New_York_(state)"] = 6800,
["Country_data_New_Zealand"] = 67000,
["Country_data_Newfoundland_and_Labrador"] = 2300,
["Country_data_Nicaragua"] = 8300,
["Country_data_Niger"] = 6000,
["Country_data_Nigeria"] = 33000,
["Country_data_North_Carolina"] = 3500,
["Country_data_North_Korea"] = 13000,
["Country_data_North_Macedonia"] = 18000,
["Country_data_Northern_Ireland"] = 15000,
["Country_data_Northern_Mariana_Islands"] = 2900,
["Country_data_Norway"] = 73000,
["Country_data_Nova_Scotia"] = 2300,
["Country_data_OMA"] = 2700,
["Country_data_Ohio"] = 4800,
["Country_data_Oman"] = 8800,
["Country_data_Ontario"] = 3800,
["Country_data_Ottoman_Empire"] = 2500,
["Country_data_PAK"] = 8000,
["Country_data_PAN"] = 5800,
["Country_data_PAR"] = 10000,
["Country_data_PER"] = 12000,
["Country_data_PHI"] = 12000,
["Country_data_PHL"] = 2600,
["Country_data_PNG"] = 2700,
["Country_data_POL"] = 50000,
["Country_data_POR"] = 31000,
["Country_data_PRC"] = 2100,
["Country_data_PRK"] = 4600,
["Country_data_PRT"] = 2900,
["Country_data_PUR"] = 7300,
["Country_data_Pakistan"] = 29000,
["Country_data_Palau"] = 3000,
["Country_data_Palestine"] = 6800,
["Country_data_Panama"] = 16000,
["Country_data_Papua_New_Guinea"] = 8000,
["Country_data_Paraguay"] = 21000,
["Country_data_Pennsylvania"] = 3700,
["Country_data_People's_Republic_of_China"] = 3200,
["Country_data_Peru"] = 31000,
["Country_data_Philippines"] = 35000,
["Country_data_Poland"] = 151000,
["Country_data_Portugal"] = 69000,
["Country_data_Prussia"] = 2600,
["Country_data_Puerto_Rico"] = 17000,
["Country_data_QAT"] = 7900,
["Country_data_Qatar"] = 17000,
["Country_data_Quebec"] = 4200,
["Country_data_ROM"] = 13000,
["Country_data_ROU"] = 26000,
["Country_data_RSA"] = 32000,
["Country_data_RUS"] = 63000,
["Country_data_RWA"] = 2000,
["Country_data_Republic_of_China"] = 5600,
["Country_data_Republic_of_Ireland"] = 26000,
["Country_data_Republic_of_the_Congo"] = 7700,
["Country_data_Romania"] = 68000,
["Country_data_Russia"] = 115000,
["Country_data_Russian_Empire"] = 4900,
["Country_data_Rwanda"] = 7700,
["Country_data_SAM"] = 3100,
["Country_data_SCG"] = 3100,
["Country_data_SCO"] = 26000,
["Country_data_SEN"] = 8100,
["Country_data_SER"] = 3600,
["Country_data_SGP"] = 2800,
["Country_data_SIN"] = 7000,
["Country_data_SLO"] = 19000,
["Country_data_SLV"] = 3100,
["Country_data_SMR"] = 3100,
["Country_data_SPA"] = 4800,
["Country_data_SRB"] = 27000,
["Country_data_SRI"] = 4700,
["Country_data_SUI"] = 43000,
["Country_data_SUR"] = 2100,
["Country_data_SVK"] = 29000,
["Country_data_SVN"] = 6800,
["Country_data_SWE"] = 57000,
["Country_data_SWI"] = 4800,
["Country_data_SYR"] = 3600,
["Country_data_Saint_Kitts_and_Nevis"] = 4800,
["Country_data_Saint_Lucia"] = 4900,
["Country_data_Saint_Vincent_and_the_Grenadines"] = 4900,
["Country_data_Samoa"] = 7800,
["Country_data_San_Marino"] = 8500,
["Country_data_Saskatchewan"] = 2900,
["Country_data_Saudi_Arabia"] = 19000,
["Country_data_Scotland"] = 52000,
["Country_data_Senegal"] = 17000,
["Country_data_Serbia"] = 54000,
["Country_data_Serbia_and_Montenegro"] = 5100,
["Country_data_Seychelles"] = 5600,
["Country_data_Sierra_Leone"] = 7500,
["Country_data_Singapore"] = 27000,
["Country_data_Slovakia"] = 51000,
["Country_data_Slovenia"] = 43000,
["Country_data_Solomon_Islands"] = 4700,
["Country_data_Somalia"] = 6200,
["Country_data_South_Africa"] = 70000,
["Country_data_South_Carolina"] = 3300,
["Country_data_South_Korea"] = 67000,
["Country_data_South_Sudan"] = 4300,
["Country_data_Soviet_Union"] = 36000,
["Country_data_Spain"] = 134000,
["Country_data_Sri_Lanka"] = 19000,
["Country_data_Sudan"] = 8100,
["Country_data_Suriname"] = 6500,
["Country_data_Sweden"] = 101000,
["Country_data_Switzerland"] = 83000,
["Country_data_Syria"] = 15000,
["Country_data_São_Tomé_and_Príncipe"] = 3400,
["Country_data_TAN"] = 2500,
["Country_data_TCH"] = 11000,
["Country_data_THA"] = 21000,
["Country_data_TJK"] = 2700,
["Country_data_TKM"] = 2800,
["Country_data_TPE"] = 16000,
["Country_data_TRI"] = 4800,
["Country_data_TUN"] = 11000,
["Country_data_TUR"] = 28000,
["Country_data_Taiwan"] = 13000,
["Country_data_Tajikistan"] = 9100,
["Country_data_Tanzania"] = 13000,
["Country_data_Texas"] = 5300,
["Country_data_Thailand"] = 45000,
["Country_data_Togo"] = 7000,
["Country_data_Tonga"] = 6500,
["Country_data_Trinidad_and_Tobago"] = 14000,
["Country_data_Tunisia"] = 22000,
["Country_data_Turkey"] = 73000,
["Country_data_Turkmenistan"] = 8000,
["Country_data_Turks_and_Caicos_Islands"] = 2700,
["Country_data_Tuvalu"] = 2800,
["Country_data_U.S."] = 2100,
["Country_data_U.S._Virgin_Islands"] = 4800,
["Country_data_UAE"] = 9400,
["Country_data_UGA"] = 4100,
["Country_data_UK"] = 19000,
["Country_data_UKGBI"] = 3100,
["Country_data_UKR"] = 37000,
["Country_data_URS"] = 14000,
["Country_data_URU"] = 15000,
["Country_data_US"] = 5000,
["Country_data_USA"] = 134000,
["Country_data_USSR"] = 4500,
["Country_data_UZB"] = 12000,
["Country_data_Uganda"] = 13000,
["Country_data_Ukraine"] = 74000,
["Country_data_United_Arab_Emirates"] = 20000,
["Country_data_United_Kingdom"] = 89000,
["Country_data_United_Kingdom_of_Great_Britain_and_Ireland"] = 4400,
["Country_data_United_Nations"] = 4000,
["Country_data_United_States"] = 283000,
["Country_data_United_States_of_America"] = 5000,
["Country_data_Uruguay"] = 29000,
["Country_data_Uzbekistan"] = 21000,
["Country_data_VEN"] = 17000,
["Country_data_VIE"] = 6400,
["Country_data_Vanuatu"] = 5100,
["Country_data_Vatican_City"] = 2300,
["Country_data_Venezuela"] = 33000,
["Country_data_Vietnam"] = 23000,
["Country_data_Virginia"] = 2900,
["Country_data_WAL"] = 17000,
["Country_data_Wales"] = 34000,
["Country_data_Washington"] = 3400,
["Country_data_Washington,_D.C."] = 2200,
["Country_data_Washington_(state)"] = 3700,
["Country_data_West_Germany"] = 24000,
["Country_data_West_Indies"] = 2600,
["Country_data_Wisconsin"] = 5200,
["Country_data_YUG"] = 9700,
["Country_data_Yemen"] = 7800,
["Country_data_Yugoslavia"] = 18000,
["Country_data_ZAF"] = 4700,
["Country_data_ZAM"] = 3300,
["Country_data_ZIM"] = 8300,
["Country_data_Zambia"] = 9700,
["Country_data_Zimbabwe"] = 18000,
["Country_flagbio"] = 27000,
["Country_name"] = 23000,
["Country_showdata"] = 6200,
["Country_topics"] = 22000,
["County"] = 7900,
["County_(judet)_of_Romania"] = 3300,
["Course_assignment"] = 4200,
["Course_details"] = 6300,
["Course_instructor"] = 2500,
["Cquote"] = 37000,
["Cr"] = 4300,
["Cr-rt"] = 2100,
["Create_taxonomy/link"] = 107000,
["Cref2"] = 2300,
["Cricinfo"] = 24000,
["Cricketarchive"] = 3000,
["Crime_opentask"] = 49000,
["Croatian_Census_2011"] = 2000,
["Cross"] = 3100,
["Crossreference"] = 2600,
["Crossreference/styles.css"] = 2600,
["Csv"] = 3000,
["Ct"] = 12000,
["Curlie"] = 6700,
["Currency"] = 3600,
["Current_events"] = 8200,
["Current_events/styles.css"] = 8200,
["Currentdate"] = 22000,
["Cvt"] = 104000,
["Cycling_Archives"] = 4300,
["Cycling_archives"] = 2500,
["Cycling_data_LTS"] = 2100,
["Cycling_data_TJV"] = 2000,
["Cycling_team_link"] = 12000,
["Module:CFB_schedule"] = 26000,
["Module:CallAssert"] = 244000,
["Module:CanadaByProvinceCatNav"] = 9800,
["Module:Cat_main"] = 200000,
["Module:Catalog_lookup_link"] = 516000,
["Module:Category_described_in_year"] = 5700,
["Module:Category_described_in_year/conf"] = 5700,
["Module:Category_handler"] = 4440000,
["Module:Category_handler/blacklist"] = 4440000,
["Module:Category_handler/config"] = 4440000,
["Module:Category_handler/data"] = 4440000,
["Module:Category_handler/shared"] = 4440000,
["Module:Category_more_if_exists"] = 41000,
["Module:Category_pair"] = 6100,
["Module:Category_see_also"] = 39000,
["Module:Celestial_object_quadrangle"] = 2400,
["Module:Check_DYK_hook"] = 115000,
["Module:Check_for_clobbered_parameters"] = 1210000,
["Module:Check_for_deprecated_parameters"] = 60000,
["Module:Check_for_unknown_parameters"] = 18500000,
["Module:Check_isxn"] = 481000,
["Module:Check_winner_by_scores"] = 13000,
["Module:Checkuser"] = 76000,
["Module:Chem2"] = 4900,
["Module:Chem2/styles.css"] = 4900,
["Module:Citation/CS1"] = 5600000,
["Module:Citation/CS1/COinS"] = 5600000,
["Module:Citation/CS1/Configuration"] = 5600000,
["Module:Citation/CS1/Date_validation"] = 5600000,
["Module:Citation/CS1/Identifiers"] = 5600000,
["Module:Citation/CS1/Suggestions"] = 25000,
["Module:Citation/CS1/Utilities"] = 5600000,
["Module:Citation/CS1/Whitelist"] = 5600000,
["Module:Citation/CS1/styles.css"] = 5740000,
["Module:Cite_IUCN"] = 58000,
["Module:Cite_Q"] = 44000,
["Module:Cite_tweet"] = 36000,
["Module:Cite_web"] = 40000,
["Module:Clade"] = 7600,
["Module:Class"] = 10300000,
["Module:Class/definition.json"] = 10300000,
["Module:Class/styles.css"] = 9390000,
["Module:Class_mask"] = 10500000,
["Module:Clickable_button_2"] = 961000,
["Module:Collapsible_list"] = 55000,
["Module:College_color"] = 128000,
["Module:College_color/data"] = 128000,
["Module:Color_contrast"] = 501000,
["Module:Color_contrast/colors"] = 503000,
["Module:Commons_link"] = 258000,
["Module:Complex_date"] = 66000,
["Module:Convert"] = 1240000,
["Module:Convert/data"] = 1240000,
["Module:Convert/helper"] = 8700,
["Module:Convert/text"] = 1240000,
["Module:Convert/wikidata"] = 3300,
["Module:Convert/wikidata/data"] = 3300,
["Module:ConvertNumeric"] = 15000,
["Module:Convert_character_width"] = 2800,
["Module:Convert_character_width/data"] = 2800,
["Module:Coordinates"] = 1340000,
["Module:Coordinates/styles.css"] = 1340000,
["Module:Copied"] = 19000,
["Module:Count_banners"] = 48000,
["Module:CountryAdjectiveDemonym"] = 45000,
["Module:CountryAdjectiveDemonym/Adjectives"] = 45000,
["Module:CountryAdjectiveDemonym/Demonyms"] = 45000,
["Module:CountryAdjectiveDemonym/The"] = 45000,
["Module:CountryData"] = 143000,
["Module:CountryData/cacheA"] = 12000,
["Module:CountryData/cacheB"] = 8300,
["Module:CountryData/cacheC"] = 12000,
["Module:CountryData/cacheD"] = 4500,
["Module:CountryData/cacheE"] = 2800,
["Module:CountryData/cacheF"] = 2600,
["Module:CountryData/cacheG"] = 2700,
["Module:CountryData/summary"] = 143000,
["Module:Country_adjective"] = 4300,
["Module:Country_alias"] = 52000,
["Module:Country_alias/data"] = 52000,
["Module:Currency"] = 3600,
["Module:Currency/Presentation"] = 3600,
}
8080951a72a40836d2bdd7572ba603f2581a90c8
Template:High-risk
10
309
625
624
2023-09-14T01:43:35Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
#REDIRECT [[Template:High-use]]
{{Rcat shell|
{{R with Wikidata item}}
{{R from merge}}
{{R from template shortcut}}
}}
52c9a8c75748fd2b20183ed6c60e1f3c3a435cc9
Module:Side box/styles.css
828
310
627
626
2023-09-14T01:43:36Z
Ilovethehitgameomori
2
1 revision imported
text
text/plain
/* {{pp|small=y}} */
.side-box {
margin: 4px 0;
box-sizing: border-box;
border: 1px solid #aaa;
font-size: 88%;
line-height: 1.25em;
background-color: #f9f9f9;
display: flow-root;
}
.side-box-abovebelow,
.side-box-text {
padding: 0.25em 0.9em;
}
.side-box-image {
/* @noflip */
padding: 2px 0 2px 0.9em;
text-align: center;
}
.side-box-imageright {
/* @noflip */
padding: 2px 0.9em 2px 0;
text-align: center;
}
/* roughly the skin's sidebar + size of side box */
@media (min-width: 500px) {
.side-box-flex {
display: flex;
align-items: center;
}
.side-box-text {
flex: 1;
}
}
@media (min-width: 720px) {
.side-box {
width: 238px;
}
.side-box-right {
/* @noflip */
clear: right;
/* @noflip */
float: right;
/* @noflip */
margin-left: 1em;
}
/* derives from mbox classes, which do not float left in mbox-small-left
* so far as I can tell, that was a deliberate decision, since only .ambox
* supports mbox-left
*/
.side-box-left {
/* @noflip */
margin-right: 1em;
}
}
5be55dbc33007e62deac23036c134ed064dbe603
Template:Tracks and uses Wikidata
10
311
629
628
2023-09-14T01:43:36Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
<onlyinclude><includeonly>{{sister project
|position = {{{position|}}}
|image = [[File:Wikidata-logo-without-paddings.svg|30px|class=noviewer|alt=|link=]]
|text = This {{module other|module|template}} [[:Category:{{{cat|Wikidata tracking categories}}}|tracks]] and uses<!--
--> {{#if:{{{section|}}} | one or more [[Wikidata]] properties; see [[#{{{section}}}|§ {{{section}}}]] for details.<!--
--> | [[Wikidata]] propert{{#if:{{{2|}}}|ies|y}}: {{#invoke:Uses Wikidata|tuProperty}} }}
}}{{#switch:{{SUBPAGENAME}}|sandbox|testcases|doc=<!--nocat-->|#default={{#ifeq:{{PAGENAME}}|Uses Wikidata|<!--
-->|{{module other|[[Category:Modules using data from Wikidata]] [[Category:Modules tracking Wikidata]]<!--
-->|{{template other|[[Category:Templates using data from Wikidata]] [[Category:Templates tracking Wikidata]]}} }}
}}
}}</includeonly></onlyinclude>
{{Documentation}}
a14be63ad2ca80e80789fd88e86e1340f7e5ef00
Module:Coordinates/doc
828
312
631
630
2023-09-14T01:43:37Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{High-risk}}
{{Module rating|protected}}
{{Tracks and uses Wikidata|P625}}
{{Lua|Module:Math|Module:Arguments}}
{{Uses TemplateStyles|Module:Coordinates/styles.css}}
'''Note:''' The code which this module's main function (<code>coord</code>) outputs is directly parsed and/or manipulated by [[Module:Location map]] and other functions of this module itself (<code>coord2text</code> and <code>coordinsert</code>). If the structure of the output changes (for example, to use [[:mw:Help:Extension:Kartographer|the <code><nowiki><mapframe></nowiki></code> and <code><nowiki><maplink></nowiki></code> tags]]), please update the aforementioned scripts as well.
==Using the module with coordinsert==
When using the {{tl|Coord}} template inside another template, like an infobox, there may be parameters (like <code><var>type</var>:<var>airport</var></code>) which should be added automatically. To do so, do something like this:
<code>{{#if:{{{coordinates|}}}|{{#invoke:Coordinates|coordinsert|{{{coordinates|}}}|<var>parameter1:value1|parameter2:value2|parameter3:value3…</var>}}|</code>
Do not add more vertical bars <code>|</code> than necessary.
==Using the module with coord2text to extract latitude or longitude==
Developers maintaining legacy code may need to extract latitude or longitude to use a parameters in other code, or a mathematical expression.
The module's "coord2text" function can be used to extract data from the {{tl|Coord}} template. To extract the latitude from a Coord template, use:
<code><nowiki>{{#invoke:coordinates|coord2text|{{Coord|57|18|22|N|4|27|32|E}}|lat}}</nowiki></code> → {{#invoke:coordinates|coord2text|{{Coord|57|18|22|N|4|27|32|E}}|lat}}
To extract the longitude, use:
<code><nowiki>{{#invoke:coordinates|coord2text|{{Coord|57|18|22|N|4|27|32|E}}|long}}</nowiki></code> → {{#invoke:coordinates|coord2text|{{Coord|57|18|22|N|4|27|32|E}}|long}}
== Modules using this module directly ==
* [[Module:HS listed building row]]
== Tracking categories ==
* {{clc|Pages with malformed coordinate tags}}
* {{clc|Coordinates not on Wikidata}}
* {{clc|Coordinates on Wikidata}}
* {{clc|Coordinates on Wikidata set to no value}}
* {{clc|Coordinates on Wikidata set to unknown value}}
<includeonly>{{#switch:{{SUBPAGENAME}}|sandbox2|sandbox=|
[[Category:Modules that add a tracking category]]
}}</includeonly>
174a46bca3b8e3d6b54c213ded0b947107295f97
Module:Check for unknown parameters/doc
828
313
633
632
2023-09-14T01:43:38Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{Used in system|in [[MediaWiki:Abusefilter-warning-DS]]}}
{{Module rating|p}}
{{Lua|Module:If preview|noprotcat=yes}}
This module may be appended to a template to check for uses of unknown parameters. Unlike many other modules, this module is ''not'' implemented by a template.
== Usage ==
=== Basic usage ===
<syntaxhighlight lang="wikitext">
{{#invoke:Check for unknown parameters|check
|unknown=[[Category:Some tracking category]]
|arg1|arg2|arg3|argN}}
</syntaxhighlight>
or to sort the entries in the tracking category by parameter with a preview error message
<syntaxhighlight lang="wikitext">
{{#invoke:Check for unknown parameters|check
|unknown=[[Category:Some tracking category|_VALUE_]]
|preview=unknown parameter "_VALUE_"
|arg1|arg2|...|argN}}
</syntaxhighlight>
or for an explicit red error message
<syntaxhighlight lang="wikitext">
{{#invoke:Check for unknown parameters|check
|unknown=<span class="error">Sorry, I don't recognize _VALUE_</span>
|arg1|arg2|...|argN}}
</syntaxhighlight>
Here, <code>arg1</code>, <code>arg2</code>, ..., <code>argN</code>, are the known parameters. Unnamed (positional) parameters can be added too: <code><nowiki>|1|2|argname1|argname2|...</nowiki></code>. Any parameter which is used, but not on this list, will cause the module to return whatever is passed with the <code>unknown</code> parameter. The <code>_VALUE_</code> keyword, if used, will be changed to the name of the parameter. This is useful for either sorting the entries in a tracking category, or for provide more explicit information.
By default, the module makes no distinction between a defined-but-blank parameter and a non-blank parameter. That is, both unlisted {{Para|foo|x}} and {{Para|foo}} are reported. To only track non-blank parameters use {{Para|ignoreblank|1}}.
By default, the module ignores blank positional parameters. That is, an unlisted {{Para|2}} is ignored. To ''include'' blank positional parameters in the tracking use {{Para|showblankpositional|1}}.
=== Lua patterns ===
This module supports [[:mw:Extension:Scribunto/Lua reference manual#Patterns|Lua patterns]] (similar to [[regular expression]]s), which are useful when there are many known parameters which use a systematic pattern. For example, <code>[[Module:Infobox3cols|Infobox3cols]]</code> uses
<syntaxhighlight lang="lua">
regexp1 = "header[%d]+",
regexp2 = "label[%d]+",
regexp3 = "data[%d]+[abc]?",
regexp4 = "class[%d]+[abc]?",
regexp5 = "rowclass[%d]+",
regexp6 = "rowstyle[%d]+",
regexp7 = "rowcellstyle[%d]+",
</syntaxhighlight>
to match all parameters of the form <code>headerNUM</code>, <code>labelNUM</code>, <code>dataNUM</code>, <code>dataNUMa</code>, <code>dataNUMb</code>, <code>dataNUMc</code>, ..., <code>rowcellstyleNUM</code>, where NUM is a string of digits.
== Example ==
<syntaxhighlight lang="wikitext">
{{Infobox
| above = {{{name|}}}
| label1 = Height
| data1 = {{{height|}}}
| label2 = Weight
| data2 = {{{weight|}}}
| label3 = Website
| data3 = {{{website|}}}
}}<!--
end infobox, start tracking
-->{{#invoke:Check for unknown parameters|check
| unknown = {{Main other|[[Category:Some tracking category|_VALUE_]]}}
| preview = unknown parameter "_VALUE_"
| name
| height | weight
| website
}}
</syntaxhighlight>
==Call from within Lua code==
See the end of [[Module:Rugby box]] for a simple example or [[Module:Infobox3cols]] or [[Module:Flag]] for more complicated examples.
==See also==
* {{Clc|Unknown parameters}} (category page can have header {{tl|Unknown parameters category}})
* [[Module:Params]] – for complex operations involving parameters
* [[Template:Checks for unknown parameters]] – adds documentation to templates using this module
* [[Module:Check for deprecated parameters]] – similar module that checks for deprecated parameters
* [[Module:Check for clobbered parameters]] – module that checks for conflicting parameters
* [[Module:TemplatePar]] – similar function (originally from dewiki)
* [[Template:Parameters]] and [[Module:Parameters]] – generates a list of parameter names for a given template
* [[Project:TemplateData]] based template parameter validation
* [[Module:Parameter validation]] checks a lot more
* [[User:Bamyers99/TemplateParametersTool]] - A tool for checking usage of template parameters
<includeonly>{{Sandbox other||
<!-- Categories go here and interwikis go in Wikidata. -->
[[Category:Modules that add a tracking category]]
}}</includeonly>
31dc4e2854c7bd27db7480bd6e8c65ae8e364ac2
Module:Infobox/styles.css
828
314
634
2023-09-14T10:36:07Z
Ilovethehitgameomori
2
Created page with "/* {{pp|small=y}} */ .ombox { margin: 4px 0; border-collapse: collapse; border: 1px solid #a2a9b1; /* Default "notice" gray */ background-color: #f8f9fa; box-sizing: border-box; } /* For the "small=yes" option. */ .ombox.mbox-small { font-size: 88%; line-height: 1.25em; } .ombox-speedy { border: 2px solid #b32424; /* Red */ background-color: #fee7e6; /* Pink */ } .ombox-delete { border: 2px solid #b32424; /* Red */ } .ombox-content { border: 1p..."
sanitized-css
text/css
/* {{pp|small=y}} */
.ombox {
margin: 4px 0;
border-collapse: collapse;
border: 1px solid #a2a9b1; /* Default "notice" gray */
background-color: #f8f9fa;
box-sizing: border-box;
}
/* For the "small=yes" option. */
.ombox.mbox-small {
font-size: 88%;
line-height: 1.25em;
}
.ombox-speedy {
border: 2px solid #b32424; /* Red */
background-color: #fee7e6; /* Pink */
}
.ombox-delete {
border: 2px solid #b32424; /* Red */
}
.ombox-content {
border: 1px solid #f28500; /* Orange */
}
.ombox-style {
border: 1px solid #fc3; /* Yellow */
}
.ombox-move {
border: 1px solid #9932cc; /* Purple */
}
.ombox-protection {
border: 2px solid #a2a9b1; /* Gray-gold */
}
.ombox .mbox-text {
border: none;
/* @noflip */
padding: 0.25em 0.9em;
width: 100%;
}
.ombox .mbox-image {
border: none;
/* @noflip */
padding: 2px 0 2px 0.9em;
text-align: center;
}
.ombox .mbox-imageright {
border: none;
/* @noflip */
padding: 2px 0.9em 2px 0;
text-align: center;
}
/* An empty narrow cell */
.ombox .mbox-empty-cell {
border: none;
padding: 0;
width: 1px;
}
.ombox .mbox-invalid-type {
text-align: center;
}
@media (min-width: 720px) {
.ombox {
margin: 4px 10%;
}
.ombox.mbox-small {
/* @noflip */
clear: right;
/* @noflip */
float: right;
/* @noflip */
margin: 4px 0 4px 1em;
width: 238px;
}
}
8fe3df4bb607e699eab2dbd23bd4a1a446391002
674
634
2023-09-14T11:34:06Z
Ilovethehitgameomori
2
1 revision imported
sanitized-css
text/css
/* {{pp|small=y}} */
.ombox {
margin: 4px 0;
border-collapse: collapse;
border: 1px solid #a2a9b1; /* Default "notice" gray */
background-color: #f8f9fa;
box-sizing: border-box;
}
/* For the "small=yes" option. */
.ombox.mbox-small {
font-size: 88%;
line-height: 1.25em;
}
.ombox-speedy {
border: 2px solid #b32424; /* Red */
background-color: #fee7e6; /* Pink */
}
.ombox-delete {
border: 2px solid #b32424; /* Red */
}
.ombox-content {
border: 1px solid #f28500; /* Orange */
}
.ombox-style {
border: 1px solid #fc3; /* Yellow */
}
.ombox-move {
border: 1px solid #9932cc; /* Purple */
}
.ombox-protection {
border: 2px solid #a2a9b1; /* Gray-gold */
}
.ombox .mbox-text {
border: none;
/* @noflip */
padding: 0.25em 0.9em;
width: 100%;
}
.ombox .mbox-image {
border: none;
/* @noflip */
padding: 2px 0 2px 0.9em;
text-align: center;
}
.ombox .mbox-imageright {
border: none;
/* @noflip */
padding: 2px 0.9em 2px 0;
text-align: center;
}
/* An empty narrow cell */
.ombox .mbox-empty-cell {
border: none;
padding: 0;
width: 1px;
}
.ombox .mbox-invalid-type {
text-align: center;
}
@media (min-width: 720px) {
.ombox {
margin: 4px 10%;
}
.ombox.mbox-small {
/* @noflip */
clear: right;
/* @noflip */
float: right;
/* @noflip */
margin: 4px 0 4px 1em;
width: 238px;
}
}
8fe3df4bb607e699eab2dbd23bd4a1a446391002
Module:Message box/ombox.css
828
315
635
2023-09-14T10:39:07Z
Ilovethehitgameomori
2
Created page with "/* {{pp|small=y}} */ .ombox { margin: 4px 0; border-collapse: collapse; border: 1px solid #a2a9b1; /* Default "notice" gray */ background-color: #f8f9fa; box-sizing: border-box; } /* For the "small=yes" option. */ .ombox.mbox-small { font-size: 88%; line-height: 1.25em; } .ombox-speedy { border: 2px solid #b32424; /* Red */ background-color: #fee7e6; /* Pink */ } .ombox-delete { border: 2px solid #b32424; /* Red */ } .ombox-content { border: 1p..."
sanitized-css
text/css
/* {{pp|small=y}} */
.ombox {
margin: 4px 0;
border-collapse: collapse;
border: 1px solid #a2a9b1; /* Default "notice" gray */
background-color: #f8f9fa;
box-sizing: border-box;
}
/* For the "small=yes" option. */
.ombox.mbox-small {
font-size: 88%;
line-height: 1.25em;
}
.ombox-speedy {
border: 2px solid #b32424; /* Red */
background-color: #fee7e6; /* Pink */
}
.ombox-delete {
border: 2px solid #b32424; /* Red */
}
.ombox-content {
border: 1px solid #f28500; /* Orange */
}
.ombox-style {
border: 1px solid #fc3; /* Yellow */
}
.ombox-move {
border: 1px solid #9932cc; /* Purple */
}
.ombox-protection {
border: 2px solid #a2a9b1; /* Gray-gold */
}
.ombox .mbox-text {
border: none;
/* @noflip */
padding: 0.25em 0.9em;
width: 100%;
}
.ombox .mbox-image {
border: none;
/* @noflip */
padding: 2px 0 2px 0.9em;
text-align: center;
}
.ombox .mbox-imageright {
border: none;
/* @noflip */
padding: 2px 0.9em 2px 0;
text-align: center;
}
/* An empty narrow cell */
.ombox .mbox-empty-cell {
border: none;
padding: 0;
width: 1px;
}
.ombox .mbox-invalid-type {
text-align: center;
}
@media (min-width: 720px) {
.ombox {
margin: 4px 10%;
}
.ombox.mbox-small {
/* @noflip */
clear: right;
/* @noflip */
float: right;
/* @noflip */
margin: 4px 0 4px 1em;
width: 238px;
}
}
8fe3df4bb607e699eab2dbd23bd4a1a446391002
Template:Infobox
10
316
637
636
2023-09-14T11:00:50Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{#invoke:Infobox|infobox}}<noinclude>
{{documentation}}
</noinclude>
627ee6fcf4d4f108fe054b5c476201cad0ed7717
676
637
2023-09-14T11:34:07Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{#invoke:Infobox|infobox}}<noinclude>
{{documentation}}
</noinclude>
627ee6fcf4d4f108fe054b5c476201cad0ed7717
Module:Infobox
828
14
639
33
2023-09-14T11:00:50Z
Ilovethehitgameomori
2
1 revision imported
Scribunto
text/plain
local p = {}
local args = {}
local origArgs = {}
local root
local empty_row_categories = {}
local category_in_empty_row_pattern = '%[%[%s*[Cc][Aa][Tt][Ee][Gg][Oo][Rr][Yy]%s*:[^]]*]]'
local has_rows = false
local lists = {
plainlist_t = {
patterns = {
'^plainlist$',
'%splainlist$',
'^plainlist%s',
'%splainlist%s'
},
found = false,
styles = 'Plainlist/styles.css'
},
hlist_t = {
patterns = {
'^hlist$',
'%shlist$',
'^hlist%s',
'%shlist%s'
},
found = false,
styles = 'Hlist/styles.css'
}
}
local function has_list_class(args_to_check)
for _, list in pairs(lists) do
if not list.found then
for _, arg in pairs(args_to_check) do
for _, pattern in ipairs(list.patterns) do
if mw.ustring.find(arg or '', pattern) then
list.found = true
break
end
end
if list.found then break end
end
end
end
end
local function fixChildBoxes(sval, tt)
local function notempty( s ) return s and s:match( '%S' ) end
if notempty(sval) then
local marker = '<span class=special_infobox_marker>'
local s = sval
-- start moving templatestyles and categories inside of table rows
local slast = ''
while slast ~= s do
slast = s
s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>%s*)(%[%[%s*[Cc][Aa][Tt][Ee][Gg][Oo][Rr][Yy]%s*:[^]]*%]%])', '%2%1')
s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>%s*)(\127[^\127]*UNIQ%-%-templatestyles%-%x+%-QINU[^\127]*\127)', '%2%1')
end
-- end moving templatestyles and categories inside of table rows
s = mw.ustring.gsub(s, '(<%s*[Tt][Rr])', marker .. '%1')
s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>)', '%1' .. marker)
if s:match(marker) then
s = mw.ustring.gsub(s, marker .. '%s*' .. marker, '')
s = mw.ustring.gsub(s, '([\r\n]|-[^\r\n]*[\r\n])%s*' .. marker, '%1')
s = mw.ustring.gsub(s, marker .. '%s*([\r\n]|-)', '%1')
s = mw.ustring.gsub(s, '(</[Cc][Aa][Pp][Tt][Ii][Oo][Nn]%s*>%s*)' .. marker, '%1')
s = mw.ustring.gsub(s, '(<%s*[Tt][Aa][Bb][Ll][Ee][^<>]*>%s*)' .. marker, '%1')
s = mw.ustring.gsub(s, '^(%{|[^\r\n]*[\r\n]%s*)' .. marker, '%1')
s = mw.ustring.gsub(s, '([\r\n]%{|[^\r\n]*[\r\n]%s*)' .. marker, '%1')
s = mw.ustring.gsub(s, marker .. '(%s*</[Tt][Aa][Bb][Ll][Ee]%s*>)', '%1')
s = mw.ustring.gsub(s, marker .. '(%s*\n|%})', '%1')
end
if s:match(marker) then
local subcells = mw.text.split(s, marker)
s = ''
for k = 1, #subcells do
if k == 1 then
s = s .. subcells[k] .. '</' .. tt .. '></tr>'
elseif k == #subcells then
local rowstyle = ' style="display:none"'
if notempty(subcells[k]) then rowstyle = '' end
s = s .. '<tr' .. rowstyle ..'><' .. tt .. ' colspan=2>\n' ..
subcells[k]
elseif notempty(subcells[k]) then
if (k % 2) == 0 then
s = s .. subcells[k]
else
s = s .. '<tr><' .. tt .. ' colspan=2>\n' ..
subcells[k] .. '</' .. tt .. '></tr>'
end
end
end
end
-- the next two lines add a newline at the end of lists for the PHP parser
-- [[Special:Diff/849054481]]
-- remove when [[:phab:T191516]] is fixed or OBE
s = mw.ustring.gsub(s, '([\r\n][%*#;:][^\r\n]*)$', '%1\n')
s = mw.ustring.gsub(s, '^([%*#;:][^\r\n]*)$', '%1\n')
s = mw.ustring.gsub(s, '^([%*#;:])', '\n%1')
s = mw.ustring.gsub(s, '^(%{%|)', '\n%1')
return s
else
return sval
end
end
-- Cleans empty tables
local function cleanInfobox()
root = tostring(root)
if has_rows == false then
root = mw.ustring.gsub(root, '<table[^<>]*>%s*</table>', '')
end
end
-- Returns the union of the values of two tables, as a sequence.
local function union(t1, t2)
local vals = {}
for k, v in pairs(t1) do
vals[v] = true
end
for k, v in pairs(t2) do
vals[v] = true
end
local ret = {}
for k, v in pairs(vals) do
table.insert(ret, k)
end
return ret
end
-- Returns a table containing the numbers of the arguments that exist
-- for the specified prefix. For example, if the prefix was 'data', and
-- 'data1', 'data2', and 'data5' exist, it would return {1, 2, 5}.
local function getArgNums(prefix)
local nums = {}
for k, v in pairs(args) do
local num = tostring(k):match('^' .. prefix .. '([1-9]%d*)$')
if num then table.insert(nums, tonumber(num)) end
end
table.sort(nums)
return nums
end
-- Adds a row to the infobox, with either a header cell
-- or a label/data cell combination.
local function addRow(rowArgs)
if rowArgs.header and rowArgs.header ~= '_BLANK_' then
has_rows = true
has_list_class({ rowArgs.rowclass, rowArgs.class, args.headerclass })
root
:tag('tr')
:addClass(rowArgs.rowclass)
:cssText(rowArgs.rowstyle)
:tag('th')
:attr('colspan', '2')
:addClass('infobox-header')
:addClass(rowArgs.class)
:addClass(args.headerclass)
-- @deprecated next; target .infobox-<name> .infobox-header
:cssText(args.headerstyle)
:cssText(rowArgs.rowcellstyle)
:wikitext(fixChildBoxes(rowArgs.header, 'th'))
if rowArgs.data then
root:wikitext(
'[[Category:Pages using infobox templates with ignored data cells]]'
)
end
elseif rowArgs.data and rowArgs.data:gsub(category_in_empty_row_pattern, ''):match('^%S') then
has_rows = true
has_list_class({ rowArgs.rowclass, rowArgs.class })
local row = root:tag('tr')
row:addClass(rowArgs.rowclass)
row:cssText(rowArgs.rowstyle)
if rowArgs.label then
row
:tag('th')
:attr('scope', 'row')
:addClass('infobox-label')
-- @deprecated next; target .infobox-<name> .infobox-label
:cssText(args.labelstyle)
:cssText(rowArgs.rowcellstyle)
:wikitext(rowArgs.label)
:done()
end
local dataCell = row:tag('td')
dataCell
:attr('colspan', not rowArgs.label and '2' or nil)
:addClass(not rowArgs.label and 'infobox-full-data' or 'infobox-data')
:addClass(rowArgs.class)
-- @deprecated next; target .infobox-<name> .infobox(-full)-data
:cssText(rowArgs.datastyle)
:cssText(rowArgs.rowcellstyle)
:wikitext(fixChildBoxes(rowArgs.data, 'td'))
else
table.insert(empty_row_categories, rowArgs.data or '')
end
end
local function renderTitle()
if not args.title then return end
has_rows = true
has_list_class({args.titleclass})
root
:tag('caption')
:addClass('infobox-title')
:addClass(args.titleclass)
-- @deprecated next; target .infobox-<name> .infobox-title
:cssText(args.titlestyle)
:wikitext(args.title)
end
local function renderAboveRow()
if not args.above then return end
has_rows = true
has_list_class({ args.aboveclass })
root
:tag('tr')
:tag('th')
:attr('colspan', '2')
:addClass('infobox-above')
:addClass(args.aboveclass)
-- @deprecated next; target .infobox-<name> .infobox-above
:cssText(args.abovestyle)
:wikitext(fixChildBoxes(args.above,'th'))
end
local function renderBelowRow()
if not args.below then return end
has_rows = true
has_list_class({ args.belowclass })
root
:tag('tr')
:tag('td')
:attr('colspan', '2')
:addClass('infobox-below')
:addClass(args.belowclass)
-- @deprecated next; target .infobox-<name> .infobox-below
:cssText(args.belowstyle)
:wikitext(fixChildBoxes(args.below,'td'))
end
local function addSubheaderRow(subheaderArgs)
if subheaderArgs.data and
subheaderArgs.data:gsub(category_in_empty_row_pattern, ''):match('^%S') then
has_rows = true
has_list_class({ subheaderArgs.rowclass, subheaderArgs.class })
local row = root:tag('tr')
row:addClass(subheaderArgs.rowclass)
local dataCell = row:tag('td')
dataCell
:attr('colspan', '2')
:addClass('infobox-subheader')
:addClass(subheaderArgs.class)
:cssText(subheaderArgs.datastyle)
:cssText(subheaderArgs.rowcellstyle)
:wikitext(fixChildBoxes(subheaderArgs.data, 'td'))
else
table.insert(empty_row_categories, subheaderArgs.data or '')
end
end
local function renderSubheaders()
if args.subheader then
args.subheader1 = args.subheader
end
if args.subheaderrowclass then
args.subheaderrowclass1 = args.subheaderrowclass
end
local subheadernums = getArgNums('subheader')
for k, num in ipairs(subheadernums) do
addSubheaderRow({
data = args['subheader' .. tostring(num)],
-- @deprecated next; target .infobox-<name> .infobox-subheader
datastyle = args.subheaderstyle,
rowcellstyle = args['subheaderstyle' .. tostring(num)],
class = args.subheaderclass,
rowclass = args['subheaderrowclass' .. tostring(num)]
})
end
end
local function addImageRow(imageArgs)
if imageArgs.data and
imageArgs.data:gsub(category_in_empty_row_pattern, ''):match('^%S') then
has_rows = true
has_list_class({ imageArgs.rowclass, imageArgs.class })
local row = root:tag('tr')
row:addClass(imageArgs.rowclass)
local dataCell = row:tag('td')
dataCell
:attr('colspan', '2')
:addClass('infobox-image')
:addClass(imageArgs.class)
:cssText(imageArgs.datastyle)
:wikitext(fixChildBoxes(imageArgs.data, 'td'))
else
table.insert(empty_row_categories, imageArgs.data or '')
end
end
local function renderImages()
if args.image then
args.image1 = args.image
end
if args.caption then
args.caption1 = args.caption
end
local imagenums = getArgNums('image')
for k, num in ipairs(imagenums) do
local caption = args['caption' .. tostring(num)]
local data = mw.html.create():wikitext(args['image' .. tostring(num)])
if caption then
data
:tag('div')
:addClass('infobox-caption')
-- @deprecated next; target .infobox-<name> .infobox-caption
:cssText(args.captionstyle)
:wikitext(caption)
end
addImageRow({
data = tostring(data),
-- @deprecated next; target .infobox-<name> .infobox-image
datastyle = args.imagestyle,
class = args.imageclass,
rowclass = args['imagerowclass' .. tostring(num)]
})
end
end
-- When autoheaders are turned on, preprocesses the rows
local function preprocessRows()
if not args.autoheaders then return end
local rownums = union(getArgNums('header'), getArgNums('data'))
table.sort(rownums)
local lastheader
for k, num in ipairs(rownums) do
if args['header' .. tostring(num)] then
if lastheader then
args['header' .. tostring(lastheader)] = nil
end
lastheader = num
elseif args['data' .. tostring(num)] and
args['data' .. tostring(num)]:gsub(
category_in_empty_row_pattern, ''
):match('^%S') then
local data = args['data' .. tostring(num)]
if data:gsub(category_in_empty_row_pattern, ''):match('%S') then
lastheader = nil
end
end
end
if lastheader then
args['header' .. tostring(lastheader)] = nil
end
end
-- Gets the union of the header and data argument numbers,
-- and renders them all in order
local function renderRows()
local rownums = union(getArgNums('header'), getArgNums('data'))
table.sort(rownums)
for k, num in ipairs(rownums) do
addRow({
header = args['header' .. tostring(num)],
label = args['label' .. tostring(num)],
data = args['data' .. tostring(num)],
datastyle = args.datastyle,
class = args['class' .. tostring(num)],
rowclass = args['rowclass' .. tostring(num)],
-- @deprecated next; target .infobox-<name> rowclass
rowstyle = args['rowstyle' .. tostring(num)],
rowcellstyle = args['rowcellstyle' .. tostring(num)]
})
end
end
local function renderNavBar()
if not args.name then return end
has_rows = true
root
:tag('tr')
:tag('td')
:attr('colspan', '2')
:addClass('infobox-navbar')
:wikitext(require('Module:Navbar')._navbar{
args.name,
mini = 1,
})
end
local function renderItalicTitle()
local italicTitle = args['italic title'] and mw.ustring.lower(args['italic title'])
if italicTitle == '' or italicTitle == 'force' or italicTitle == 'yes' then
root:wikitext(require('Module:Italic title')._main({}))
end
end
-- Categories in otherwise empty rows are collected in empty_row_categories.
-- This function adds them to the module output. It is not affected by
-- args.decat because this module should not prevent module-external categories
-- from rendering.
local function renderEmptyRowCategories()
for _, s in ipairs(empty_row_categories) do
root:wikitext(s)
end
end
-- Render tracking categories. args.decat == turns off tracking categories.
local function renderTrackingCategories()
if args.decat == 'yes' then return end
if args.child == 'yes' then
if args.title then
root:wikitext(
'[[Category:Pages using embedded infobox templates with the title parameter]]'
)
end
elseif #(getArgNums('data')) == 0 and mw.title.getCurrentTitle().namespace == 0 then
root:wikitext('[[Category:Articles using infobox templates with no data rows]]')
end
end
--[=[
Loads the templatestyles for the infobox.
TODO: FINISH loading base templatestyles here rather than in
MediaWiki:Common.css. There are 4-5000 pages with 'raw' infobox tables.
See [[Mediawiki_talk:Common.css/to_do#Infobox]] and/or come help :).
When we do this we should clean up the inline CSS below too.
Will have to do some bizarre conversion category like with sidebar.
]=]
local function loadTemplateStyles()
local frame = mw.getCurrentFrame()
local hlist_templatestyles = ''
if lists.hlist_t.found then
hlist_templatestyles = frame:extensionTag{
name = 'templatestyles', args = { src = lists.hlist_t.styles }
}
end
local plainlist_templatestyles = ''
if lists.plainlist_t.found then
plainlist_templatestyles = frame:extensionTag{
name = 'templatestyles', args = { src = lists.plainlist_t.styles }
}
end
-- See function description
local base_templatestyles = frame:extensionTag{
name = 'templatestyles', args = { src = 'Module:Infobox/styles.css' }
}
local templatestyles = ''
if args['templatestyles'] then
templatestyles = frame:extensionTag{
name = 'templatestyles', args = { src = args['templatestyles'] }
}
end
local child_templatestyles = ''
if args['child templatestyles'] then
child_templatestyles = frame:extensionTag{
name = 'templatestyles', args = { src = args['child templatestyles'] }
}
end
local grandchild_templatestyles = ''
if args['grandchild templatestyles'] then
grandchild_templatestyles = frame:extensionTag{
name = 'templatestyles', args = { src = args['grandchild templatestyles'] }
}
end
return table.concat({
-- hlist -> plainlist -> base is best-effort to preserve old Common.css ordering.
-- this ordering is not a guarantee because the rows of interest invoking
-- each class may not be on a specific page
hlist_templatestyles,
plainlist_templatestyles,
base_templatestyles,
templatestyles,
child_templatestyles,
grandchild_templatestyles
})
end
-- common functions between the child and non child cases
local function structure_infobox_common()
renderSubheaders()
renderImages()
preprocessRows()
renderRows()
renderBelowRow()
renderNavBar()
renderItalicTitle()
renderEmptyRowCategories()
renderTrackingCategories()
cleanInfobox()
end
-- Specify the overall layout of the infobox, with special settings if the
-- infobox is used as a 'child' inside another infobox.
local function _infobox()
if args.child ~= 'yes' then
root = mw.html.create('table')
root
:addClass(args.subbox == 'yes' and 'infobox-subbox' or 'infobox')
:addClass(args.bodyclass)
-- @deprecated next; target .infobox-<name>
:cssText(args.bodystyle)
has_list_class({ args.bodyclass })
renderTitle()
renderAboveRow()
else
root = mw.html.create()
root
:wikitext(args.title)
end
structure_infobox_common()
return loadTemplateStyles() .. root
end
-- If the argument exists and isn't blank, add it to the argument table.
-- Blank arguments are treated as nil to match the behaviour of ParserFunctions.
local function preprocessSingleArg(argName)
if origArgs[argName] and origArgs[argName] ~= '' then
args[argName] = origArgs[argName]
end
end
-- Assign the parameters with the given prefixes to the args table, in order, in
-- batches of the step size specified. This is to prevent references etc. from
-- appearing in the wrong order. The prefixTable should be an array containing
-- tables, each of which has two possible fields, a "prefix" string and a
-- "depend" table. The function always parses parameters containing the "prefix"
-- string, but only parses parameters in the "depend" table if the prefix
-- parameter is present and non-blank.
local function preprocessArgs(prefixTable, step)
if type(prefixTable) ~= 'table' then
error("Non-table value detected for the prefix table", 2)
end
if type(step) ~= 'number' then
error("Invalid step value detected", 2)
end
-- Get arguments without a number suffix, and check for bad input.
for i,v in ipairs(prefixTable) do
if type(v) ~= 'table' or type(v.prefix) ~= "string" or
(v.depend and type(v.depend) ~= 'table') then
error('Invalid input detected to preprocessArgs prefix table', 2)
end
preprocessSingleArg(v.prefix)
-- Only parse the depend parameter if the prefix parameter is present
-- and not blank.
if args[v.prefix] and v.depend then
for j, dependValue in ipairs(v.depend) do
if type(dependValue) ~= 'string' then
error('Invalid "depend" parameter value detected in preprocessArgs')
end
preprocessSingleArg(dependValue)
end
end
end
-- Get arguments with number suffixes.
local a = 1 -- Counter variable.
local moreArgumentsExist = true
while moreArgumentsExist == true do
moreArgumentsExist = false
for i = a, a + step - 1 do
for j,v in ipairs(prefixTable) do
local prefixArgName = v.prefix .. tostring(i)
if origArgs[prefixArgName] then
-- Do another loop if any arguments are found, even blank ones.
moreArgumentsExist = true
preprocessSingleArg(prefixArgName)
end
-- Process the depend table if the prefix argument is present
-- and not blank, or we are processing "prefix1" and "prefix" is
-- present and not blank, and if the depend table is present.
if v.depend and (args[prefixArgName] or (i == 1 and args[v.prefix])) then
for j,dependValue in ipairs(v.depend) do
local dependArgName = dependValue .. tostring(i)
preprocessSingleArg(dependArgName)
end
end
end
end
a = a + step
end
end
-- Parse the data parameters in the same order that the old {{infobox}} did, so
-- that references etc. will display in the expected places. Parameters that
-- depend on another parameter are only processed if that parameter is present,
-- to avoid phantom references appearing in article reference lists.
local function parseDataParameters()
preprocessSingleArg('autoheaders')
preprocessSingleArg('child')
preprocessSingleArg('bodyclass')
preprocessSingleArg('subbox')
preprocessSingleArg('bodystyle')
preprocessSingleArg('title')
preprocessSingleArg('titleclass')
preprocessSingleArg('titlestyle')
preprocessSingleArg('above')
preprocessSingleArg('aboveclass')
preprocessSingleArg('abovestyle')
preprocessArgs({
{prefix = 'subheader', depend = {'subheaderstyle', 'subheaderrowclass'}}
}, 10)
preprocessSingleArg('subheaderstyle')
preprocessSingleArg('subheaderclass')
preprocessArgs({
{prefix = 'image', depend = {'caption', 'imagerowclass'}}
}, 10)
preprocessSingleArg('captionstyle')
preprocessSingleArg('imagestyle')
preprocessSingleArg('imageclass')
preprocessArgs({
{prefix = 'header'},
{prefix = 'data', depend = {'label'}},
{prefix = 'rowclass'},
{prefix = 'rowstyle'},
{prefix = 'rowcellstyle'},
{prefix = 'class'}
}, 50)
preprocessSingleArg('headerclass')
preprocessSingleArg('headerstyle')
preprocessSingleArg('labelstyle')
preprocessSingleArg('datastyle')
preprocessSingleArg('below')
preprocessSingleArg('belowclass')
preprocessSingleArg('belowstyle')
preprocessSingleArg('name')
-- different behaviour for italics if blank or absent
args['italic title'] = origArgs['italic title']
preprocessSingleArg('decat')
preprocessSingleArg('templatestyles')
preprocessSingleArg('child templatestyles')
preprocessSingleArg('grandchild templatestyles')
end
-- If called via #invoke, use the args passed into the invoking template.
-- Otherwise, for testing purposes, assume args are being passed directly in.
function p.infobox(frame)
if frame == mw.getCurrentFrame() then
origArgs = frame:getParent().args
else
origArgs = frame
end
parseDataParameters()
return _infobox()
end
-- For calling via #invoke within a template
function p.infoboxTemplate(frame)
origArgs = {}
for k,v in pairs(frame.args) do origArgs[k] = mw.text.trim(v) end
parseDataParameters()
return _infobox()
end
return p
0ddb7e5c8426d67cd589b710efb9912ddfb67fea
Template:Documentation
10
58
641
121
2023-09-14T11:00:50Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{#invoke:documentation|main|_content={{ {{#invoke:documentation|contentTitle}}}}}}<noinclude>
<!-- Add categories to the /doc subpage -->
</noinclude>
9e62b964e96c4e3d478edecbfcb3c0338ae8a276
Template:Documentation subpage
10
63
643
131
2023-09-14T11:00:51Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
<includeonly><!--
-->{{#ifeq:{{lc:{{SUBPAGENAME}}}} |{{{override|doc}}}
| <!--(this template has been transcluded on a /doc or /{{{override}}} page)-->
</includeonly><!--
-->{{#ifeq:{{{doc-notice|show}}} |show
| {{Mbox
| type = notice
| style = margin-bottom:1.0em;
| image = [[File:Edit-copy green.svg|40px|alt=|link=]]
| text =
{{strong|This is a [[Wikipedia:Template documentation|documentation]] [[Wikipedia:Subpages|subpage]]}} for {{terminate sentence|{{{1|[[:{{SUBJECTSPACE}}:{{BASEPAGENAME}}]]}}}}}<br />It may contain usage information, [[Wikipedia:Categorization|categories]] and other content that is not part of the original {{#if:{{{text2|}}} |{{{text2}}} |{{#if:{{{text1|}}} |{{{text1}}} |{{#ifeq:{{SUBJECTSPACE}} |{{ns:User}} |{{lc:{{SUBJECTSPACE}}}} template page |{{#if:{{SUBJECTSPACE}} |{{lc:{{SUBJECTSPACE}}}} page|article}}}}}}}}.
}}
}}<!--
-->{{DEFAULTSORT:{{{defaultsort|{{PAGENAME}}}}}}}<!--
-->{{#if:{{{inhibit|}}} |<!--(don't categorize)-->
| <includeonly><!--
-->{{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}
| [[Category:{{#switch:{{SUBJECTSPACE}} |Template=Template |Module=Module |User=User |#default=Wikipedia}} documentation pages]]
| [[Category:Documentation subpages without corresponding pages]]
}}<!--
--></includeonly>
}}<!--
(completing initial #ifeq: at start of template:)
--><includeonly>
| <!--(this template has not been transcluded on a /doc or /{{{override}}} page)-->
}}<!--
--></includeonly><noinclude>{{Documentation}}</noinclude>
41ca90af0945442788a2dbd08c8c54a61a23c057
Module:Arguments
828
16
645
37
2023-09-14T11:00:51Z
Ilovethehitgameomori
2
1 revision imported
Scribunto
text/plain
-- This module provides easy processing of arguments passed to Scribunto from
-- #invoke. It is intended for use by other Lua modules, and should not be
-- called from #invoke directly.
local libraryUtil = require('libraryUtil')
local checkType = libraryUtil.checkType
local arguments = {}
-- Generate four different tidyVal functions, so that we don't have to check the
-- options every time we call it.
local function tidyValDefault(key, val)
if type(val) == 'string' then
val = val:match('^%s*(.-)%s*$')
if val == '' then
return nil
else
return val
end
else
return val
end
end
local function tidyValTrimOnly(key, val)
if type(val) == 'string' then
return val:match('^%s*(.-)%s*$')
else
return val
end
end
local function tidyValRemoveBlanksOnly(key, val)
if type(val) == 'string' then
if val:find('%S') then
return val
else
return nil
end
else
return val
end
end
local function tidyValNoChange(key, val)
return val
end
local function matchesTitle(given, title)
local tp = type( given )
return (tp == 'string' or tp == 'number') and mw.title.new( given ).prefixedText == title
end
local translate_mt = { __index = function(t, k) return k end }
function arguments.getArgs(frame, options)
checkType('getArgs', 1, frame, 'table', true)
checkType('getArgs', 2, options, 'table', true)
frame = frame or {}
options = options or {}
--[[
-- Set up argument translation.
--]]
options.translate = options.translate or {}
if getmetatable(options.translate) == nil then
setmetatable(options.translate, translate_mt)
end
if options.backtranslate == nil then
options.backtranslate = {}
for k,v in pairs(options.translate) do
options.backtranslate[v] = k
end
end
if options.backtranslate and getmetatable(options.backtranslate) == nil then
setmetatable(options.backtranslate, {
__index = function(t, k)
if options.translate[k] ~= k then
return nil
else
return k
end
end
})
end
--[[
-- Get the argument tables. If we were passed a valid frame object, get the
-- frame arguments (fargs) and the parent frame arguments (pargs), depending
-- on the options set and on the parent frame's availability. If we weren't
-- passed a valid frame object, we are being called from another Lua module
-- or from the debug console, so assume that we were passed a table of args
-- directly, and assign it to a new variable (luaArgs).
--]]
local fargs, pargs, luaArgs
if type(frame.args) == 'table' and type(frame.getParent) == 'function' then
if options.wrappers then
--[[
-- The wrappers option makes Module:Arguments look up arguments in
-- either the frame argument table or the parent argument table, but
-- not both. This means that users can use either the #invoke syntax
-- or a wrapper template without the loss of performance associated
-- with looking arguments up in both the frame and the parent frame.
-- Module:Arguments will look up arguments in the parent frame
-- if it finds the parent frame's title in options.wrapper;
-- otherwise it will look up arguments in the frame object passed
-- to getArgs.
--]]
local parent = frame:getParent()
if not parent then
fargs = frame.args
else
local title = parent:getTitle():gsub('/sandbox$', '')
local found = false
if matchesTitle(options.wrappers, title) then
found = true
elseif type(options.wrappers) == 'table' then
for _,v in pairs(options.wrappers) do
if matchesTitle(v, title) then
found = true
break
end
end
end
-- We test for false specifically here so that nil (the default) acts like true.
if found or options.frameOnly == false then
pargs = parent.args
end
if not found or options.parentOnly == false then
fargs = frame.args
end
end
else
-- options.wrapper isn't set, so check the other options.
if not options.parentOnly then
fargs = frame.args
end
if not options.frameOnly then
local parent = frame:getParent()
pargs = parent and parent.args or nil
end
end
if options.parentFirst then
fargs, pargs = pargs, fargs
end
else
luaArgs = frame
end
-- Set the order of precedence of the argument tables. If the variables are
-- nil, nothing will be added to the table, which is how we avoid clashes
-- between the frame/parent args and the Lua args.
local argTables = {fargs}
argTables[#argTables + 1] = pargs
argTables[#argTables + 1] = luaArgs
--[[
-- Generate the tidyVal function. If it has been specified by the user, we
-- use that; if not, we choose one of four functions depending on the
-- options chosen. This is so that we don't have to call the options table
-- every time the function is called.
--]]
local tidyVal = options.valueFunc
if tidyVal then
if type(tidyVal) ~= 'function' then
error(
"bad value assigned to option 'valueFunc'"
.. '(function expected, got '
.. type(tidyVal)
.. ')',
2
)
end
elseif options.trim ~= false then
if options.removeBlanks ~= false then
tidyVal = tidyValDefault
else
tidyVal = tidyValTrimOnly
end
else
if options.removeBlanks ~= false then
tidyVal = tidyValRemoveBlanksOnly
else
tidyVal = tidyValNoChange
end
end
--[[
-- Set up the args, metaArgs and nilArgs tables. args will be the one
-- accessed from functions, and metaArgs will hold the actual arguments. Nil
-- arguments are memoized in nilArgs, and the metatable connects all of them
-- together.
--]]
local args, metaArgs, nilArgs, metatable = {}, {}, {}, {}
setmetatable(args, metatable)
local function mergeArgs(tables)
--[[
-- Accepts multiple tables as input and merges their keys and values
-- into one table. If a value is already present it is not overwritten;
-- tables listed earlier have precedence. We are also memoizing nil
-- values, which can be overwritten if they are 's' (soft).
--]]
for _, t in ipairs(tables) do
for key, val in pairs(t) do
if metaArgs[key] == nil and nilArgs[key] ~= 'h' then
local tidiedVal = tidyVal(key, val)
if tidiedVal == nil then
nilArgs[key] = 's'
else
metaArgs[key] = tidiedVal
end
end
end
end
end
--[[
-- Define metatable behaviour. Arguments are memoized in the metaArgs table,
-- and are only fetched from the argument tables once. Fetching arguments
-- from the argument tables is the most resource-intensive step in this
-- module, so we try and avoid it where possible. For this reason, nil
-- arguments are also memoized, in the nilArgs table. Also, we keep a record
-- in the metatable of when pairs and ipairs have been called, so we do not
-- run pairs and ipairs on the argument tables more than once. We also do
-- not run ipairs on fargs and pargs if pairs has already been run, as all
-- the arguments will already have been copied over.
--]]
metatable.__index = function (t, key)
--[[
-- Fetches an argument when the args table is indexed. First we check
-- to see if the value is memoized, and if not we try and fetch it from
-- the argument tables. When we check memoization, we need to check
-- metaArgs before nilArgs, as both can be non-nil at the same time.
-- If the argument is not present in metaArgs, we also check whether
-- pairs has been run yet. If pairs has already been run, we return nil.
-- This is because all the arguments will have already been copied into
-- metaArgs by the mergeArgs function, meaning that any other arguments
-- must be nil.
--]]
if type(key) == 'string' then
key = options.translate[key]
end
local val = metaArgs[key]
if val ~= nil then
return val
elseif metatable.donePairs or nilArgs[key] then
return nil
end
for _, argTable in ipairs(argTables) do
local argTableVal = tidyVal(key, argTable[key])
if argTableVal ~= nil then
metaArgs[key] = argTableVal
return argTableVal
end
end
nilArgs[key] = 'h'
return nil
end
metatable.__newindex = function (t, key, val)
-- This function is called when a module tries to add a new value to the
-- args table, or tries to change an existing value.
if type(key) == 'string' then
key = options.translate[key]
end
if options.readOnly then
error(
'could not write to argument table key "'
.. tostring(key)
.. '"; the table is read-only',
2
)
elseif options.noOverwrite and args[key] ~= nil then
error(
'could not write to argument table key "'
.. tostring(key)
.. '"; overwriting existing arguments is not permitted',
2
)
elseif val == nil then
--[[
-- If the argument is to be overwritten with nil, we need to erase
-- the value in metaArgs, so that __index, __pairs and __ipairs do
-- not use a previous existing value, if present; and we also need
-- to memoize the nil in nilArgs, so that the value isn't looked
-- up in the argument tables if it is accessed again.
--]]
metaArgs[key] = nil
nilArgs[key] = 'h'
else
metaArgs[key] = val
end
end
local function translatenext(invariant)
local k, v = next(invariant.t, invariant.k)
invariant.k = k
if k == nil then
return nil
elseif type(k) ~= 'string' or not options.backtranslate then
return k, v
else
local backtranslate = options.backtranslate[k]
if backtranslate == nil then
-- Skip this one. This is a tail call, so this won't cause stack overflow
return translatenext(invariant)
else
return backtranslate, v
end
end
end
metatable.__pairs = function ()
-- Called when pairs is run on the args table.
if not metatable.donePairs then
mergeArgs(argTables)
metatable.donePairs = true
end
return translatenext, { t = metaArgs }
end
local function inext(t, i)
-- This uses our __index metamethod
local v = t[i + 1]
if v ~= nil then
return i + 1, v
end
end
metatable.__ipairs = function (t)
-- Called when ipairs is run on the args table.
return inext, t, 0
end
return args
end
return arguments
3134ecce8429b810d445e29eae115e2ae4c36c53
Module:Documentation
828
59
647
123
2023-09-14T11:00:51Z
Ilovethehitgameomori
2
1 revision imported
Scribunto
text/plain
-- This module implements {{documentation}}.
-- Get required modules.
local getArgs = require('Module:Arguments').getArgs
-- Get the config table.
local cfg = mw.loadData('Module:Documentation/config')
local p = {}
-- Often-used functions.
local ugsub = mw.ustring.gsub
local format = mw.ustring.format
----------------------------------------------------------------------------
-- Helper functions
--
-- These are defined as local functions, but are made available in the p
-- table for testing purposes.
----------------------------------------------------------------------------
local function message(cfgKey, valArray, expectType)
--[[
-- Gets a message from the cfg table and formats it if appropriate.
-- The function raises an error if the value from the cfg table is not
-- of the type expectType. The default type for expectType is 'string'.
-- If the table valArray is present, strings such as $1, $2 etc. in the
-- message are substituted with values from the table keys [1], [2] etc.
-- For example, if the message "foo-message" had the value 'Foo $2 bar $1.',
-- message('foo-message', {'baz', 'qux'}) would return "Foo qux bar baz."
--]]
local msg = cfg[cfgKey]
expectType = expectType or 'string'
if type(msg) ~= expectType then
error('message: type error in message cfg.' .. cfgKey .. ' (' .. expectType .. ' expected, got ' .. type(msg) .. ')', 2)
end
if not valArray then
return msg
end
local function getMessageVal(match)
match = tonumber(match)
return valArray[match] or error('message: no value found for key $' .. match .. ' in message cfg.' .. cfgKey, 4)
end
return ugsub(msg, '$([1-9][0-9]*)', getMessageVal)
end
p.message = message
local function makeWikilink(page, display)
if display then
return format('[[%s|%s]]', page, display)
else
return format('[[%s]]', page)
end
end
p.makeWikilink = makeWikilink
local function makeCategoryLink(cat, sort)
local catns = mw.site.namespaces[14].name
return makeWikilink(catns .. ':' .. cat, sort)
end
p.makeCategoryLink = makeCategoryLink
local function makeUrlLink(url, display)
return format('[%s %s]', url, display)
end
p.makeUrlLink = makeUrlLink
local function makeToolbar(...)
local ret = {}
local lim = select('#', ...)
if lim < 1 then
return nil
end
for i = 1, lim do
ret[#ret + 1] = select(i, ...)
end
-- 'documentation-toolbar'
return format(
'<span class="%s">(%s)</span>',
message('toolbar-class'),
table.concat(ret, ' | ')
)
end
p.makeToolbar = makeToolbar
----------------------------------------------------------------------------
-- Argument processing
----------------------------------------------------------------------------
local function makeInvokeFunc(funcName)
return function (frame)
local args = getArgs(frame, {
valueFunc = function (key, value)
if type(value) == 'string' then
value = value:match('^%s*(.-)%s*$') -- Remove whitespace.
if key == 'heading' or value ~= '' then
return value
else
return nil
end
else
return value
end
end
})
return p[funcName](args)
end
end
----------------------------------------------------------------------------
-- Entry points
----------------------------------------------------------------------------
function p.nonexistent(frame)
if mw.title.getCurrentTitle().subpageText == 'testcases' then
return frame:expandTemplate{title = 'module test cases notice'}
else
return p.main(frame)
end
end
p.main = makeInvokeFunc('_main')
function p._main(args)
--[[
-- This function defines logic flow for the module.
-- @args - table of arguments passed by the user
--]]
local env = p.getEnvironment(args)
local root = mw.html.create()
root
:wikitext(p._getModuleWikitext(args, env))
:wikitext(p.protectionTemplate(env))
:wikitext(p.sandboxNotice(args, env))
:tag('div')
-- 'documentation-container'
:addClass(message('container'))
:attr('role', 'complementary')
:attr('aria-labelledby', args.heading ~= '' and 'documentation-heading' or nil)
:attr('aria-label', args.heading == '' and 'Documentation' or nil)
:newline()
:tag('div')
-- 'documentation'
:addClass(message('main-div-classes'))
:newline()
:wikitext(p._startBox(args, env))
:wikitext(p._content(args, env))
:tag('div')
-- 'documentation-clear'
:addClass(message('clear'))
:done()
:newline()
:done()
:wikitext(p._endBox(args, env))
:done()
:wikitext(p.addTrackingCategories(env))
-- 'Module:Documentation/styles.css'
return mw.getCurrentFrame():extensionTag (
'templatestyles', '', {src=cfg['templatestyles']
}) .. tostring(root)
end
----------------------------------------------------------------------------
-- Environment settings
----------------------------------------------------------------------------
function p.getEnvironment(args)
--[[
-- Returns a table with information about the environment, including title
-- objects and other namespace- or path-related data.
-- @args - table of arguments passed by the user
--
-- Title objects include:
-- env.title - the page we are making documentation for (usually the current title)
-- env.templateTitle - the template (or module, file, etc.)
-- env.docTitle - the /doc subpage.
-- env.sandboxTitle - the /sandbox subpage.
-- env.testcasesTitle - the /testcases subpage.
--
-- Data includes:
-- env.protectionLevels - the protection levels table of the title object.
-- env.subjectSpace - the number of the title's subject namespace.
-- env.docSpace - the number of the namespace the title puts its documentation in.
-- env.docpageBase - the text of the base page of the /doc, /sandbox and /testcases pages, with namespace.
-- env.compareUrl - URL of the Special:ComparePages page comparing the sandbox with the template.
--
-- All table lookups are passed through pcall so that errors are caught. If an error occurs, the value
-- returned will be nil.
--]]
local env, envFuncs = {}, {}
-- Set up the metatable. If triggered we call the corresponding function in the envFuncs table. The value
-- returned by that function is memoized in the env table so that we don't call any of the functions
-- more than once. (Nils won't be memoized.)
setmetatable(env, {
__index = function (t, key)
local envFunc = envFuncs[key]
if envFunc then
local success, val = pcall(envFunc)
if success then
env[key] = val -- Memoise the value.
return val
end
end
return nil
end
})
function envFuncs.title()
-- The title object for the current page, or a test page passed with args.page.
local title
local titleArg = args.page
if titleArg then
title = mw.title.new(titleArg)
else
title = mw.title.getCurrentTitle()
end
return title
end
function envFuncs.templateTitle()
--[[
-- The template (or module, etc.) title object.
-- Messages:
-- 'sandbox-subpage' --> 'sandbox'
-- 'testcases-subpage' --> 'testcases'
--]]
local subjectSpace = env.subjectSpace
local title = env.title
local subpage = title.subpageText
if subpage == message('sandbox-subpage') or subpage == message('testcases-subpage') then
return mw.title.makeTitle(subjectSpace, title.baseText)
else
return mw.title.makeTitle(subjectSpace, title.text)
end
end
function envFuncs.docTitle()
--[[
-- Title object of the /doc subpage.
-- Messages:
-- 'doc-subpage' --> 'doc'
--]]
local title = env.title
local docname = args[1] -- User-specified doc page.
local docpage
if docname then
docpage = docname
else
docpage = env.docpageBase .. '/' .. message('doc-subpage')
end
return mw.title.new(docpage)
end
function envFuncs.sandboxTitle()
--[[
-- Title object for the /sandbox subpage.
-- Messages:
-- 'sandbox-subpage' --> 'sandbox'
--]]
return mw.title.new(env.docpageBase .. '/' .. message('sandbox-subpage'))
end
function envFuncs.testcasesTitle()
--[[
-- Title object for the /testcases subpage.
-- Messages:
-- 'testcases-subpage' --> 'testcases'
--]]
return mw.title.new(env.docpageBase .. '/' .. message('testcases-subpage'))
end
function envFuncs.protectionLevels()
-- The protection levels table of the title object.
return env.title.protectionLevels
end
function envFuncs.subjectSpace()
-- The subject namespace number.
return mw.site.namespaces[env.title.namespace].subject.id
end
function envFuncs.docSpace()
-- The documentation namespace number. For most namespaces this is the
-- same as the subject namespace. However, pages in the Article, File,
-- MediaWiki or Category namespaces must have their /doc, /sandbox and
-- /testcases pages in talk space.
local subjectSpace = env.subjectSpace
if subjectSpace == 0 or subjectSpace == 6 or subjectSpace == 8 or subjectSpace == 14 then
return subjectSpace + 1
else
return subjectSpace
end
end
function envFuncs.docpageBase()
-- The base page of the /doc, /sandbox, and /testcases subpages.
-- For some namespaces this is the talk page, rather than the template page.
local templateTitle = env.templateTitle
local docSpace = env.docSpace
local docSpaceText = mw.site.namespaces[docSpace].name
-- Assemble the link. docSpace is never the main namespace, so we can hardcode the colon.
return docSpaceText .. ':' .. templateTitle.text
end
function envFuncs.compareUrl()
-- Diff link between the sandbox and the main template using [[Special:ComparePages]].
local templateTitle = env.templateTitle
local sandboxTitle = env.sandboxTitle
if templateTitle.exists and sandboxTitle.exists then
local compareUrl = mw.uri.canonicalUrl(
'Special:ComparePages',
{ page1 = templateTitle.prefixedText, page2 = sandboxTitle.prefixedText}
)
return tostring(compareUrl)
else
return nil
end
end
return env
end
----------------------------------------------------------------------------
-- Auxiliary templates
----------------------------------------------------------------------------
p.getModuleWikitext = makeInvokeFunc('_getModuleWikitext')
function p._getModuleWikitext(args, env)
local currentTitle = mw.title.getCurrentTitle()
if currentTitle.contentModel ~= 'Scribunto' then return end
pcall(require, currentTitle.prefixedText) -- if it fails, we don't care
local moduleWikitext = package.loaded["Module:Module wikitext"]
if moduleWikitext then
return moduleWikitext.main()
end
end
function p.sandboxNotice(args, env)
--[=[
-- Generates a sandbox notice for display above sandbox pages.
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
--
-- Messages:
-- 'sandbox-notice-image' --> '[[File:Sandbox.svg|50px|alt=|link=]]'
-- 'sandbox-notice-blurb' --> 'This is the $1 for $2.'
-- 'sandbox-notice-diff-blurb' --> 'This is the $1 for $2 ($3).'
-- 'sandbox-notice-pagetype-template' --> '[[Wikipedia:Template test cases|template sandbox]] page'
-- 'sandbox-notice-pagetype-module' --> '[[Wikipedia:Template test cases|module sandbox]] page'
-- 'sandbox-notice-pagetype-other' --> 'sandbox page'
-- 'sandbox-notice-compare-link-display' --> 'diff'
-- 'sandbox-notice-testcases-blurb' --> 'See also the companion subpage for $1.'
-- 'sandbox-notice-testcases-link-display' --> 'test cases'
-- 'sandbox-category' --> 'Template sandboxes'
--]=]
local title = env.title
local sandboxTitle = env.sandboxTitle
local templateTitle = env.templateTitle
local subjectSpace = env.subjectSpace
if not (subjectSpace and title and sandboxTitle and templateTitle
and mw.title.equals(title, sandboxTitle)) then
return nil
end
-- Build the table of arguments to pass to {{ombox}}. We need just two fields, "image" and "text".
local omargs = {}
omargs.image = message('sandbox-notice-image')
-- Get the text. We start with the opening blurb, which is something like
-- "This is the template sandbox for [[Template:Foo]] (diff)."
local text = ''
local pagetype
if subjectSpace == 10 then
pagetype = message('sandbox-notice-pagetype-template')
elseif subjectSpace == 828 then
pagetype = message('sandbox-notice-pagetype-module')
else
pagetype = message('sandbox-notice-pagetype-other')
end
local templateLink = makeWikilink(templateTitle.prefixedText)
local compareUrl = env.compareUrl
if compareUrl then
local compareDisplay = message('sandbox-notice-compare-link-display')
local compareLink = makeUrlLink(compareUrl, compareDisplay)
text = text .. message('sandbox-notice-diff-blurb', {pagetype, templateLink, compareLink})
else
text = text .. message('sandbox-notice-blurb', {pagetype, templateLink})
end
-- Get the test cases page blurb if the page exists. This is something like
-- "See also the companion subpage for [[Template:Foo/testcases|test cases]]."
local testcasesTitle = env.testcasesTitle
if testcasesTitle and testcasesTitle.exists then
if testcasesTitle.contentModel == "Scribunto" then
local testcasesLinkDisplay = message('sandbox-notice-testcases-link-display')
local testcasesRunLinkDisplay = message('sandbox-notice-testcases-run-link-display')
local testcasesLink = makeWikilink(testcasesTitle.prefixedText, testcasesLinkDisplay)
local testcasesRunLink = makeWikilink(testcasesTitle.talkPageTitle.prefixedText, testcasesRunLinkDisplay)
text = text .. '<br />' .. message('sandbox-notice-testcases-run-blurb', {testcasesLink, testcasesRunLink})
else
local testcasesLinkDisplay = message('sandbox-notice-testcases-link-display')
local testcasesLink = makeWikilink(testcasesTitle.prefixedText, testcasesLinkDisplay)
text = text .. '<br />' .. message('sandbox-notice-testcases-blurb', {testcasesLink})
end
end
-- Add the sandbox to the sandbox category.
omargs.text = text .. makeCategoryLink(message('sandbox-category'))
-- 'documentation-clear'
return '<div class="' .. message('clear') .. '"></div>'
.. require('Module:Message box').main('ombox', omargs)
end
function p.protectionTemplate(env)
-- Generates the padlock icon in the top right.
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
-- Messages:
-- 'protection-template' --> 'pp-template'
-- 'protection-template-args' --> {docusage = 'yes'}
local protectionLevels = env.protectionLevels
if not protectionLevels then
return nil
end
local editProt = protectionLevels.edit and protectionLevels.edit[1]
local moveProt = protectionLevels.move and protectionLevels.move[1]
if editProt then
-- The page is edit-protected.
return require('Module:Protection banner')._main{
message('protection-reason-edit'), small = true
}
elseif moveProt and moveProt ~= 'autoconfirmed' then
-- The page is move-protected but not edit-protected. Exclude move
-- protection with the level "autoconfirmed", as this is equivalent to
-- no move protection at all.
return require('Module:Protection banner')._main{
action = 'move', small = true
}
else
return nil
end
end
----------------------------------------------------------------------------
-- Start box
----------------------------------------------------------------------------
p.startBox = makeInvokeFunc('_startBox')
function p._startBox(args, env)
--[[
-- This function generates the start box.
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
--
-- The actual work is done by p.makeStartBoxLinksData and p.renderStartBoxLinks which make
-- the [view] [edit] [history] [purge] links, and by p.makeStartBoxData and p.renderStartBox
-- which generate the box HTML.
--]]
env = env or p.getEnvironment(args)
local links
local content = args.content
if not content or args[1] then
-- No need to include the links if the documentation is on the template page itself.
local linksData = p.makeStartBoxLinksData(args, env)
if linksData then
links = p.renderStartBoxLinks(linksData)
end
end
-- Generate the start box html.
local data = p.makeStartBoxData(args, env, links)
if data then
return p.renderStartBox(data)
else
-- User specified no heading.
return nil
end
end
function p.makeStartBoxLinksData(args, env)
--[[
-- Does initial processing of data to make the [view] [edit] [history] [purge] links.
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
--
-- Messages:
-- 'view-link-display' --> 'view'
-- 'edit-link-display' --> 'edit'
-- 'history-link-display' --> 'history'
-- 'purge-link-display' --> 'purge'
-- 'module-preload' --> 'Template:Documentation/preload-module-doc'
-- 'docpage-preload' --> 'Template:Documentation/preload'
-- 'create-link-display' --> 'create'
--]]
local subjectSpace = env.subjectSpace
local title = env.title
local docTitle = env.docTitle
if not title or not docTitle then
return nil
end
if docTitle.isRedirect then
docTitle = docTitle.redirectTarget
end
-- Create link if /doc doesn't exist.
local preload = args.preload
if not preload then
if subjectSpace == 828 then -- Module namespace
preload = message('module-preload')
else
preload = message('docpage-preload')
end
end
return {
title = title,
docTitle = docTitle,
-- View, display, edit, and purge links if /doc exists.
viewLinkDisplay = message('view-link-display'),
editLinkDisplay = message('edit-link-display'),
historyLinkDisplay = message('history-link-display'),
purgeLinkDisplay = message('purge-link-display'),
preload = preload,
createLinkDisplay = message('create-link-display')
}
end
function p.renderStartBoxLinks(data)
--[[
-- Generates the [view][edit][history][purge] or [create][purge] links from the data table.
-- @data - a table of data generated by p.makeStartBoxLinksData
--]]
local docTitle = data.docTitle
-- yes, we do intend to purge the template page on which the documentation appears
local purgeLink = makeWikilink("Special:Purge/" .. data.title.prefixedText, data.purgeLinkDisplay)
if docTitle.exists then
local viewLink = makeWikilink(docTitle.prefixedText, data.viewLinkDisplay)
local editLink = makeWikilink("Special:EditPage/" .. docTitle.prefixedText, data.editLinkDisplay)
local historyLink = makeWikilink("Special:PageHistory/" .. docTitle.prefixedText, data.historyLinkDisplay)
return "[" .. viewLink .. "] [" .. editLink .. "] [" .. historyLink .. "] [" .. purgeLink .. "]"
else
local createLink = makeUrlLink(docTitle:canonicalUrl{action = 'edit', preload = data.preload}, data.createLinkDisplay)
return "[" .. createLink .. "] [" .. purgeLink .. "]"
end
return ret
end
function p.makeStartBoxData(args, env, links)
--[=[
-- Does initial processing of data to pass to the start-box render function, p.renderStartBox.
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
-- @links - a string containing the [view][edit][history][purge] links - could be nil if there's an error.
--
-- Messages:
-- 'documentation-icon-wikitext' --> '[[File:Test Template Info-Icon - Version (2).svg|50px|link=|alt=]]'
-- 'template-namespace-heading' --> 'Template documentation'
-- 'module-namespace-heading' --> 'Module documentation'
-- 'file-namespace-heading' --> 'Summary'
-- 'other-namespaces-heading' --> 'Documentation'
-- 'testcases-create-link-display' --> 'create'
--]=]
local subjectSpace = env.subjectSpace
if not subjectSpace then
-- Default to an "other namespaces" namespace, so that we get at least some output
-- if an error occurs.
subjectSpace = 2
end
local data = {}
-- Heading
local heading = args.heading -- Blank values are not removed.
if heading == '' then
-- Don't display the start box if the heading arg is defined but blank.
return nil
end
if heading then
data.heading = heading
elseif subjectSpace == 10 then -- Template namespace
data.heading = message('documentation-icon-wikitext') .. ' ' .. message('template-namespace-heading')
elseif subjectSpace == 828 then -- Module namespace
data.heading = message('documentation-icon-wikitext') .. ' ' .. message('module-namespace-heading')
elseif subjectSpace == 6 then -- File namespace
data.heading = message('file-namespace-heading')
else
data.heading = message('other-namespaces-heading')
end
-- Heading CSS
local headingStyle = args['heading-style']
if headingStyle then
data.headingStyleText = headingStyle
else
-- 'documentation-heading'
data.headingClass = message('main-div-heading-class')
end
-- Data for the [view][edit][history][purge] or [create] links.
if links then
-- 'mw-editsection-like plainlinks'
data.linksClass = message('start-box-link-classes')
data.links = links
end
return data
end
function p.renderStartBox(data)
-- Renders the start box html.
-- @data - a table of data generated by p.makeStartBoxData.
local sbox = mw.html.create('div')
sbox
-- 'documentation-startbox'
:addClass(message('start-box-class'))
:newline()
:tag('span')
:addClass(data.headingClass)
:attr('id', 'documentation-heading')
:cssText(data.headingStyleText)
:wikitext(data.heading)
local links = data.links
if links then
sbox:tag('span')
:addClass(data.linksClass)
:attr('id', data.linksId)
:wikitext(links)
end
return tostring(sbox)
end
----------------------------------------------------------------------------
-- Documentation content
----------------------------------------------------------------------------
p.content = makeInvokeFunc('_content')
function p._content(args, env)
-- Displays the documentation contents
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
env = env or p.getEnvironment(args)
local docTitle = env.docTitle
local content = args.content
if not content and docTitle and docTitle.exists then
content = args._content or mw.getCurrentFrame():expandTemplate{title = docTitle.prefixedText}
end
-- The line breaks below are necessary so that "=== Headings ===" at the start and end
-- of docs are interpreted correctly.
return '\n' .. (content or '') .. '\n'
end
p.contentTitle = makeInvokeFunc('_contentTitle')
function p._contentTitle(args, env)
env = env or p.getEnvironment(args)
local docTitle = env.docTitle
if not args.content and docTitle and docTitle.exists then
return docTitle.prefixedText
else
return ''
end
end
----------------------------------------------------------------------------
-- End box
----------------------------------------------------------------------------
p.endBox = makeInvokeFunc('_endBox')
function p._endBox(args, env)
--[=[
-- This function generates the end box (also known as the link box).
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
--
--]=]
-- Get environment data.
env = env or p.getEnvironment(args)
local subjectSpace = env.subjectSpace
local docTitle = env.docTitle
if not subjectSpace or not docTitle then
return nil
end
-- Check whether we should output the end box at all. Add the end
-- box by default if the documentation exists or if we are in the
-- user, module or template namespaces.
local linkBox = args['link box']
if linkBox == 'off'
or not (
docTitle.exists
or subjectSpace == 2
or subjectSpace == 828
or subjectSpace == 10
)
then
return nil
end
-- Assemble the link box.
local text = ''
if linkBox then
text = text .. linkBox
else
text = text .. (p.makeDocPageBlurb(args, env) or '') -- "This documentation is transcluded from [[Foo]]."
if subjectSpace == 2 or subjectSpace == 10 or subjectSpace == 828 then
-- We are in the user, template or module namespaces.
-- Add sandbox and testcases links.
-- "Editors can experiment in this template's sandbox and testcases pages."
text = text .. (p.makeExperimentBlurb(args, env) or '') .. '<br />'
if not args.content and not args[1] then
-- "Please add categories to the /doc subpage."
-- Don't show this message with inline docs or with an explicitly specified doc page,
-- as then it is unclear where to add the categories.
text = text .. (p.makeCategoriesBlurb(args, env) or '')
end
text = text .. ' ' .. (p.makeSubpagesBlurb(args, env) or '') --"Subpages of this template"
end
end
local box = mw.html.create('div')
-- 'documentation-metadata'
box:attr('role', 'note')
:addClass(message('end-box-class'))
-- 'plainlinks'
:addClass(message('end-box-plainlinks'))
:wikitext(text)
:done()
return '\n' .. tostring(box)
end
function p.makeDocPageBlurb(args, env)
--[=[
-- Makes the blurb "This documentation is transcluded from [[Template:Foo]] (edit, history)".
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
--
-- Messages:
-- 'edit-link-display' --> 'edit'
-- 'history-link-display' --> 'history'
-- 'transcluded-from-blurb' -->
-- 'The above [[Wikipedia:Template documentation|documentation]]
-- is [[Help:Transclusion|transcluded]] from $1.'
-- 'module-preload' --> 'Template:Documentation/preload-module-doc'
-- 'create-link-display' --> 'create'
-- 'create-module-doc-blurb' -->
-- 'You might want to $1 a documentation page for this [[Wikipedia:Lua|Scribunto module]].'
--]=]
local docTitle = env.docTitle
if not docTitle then
return nil
end
local ret
if docTitle.exists then
-- /doc exists; link to it.
local docLink = makeWikilink(docTitle.prefixedText)
local editDisplay = message('edit-link-display')
local editLink = makeWikilink("Special:EditPage/" .. docTitle.prefixedText, editDisplay)
local historyDisplay = message('history-link-display')
local historyLink = makeWikilink("Special:PageHistory/" .. docTitle.prefixedText, historyDisplay)
ret = message('transcluded-from-blurb', {docLink})
.. ' '
.. makeToolbar(editLink, historyLink)
.. '<br />'
elseif env.subjectSpace == 828 then
-- /doc does not exist; ask to create it.
local createUrl = docTitle:canonicalUrl{action = 'edit', preload = message('module-preload')}
local createDisplay = message('create-link-display')
local createLink = makeUrlLink(createUrl, createDisplay)
ret = message('create-module-doc-blurb', {createLink})
.. '<br />'
end
return ret
end
function p.makeExperimentBlurb(args, env)
--[[
-- Renders the text "Editors can experiment in this template's sandbox (edit | diff) and testcases (edit) pages."
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
--
-- Messages:
-- 'sandbox-link-display' --> 'sandbox'
-- 'sandbox-edit-link-display' --> 'edit'
-- 'compare-link-display' --> 'diff'
-- 'module-sandbox-preload' --> 'Template:Documentation/preload-module-sandbox'
-- 'template-sandbox-preload' --> 'Template:Documentation/preload-sandbox'
-- 'sandbox-create-link-display' --> 'create'
-- 'mirror-edit-summary' --> 'Create sandbox version of $1'
-- 'mirror-link-display' --> 'mirror'
-- 'mirror-link-preload' --> 'Template:Documentation/mirror'
-- 'sandbox-link-display' --> 'sandbox'
-- 'testcases-link-display' --> 'testcases'
-- 'testcases-edit-link-display'--> 'edit'
-- 'template-sandbox-preload' --> 'Template:Documentation/preload-sandbox'
-- 'testcases-create-link-display' --> 'create'
-- 'testcases-link-display' --> 'testcases'
-- 'testcases-edit-link-display' --> 'edit'
-- 'module-testcases-preload' --> 'Template:Documentation/preload-module-testcases'
-- 'template-testcases-preload' --> 'Template:Documentation/preload-testcases'
-- 'experiment-blurb-module' --> 'Editors can experiment in this module's $1 and $2 pages.'
-- 'experiment-blurb-template' --> 'Editors can experiment in this template's $1 and $2 pages.'
--]]
local subjectSpace = env.subjectSpace
local templateTitle = env.templateTitle
local sandboxTitle = env.sandboxTitle
local testcasesTitle = env.testcasesTitle
local templatePage = templateTitle.prefixedText
if not subjectSpace or not templateTitle or not sandboxTitle or not testcasesTitle then
return nil
end
-- Make links.
local sandboxLinks, testcasesLinks
if sandboxTitle.exists then
local sandboxPage = sandboxTitle.prefixedText
local sandboxDisplay = message('sandbox-link-display')
local sandboxLink = makeWikilink(sandboxPage, sandboxDisplay)
local sandboxEditDisplay = message('sandbox-edit-link-display')
local sandboxEditLink = makeWikilink("Special:EditPage/" .. sandboxPage, sandboxEditDisplay)
local compareUrl = env.compareUrl
local compareLink
if compareUrl then
local compareDisplay = message('compare-link-display')
compareLink = makeUrlLink(compareUrl, compareDisplay)
end
sandboxLinks = sandboxLink .. ' ' .. makeToolbar(sandboxEditLink, compareLink)
else
local sandboxPreload
if subjectSpace == 828 then
sandboxPreload = message('module-sandbox-preload')
else
sandboxPreload = message('template-sandbox-preload')
end
local sandboxCreateUrl = sandboxTitle:canonicalUrl{action = 'edit', preload = sandboxPreload}
local sandboxCreateDisplay = message('sandbox-create-link-display')
local sandboxCreateLink = makeUrlLink(sandboxCreateUrl, sandboxCreateDisplay)
local mirrorSummary = message('mirror-edit-summary', {makeWikilink(templatePage)})
local mirrorPreload = message('mirror-link-preload')
local mirrorUrl = sandboxTitle:canonicalUrl{action = 'edit', preload = mirrorPreload, summary = mirrorSummary}
if subjectSpace == 828 then
mirrorUrl = sandboxTitle:canonicalUrl{action = 'edit', preload = templateTitle.prefixedText, summary = mirrorSummary}
end
local mirrorDisplay = message('mirror-link-display')
local mirrorLink = makeUrlLink(mirrorUrl, mirrorDisplay)
sandboxLinks = message('sandbox-link-display') .. ' ' .. makeToolbar(sandboxCreateLink, mirrorLink)
end
if testcasesTitle.exists then
local testcasesPage = testcasesTitle.prefixedText
local testcasesDisplay = message('testcases-link-display')
local testcasesLink = makeWikilink(testcasesPage, testcasesDisplay)
local testcasesEditUrl = testcasesTitle:canonicalUrl{action = 'edit'}
local testcasesEditDisplay = message('testcases-edit-link-display')
local testcasesEditLink = makeWikilink("Special:EditPage/" .. testcasesPage, testcasesEditDisplay)
-- for Modules, add testcases run link if exists
if testcasesTitle.contentModel == "Scribunto" and testcasesTitle.talkPageTitle and testcasesTitle.talkPageTitle.exists then
local testcasesRunLinkDisplay = message('testcases-run-link-display')
local testcasesRunLink = makeWikilink(testcasesTitle.talkPageTitle.prefixedText, testcasesRunLinkDisplay)
testcasesLinks = testcasesLink .. ' ' .. makeToolbar(testcasesEditLink, testcasesRunLink)
else
testcasesLinks = testcasesLink .. ' ' .. makeToolbar(testcasesEditLink)
end
else
local testcasesPreload
if subjectSpace == 828 then
testcasesPreload = message('module-testcases-preload')
else
testcasesPreload = message('template-testcases-preload')
end
local testcasesCreateUrl = testcasesTitle:canonicalUrl{action = 'edit', preload = testcasesPreload}
local testcasesCreateDisplay = message('testcases-create-link-display')
local testcasesCreateLink = makeUrlLink(testcasesCreateUrl, testcasesCreateDisplay)
testcasesLinks = message('testcases-link-display') .. ' ' .. makeToolbar(testcasesCreateLink)
end
local messageName
if subjectSpace == 828 then
messageName = 'experiment-blurb-module'
else
messageName = 'experiment-blurb-template'
end
return message(messageName, {sandboxLinks, testcasesLinks})
end
function p.makeCategoriesBlurb(args, env)
--[[
-- Generates the text "Please add categories to the /doc subpage."
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
-- Messages:
-- 'doc-link-display' --> '/doc'
-- 'add-categories-blurb' --> 'Please add categories to the $1 subpage.'
--]]
local docTitle = env.docTitle
if not docTitle then
return nil
end
local docPathLink = makeWikilink(docTitle.prefixedText, message('doc-link-display'))
return message('add-categories-blurb', {docPathLink})
end
function p.makeSubpagesBlurb(args, env)
--[[
-- Generates the "Subpages of this template" link.
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
-- Messages:
-- 'template-pagetype' --> 'template'
-- 'module-pagetype' --> 'module'
-- 'default-pagetype' --> 'page'
-- 'subpages-link-display' --> 'Subpages of this $1'
--]]
local subjectSpace = env.subjectSpace
local templateTitle = env.templateTitle
if not subjectSpace or not templateTitle then
return nil
end
local pagetype
if subjectSpace == 10 then
pagetype = message('template-pagetype')
elseif subjectSpace == 828 then
pagetype = message('module-pagetype')
else
pagetype = message('default-pagetype')
end
local subpagesLink = makeWikilink(
'Special:PrefixIndex/' .. templateTitle.prefixedText .. '/',
message('subpages-link-display', {pagetype})
)
return message('subpages-blurb', {subpagesLink})
end
----------------------------------------------------------------------------
-- Tracking categories
----------------------------------------------------------------------------
function p.addTrackingCategories(env)
--[[
-- Check if {{documentation}} is transcluded on a /doc or /testcases page.
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
-- Messages:
-- 'display-strange-usage-category' --> true
-- 'doc-subpage' --> 'doc'
-- 'testcases-subpage' --> 'testcases'
-- 'strange-usage-category' --> 'Wikipedia pages with strange ((documentation)) usage'
--
-- /testcases pages in the module namespace are not categorised, as they may have
-- {{documentation}} transcluded automatically.
--]]
local title = env.title
local subjectSpace = env.subjectSpace
if not title or not subjectSpace then
return nil
end
local subpage = title.subpageText
local ret = ''
if message('display-strange-usage-category', nil, 'boolean')
and (
subpage == message('doc-subpage')
or subjectSpace ~= 828 and subpage == message('testcases-subpage')
)
then
ret = ret .. makeCategoryLink(message('strange-usage-category'))
end
return ret
end
return p
268dc89480af10873bfbca5439ae8e61b404f770
Module:Documentation/config
828
60
649
125
2023-09-14T11:00:52Z
Ilovethehitgameomori
2
1 revision imported
Scribunto
text/plain
----------------------------------------------------------------------------------------------------
--
-- Configuration for Module:Documentation
--
-- Here you can set the values of the parameters and messages used in Module:Documentation to
-- localise it to your wiki and your language. Unless specified otherwise, values given here
-- should be string values.
----------------------------------------------------------------------------------------------------
local cfg = {} -- Do not edit this line.
----------------------------------------------------------------------------------------------------
-- Protection template configuration
----------------------------------------------------------------------------------------------------
-- cfg['protection-reason-edit']
-- The protection reason for edit-protected templates to pass to
-- [[Module:Protection banner]].
cfg['protection-reason-edit'] = 'template'
--[[
----------------------------------------------------------------------------------------------------
-- Sandbox notice configuration
--
-- On sandbox pages the module can display a template notifying users that the current page is a
-- sandbox, and the location of test cases pages, etc. The module decides whether the page is a
-- sandbox or not based on the value of cfg['sandbox-subpage']. The following settings configure the
-- messages that the notices contains.
----------------------------------------------------------------------------------------------------
--]]
-- cfg['sandbox-notice-image']
-- The image displayed in the sandbox notice.
cfg['sandbox-notice-image'] = '[[File:Sandbox.svg|50px|alt=|link=]]'
--[[
-- cfg['sandbox-notice-pagetype-template']
-- cfg['sandbox-notice-pagetype-module']
-- cfg['sandbox-notice-pagetype-other']
-- The page type of the sandbox page. The message that is displayed depends on the current subject
-- namespace. This message is used in either cfg['sandbox-notice-blurb'] or
-- cfg['sandbox-notice-diff-blurb'].
--]]
cfg['sandbox-notice-pagetype-template'] = '[[Wikipedia:Template test cases|template sandbox]] page'
cfg['sandbox-notice-pagetype-module'] = '[[Wikipedia:Template test cases|module sandbox]] page'
cfg['sandbox-notice-pagetype-other'] = 'sandbox page'
--[[
-- cfg['sandbox-notice-blurb']
-- cfg['sandbox-notice-diff-blurb']
-- cfg['sandbox-notice-diff-display']
-- Either cfg['sandbox-notice-blurb'] or cfg['sandbox-notice-diff-blurb'] is the opening sentence
-- of the sandbox notice. The latter has a diff link, but the former does not. $1 is the page
-- type, which is either cfg['sandbox-notice-pagetype-template'],
-- cfg['sandbox-notice-pagetype-module'] or cfg['sandbox-notice-pagetype-other'] depending what
-- namespace we are in. $2 is a link to the main template page, and $3 is a diff link between
-- the sandbox and the main template. The display value of the diff link is set by
-- cfg['sandbox-notice-compare-link-display'].
--]]
cfg['sandbox-notice-blurb'] = 'This is the $1 for $2.'
cfg['sandbox-notice-diff-blurb'] = 'This is the $1 for $2 ($3).'
cfg['sandbox-notice-compare-link-display'] = 'diff'
--[[
-- cfg['sandbox-notice-testcases-blurb']
-- cfg['sandbox-notice-testcases-link-display']
-- cfg['sandbox-notice-testcases-run-blurb']
-- cfg['sandbox-notice-testcases-run-link-display']
-- cfg['sandbox-notice-testcases-blurb'] is a sentence notifying the user that there is a test cases page
-- corresponding to this sandbox that they can edit. $1 is a link to the test cases page.
-- cfg['sandbox-notice-testcases-link-display'] is the display value for that link.
-- cfg['sandbox-notice-testcases-run-blurb'] is a sentence notifying the user that there is a test cases page
-- corresponding to this sandbox that they can edit, along with a link to run it. $1 is a link to the test
-- cases page, and $2 is a link to the page to run it.
-- cfg['sandbox-notice-testcases-run-link-display'] is the display value for the link to run the test
-- cases.
--]]
cfg['sandbox-notice-testcases-blurb'] = 'See also the companion subpage for $1.'
cfg['sandbox-notice-testcases-link-display'] = 'test cases'
cfg['sandbox-notice-testcases-run-blurb'] = 'See also the companion subpage for $1 ($2).'
cfg['sandbox-notice-testcases-run-link-display'] = 'run'
-- cfg['sandbox-category']
-- A category to add to all template sandboxes.
cfg['sandbox-category'] = 'Template sandboxes'
----------------------------------------------------------------------------------------------------
-- Start box configuration
----------------------------------------------------------------------------------------------------
-- cfg['documentation-icon-wikitext']
-- The wikitext for the icon shown at the top of the template.
cfg['documentation-icon-wikitext'] = '[[File:Test Template Info-Icon - Version (2).svg|50px|link=|alt=]]'
-- cfg['template-namespace-heading']
-- The heading shown in the template namespace.
cfg['template-namespace-heading'] = 'Template documentation'
-- cfg['module-namespace-heading']
-- The heading shown in the module namespace.
cfg['module-namespace-heading'] = 'Module documentation'
-- cfg['file-namespace-heading']
-- The heading shown in the file namespace.
cfg['file-namespace-heading'] = 'Summary'
-- cfg['other-namespaces-heading']
-- The heading shown in other namespaces.
cfg['other-namespaces-heading'] = 'Documentation'
-- cfg['view-link-display']
-- The text to display for "view" links.
cfg['view-link-display'] = 'view'
-- cfg['edit-link-display']
-- The text to display for "edit" links.
cfg['edit-link-display'] = 'edit'
-- cfg['history-link-display']
-- The text to display for "history" links.
cfg['history-link-display'] = 'history'
-- cfg['purge-link-display']
-- The text to display for "purge" links.
cfg['purge-link-display'] = 'purge'
-- cfg['create-link-display']
-- The text to display for "create" links.
cfg['create-link-display'] = 'create'
----------------------------------------------------------------------------------------------------
-- Link box (end box) configuration
----------------------------------------------------------------------------------------------------
-- cfg['transcluded-from-blurb']
-- Notice displayed when the docs are transcluded from another page. $1 is a wikilink to that page.
cfg['transcluded-from-blurb'] = 'The above [[Wikipedia:Template documentation|documentation]] is [[Help:Transclusion|transcluded]] from $1.'
--[[
-- cfg['create-module-doc-blurb']
-- Notice displayed in the module namespace when the documentation subpage does not exist.
-- $1 is a link to create the documentation page with the preload cfg['module-preload'] and the
-- display cfg['create-link-display'].
--]]
cfg['create-module-doc-blurb'] = 'You might want to $1 a documentation page for this [[Wikipedia:Lua|Scribunto module]].'
----------------------------------------------------------------------------------------------------
-- Experiment blurb configuration
----------------------------------------------------------------------------------------------------
--[[
-- cfg['experiment-blurb-template']
-- cfg['experiment-blurb-module']
-- The experiment blurb is the text inviting editors to experiment in sandbox and test cases pages.
-- It is only shown in the template and module namespaces. With the default English settings, it
-- might look like this:
--
-- Editors can experiment in this template's sandbox (edit | diff) and testcases (edit) pages.
--
-- In this example, "sandbox", "edit", "diff", "testcases", and "edit" would all be links.
--
-- There are two versions, cfg['experiment-blurb-template'] and cfg['experiment-blurb-module'], depending
-- on what namespace we are in.
--
-- Parameters:
--
-- $1 is a link to the sandbox page. If the sandbox exists, it is in the following format:
--
-- cfg['sandbox-link-display'] (cfg['sandbox-edit-link-display'] | cfg['compare-link-display'])
--
-- If the sandbox doesn't exist, it is in the format:
--
-- cfg['sandbox-link-display'] (cfg['sandbox-create-link-display'] | cfg['mirror-link-display'])
--
-- The link for cfg['sandbox-create-link-display'] link preloads the page with cfg['template-sandbox-preload']
-- or cfg['module-sandbox-preload'], depending on the current namespace. The link for cfg['mirror-link-display']
-- loads a default edit summary of cfg['mirror-edit-summary'].
--
-- $2 is a link to the test cases page. If the test cases page exists, it is in the following format:
--
-- cfg['testcases-link-display'] (cfg['testcases-edit-link-display'] | cfg['testcases-run-link-display'])
--
-- If the test cases page doesn't exist, it is in the format:
--
-- cfg['testcases-link-display'] (cfg['testcases-create-link-display'])
--
-- If the test cases page doesn't exist, the link for cfg['testcases-create-link-display'] preloads the
-- page with cfg['template-testcases-preload'] or cfg['module-testcases-preload'], depending on the current
-- namespace.
--]]
cfg['experiment-blurb-template'] = "Editors can experiment in this template's $1 and $2 pages."
cfg['experiment-blurb-module'] = "Editors can experiment in this module's $1 and $2 pages."
----------------------------------------------------------------------------------------------------
-- Sandbox link configuration
----------------------------------------------------------------------------------------------------
-- cfg['sandbox-subpage']
-- The name of the template subpage typically used for sandboxes.
cfg['sandbox-subpage'] = 'sandbox'
-- cfg['template-sandbox-preload']
-- Preload file for template sandbox pages.
cfg['template-sandbox-preload'] = 'Template:Documentation/preload-sandbox'
-- cfg['module-sandbox-preload']
-- Preload file for Lua module sandbox pages.
cfg['module-sandbox-preload'] = 'Template:Documentation/preload-module-sandbox'
-- cfg['sandbox-link-display']
-- The text to display for "sandbox" links.
cfg['sandbox-link-display'] = 'sandbox'
-- cfg['sandbox-edit-link-display']
-- The text to display for sandbox "edit" links.
cfg['sandbox-edit-link-display'] = 'edit'
-- cfg['sandbox-create-link-display']
-- The text to display for sandbox "create" links.
cfg['sandbox-create-link-display'] = 'create'
-- cfg['compare-link-display']
-- The text to display for "compare" links.
cfg['compare-link-display'] = 'diff'
-- cfg['mirror-edit-summary']
-- The default edit summary to use when a user clicks the "mirror" link. $1 is a wikilink to the
-- template page.
cfg['mirror-edit-summary'] = 'Create sandbox version of $1'
-- cfg['mirror-link-display']
-- The text to display for "mirror" links.
cfg['mirror-link-display'] = 'mirror'
-- cfg['mirror-link-preload']
-- The page to preload when a user clicks the "mirror" link.
cfg['mirror-link-preload'] = 'Template:Documentation/mirror'
----------------------------------------------------------------------------------------------------
-- Test cases link configuration
----------------------------------------------------------------------------------------------------
-- cfg['testcases-subpage']
-- The name of the template subpage typically used for test cases.
cfg['testcases-subpage'] = 'testcases'
-- cfg['template-testcases-preload']
-- Preload file for template test cases pages.
cfg['template-testcases-preload'] = 'Template:Documentation/preload-testcases'
-- cfg['module-testcases-preload']
-- Preload file for Lua module test cases pages.
cfg['module-testcases-preload'] = 'Template:Documentation/preload-module-testcases'
-- cfg['testcases-link-display']
-- The text to display for "testcases" links.
cfg['testcases-link-display'] = 'testcases'
-- cfg['testcases-edit-link-display']
-- The text to display for test cases "edit" links.
cfg['testcases-edit-link-display'] = 'edit'
-- cfg['testcases-run-link-display']
-- The text to display for test cases "run" links.
cfg['testcases-run-link-display'] = 'run'
-- cfg['testcases-create-link-display']
-- The text to display for test cases "create" links.
cfg['testcases-create-link-display'] = 'create'
----------------------------------------------------------------------------------------------------
-- Add categories blurb configuration
----------------------------------------------------------------------------------------------------
--[[
-- cfg['add-categories-blurb']
-- Text to direct users to add categories to the /doc subpage. Not used if the "content" or
-- "docname fed" arguments are set, as then it is not clear where to add the categories. $1 is a
-- link to the /doc subpage with a display value of cfg['doc-link-display'].
--]]
cfg['add-categories-blurb'] = 'Add categories to the $1 subpage.'
-- cfg['doc-link-display']
-- The text to display when linking to the /doc subpage.
cfg['doc-link-display'] = '/doc'
----------------------------------------------------------------------------------------------------
-- Subpages link configuration
----------------------------------------------------------------------------------------------------
--[[
-- cfg['subpages-blurb']
-- The "Subpages of this template" blurb. $1 is a link to the main template's subpages with a
-- display value of cfg['subpages-link-display']. In the English version this blurb is simply
-- the link followed by a period, and the link display provides the actual text.
--]]
cfg['subpages-blurb'] = '$1.'
--[[
-- cfg['subpages-link-display']
-- The text to display for the "subpages of this page" link. $1 is cfg['template-pagetype'],
-- cfg['module-pagetype'] or cfg['default-pagetype'], depending on whether the current page is in
-- the template namespace, the module namespace, or another namespace.
--]]
cfg['subpages-link-display'] = 'Subpages of this $1'
-- cfg['template-pagetype']
-- The pagetype to display for template pages.
cfg['template-pagetype'] = 'template'
-- cfg['module-pagetype']
-- The pagetype to display for Lua module pages.
cfg['module-pagetype'] = 'module'
-- cfg['default-pagetype']
-- The pagetype to display for pages other than templates or Lua modules.
cfg['default-pagetype'] = 'page'
----------------------------------------------------------------------------------------------------
-- Doc link configuration
----------------------------------------------------------------------------------------------------
-- cfg['doc-subpage']
-- The name of the subpage typically used for documentation pages.
cfg['doc-subpage'] = 'doc'
-- cfg['docpage-preload']
-- Preload file for template documentation pages in all namespaces.
cfg['docpage-preload'] = 'Template:Documentation/preload'
-- cfg['module-preload']
-- Preload file for Lua module documentation pages.
cfg['module-preload'] = 'Template:Documentation/preload-module-doc'
----------------------------------------------------------------------------------------------------
-- HTML and CSS configuration
----------------------------------------------------------------------------------------------------
-- cfg['templatestyles']
-- The name of the TemplateStyles page where CSS is kept.
-- Sandbox CSS will be at Module:Documentation/sandbox/styles.css when needed.
cfg['templatestyles'] = 'Module:Documentation/styles.css'
-- cfg['container']
-- Class which can be used to set flex or grid CSS on the
-- two child divs documentation and documentation-metadata
cfg['container'] = 'documentation-container'
-- cfg['main-div-classes']
-- Classes added to the main HTML "div" tag.
cfg['main-div-classes'] = 'documentation'
-- cfg['main-div-heading-class']
-- Class for the main heading for templates and modules and assoc. talk spaces
cfg['main-div-heading-class'] = 'documentation-heading'
-- cfg['start-box-class']
-- Class for the start box
cfg['start-box-class'] = 'documentation-startbox'
-- cfg['start-box-link-classes']
-- Classes used for the [view][edit][history] or [create] links in the start box.
-- mw-editsection-like is per [[Wikipedia:Village pump (technical)/Archive 117]]
cfg['start-box-link-classes'] = 'mw-editsection-like plainlinks'
-- cfg['end-box-class']
-- Class for the end box.
cfg['end-box-class'] = 'documentation-metadata'
-- cfg['end-box-plainlinks']
-- Plainlinks
cfg['end-box-plainlinks'] = 'plainlinks'
-- cfg['toolbar-class']
-- Class added for toolbar links.
cfg['toolbar-class'] = 'documentation-toolbar'
-- cfg['clear']
-- Just used to clear things.
cfg['clear'] = 'documentation-clear'
----------------------------------------------------------------------------------------------------
-- Tracking category configuration
----------------------------------------------------------------------------------------------------
-- cfg['display-strange-usage-category']
-- Set to true to enable output of cfg['strange-usage-category'] if the module is used on a /doc subpage
-- or a /testcases subpage. This should be a boolean value (either true or false).
cfg['display-strange-usage-category'] = true
-- cfg['strange-usage-category']
-- Category to output if cfg['display-strange-usage-category'] is set to true and the module is used on a
-- /doc subpage or a /testcases subpage.
cfg['strange-usage-category'] = 'Wikipedia pages with strange ((documentation)) usage'
--[[
----------------------------------------------------------------------------------------------------
-- End configuration
--
-- Don't edit anything below this line.
----------------------------------------------------------------------------------------------------
--]]
return cfg
71b68ed73088f1a59d61acf06bbee9fde6677f03
Template:Template link
10
18
653
41
2023-09-14T11:00:53Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{[[Template:{{{1}}}|{{{1}}}]]}}<noinclude>{{documentation}}
<!-- Categories go on the /doc subpage and interwikis go on Wikidata. -->
</noinclude>
eabbec62efe3044a98ebb3ce9e7d4d43c222351d
Template:Tl
10
17
655
39
2023-09-14T11:00:53Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
#REDIRECT [[Template:Template link]]
{{Redirect category shell|
{{R from move}}
}}
d6593bb3b4a866249f55d0f34b047a71fe1f1529
Template:Clear
10
34
657
73
2023-09-14T11:00:54Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
<div style="clear:{{{1|both}}};"></div><noinclude>
{{documentation}}
</noinclude>
38bab3e3d7fbd3d6800d46556e60bc6bac494d72
Template:Infobox/doc
10
79
659
163
2023-09-14T11:00:54Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{Documentation subpage}}
<!-- Please place categories where indicated at the bottom of this page and interwikis at Wikidata (see [[Wikipedia:Wikidata]]) -->
{{distinguish|Template:Userbox}}
{{#ifeq:{{SUBPAGENAME}}|sandbox||{{High-use}}}}
{{Lua|Module:Infobox}}
{{Parameter names example
|name={{PAGENAME}} <!--|child |subbox |decat--> |title |above |subheader |subheader1 |subheader2={{{subheader2}}}<br/>......
|image|caption |image1|caption1 |image2|caption2={{{caption2}}}<br/>......
|header1=<div style="border-top:1px dashed #ccc;">{{{header1}}}<br/>{{nobold|( ''or'' )}}</div>
|label2={{{label1}}} |data2={{{data1}}}
|data3=( ''or'' ) |data4=<div style="padding-bottom:0.25em;border-bottom:1px dashed #ccc;">{{{data1}}}</div>
|header5={{{header2}}}<br/><div style="padding:0.75em 0 0.5em;">{{nobold|( ''or'' )}}</div>
|label6={{{label2}}} |data6={{{data2}}}
|data7=( ''or'' ) |data8=<div style="padding-bottom:0.25em;border-bottom:1px dashed #ccc;">{{{data2}}}</div>
|data9=<div style="padding:0.75em 0 0.5em;">( ''etc'' )</div>
|below
}}
This template is intended as a meta template: a template used for constructing other templates. '''Note''': In general, it is not meant for use directly in an article, but can be used on a one-off basis if required. [[Help:Infobox]] contains an introduction about the recommended content and design of infoboxes; [[Wikipedia:Manual of Style/Infoboxes]] contains additional style guidelines. See [[WP:List of infoboxes]] and [[:Category:Infobox templates]] for lists of prepared topic-specific infoboxes.
== Usage ==
{{tlf|Infobox}} is a meta-template: used to organise an actual <nowiki>{{Infobox sometopic}}</nowiki> template (like {{tl|Infobox building}}).
For <code><nowiki>[[Template:Infobox sometopic]]</nowiki></code>, template code then looks like this, simplified:
<syntaxhighlight lang="wikitext">
{{Infobox
| name = {{{name|{{PAGENAME}}}}}
| image = {{{image|}}}
| caption1 = {{{caption|}}}
| label1 = Former names
| data1 = {{{former_names|}}}
| header2 = General information
| label3 = Status
| data3 = {{{status|}}}
... <!-- etc. -->
}}
</syntaxhighlight>
== Optional control parameters ==
; name : If this parameter is present, "view/talk/edit" links will be added to the bottom of the infobox pointing to the named page, prefixed by <code>Template:</code> if no namespace is specified. You may use the value <nowiki>{{subst:PAGENAME}}</nowiki>; however, this is rarely what you want because it will send users clicking these links in an infobox to the template code rather than the data in the infobox they probably want to change.
; child : See the [[#Embedding|Embedding]] section for details. If this is set to "yes", this child infobox should be titled but have no name parameter. This parameter is empty by default, set it to "yes" to activate it.
; subbox : See the [[#Subboxes|Subboxes]] section for details. If this is set to "yes", this subbox should be titled but have no name parameter. This parameter is empty by default, set to "yes" to activate it. It has no effect if the '''child''' parameter is also set to "yes".
; decat : If this is set to "yes", the current page will not be autocategorized in a maintenance category when the generated infobox has some problems or no visible data section. Leave empty by default or set to "yes" to activate it.
; autoheaders: If this is set to any non-blank value, headers which are not followed by data fields are suppressed. See the "[[#Hiding headers when all its data fields are empty|hiding headers when all its data fields are empty]]" section for more details.
== Content parameters ==
=== Title ===
There are two different ways to put a title on an infobox. One contains the title inside the infobox's border in the uppermost cell of the table, the other puts it as a caption on top of the table. You can use them both together, or just one or the other, or neither (though this is not recommended):
; title : Text to put in the caption over the top of the table (or as section header before the whole content of this table, if this is a child infobox). For [[Wikipedia:Manual of Style/Accessibility#Tables|accessibility reasons]], this is the most recommended alternative.
; above : Text to put within the uppermost cell of the table.
; subheader(n) : additional title fields which fit below {{{title}}} and {{{above}}}, but before images.
Examples:
{{Infobox
| name = Infobox/doc
| title = Text in caption over infobox
| subheader = Subheader of the infobox
| header = (the rest of the infobox goes here)
}}
<syntaxhighlight lang="wikitext" style="overflow:auto">
{{Infobox
| name = {{subst:PAGENAME}}
| title = Text in caption over infobox
| subheader = Subheader of the infobox
| header = (the rest of the infobox goes here)
}}
</syntaxhighlight>{{clear}}
{{Infobox
| name = Infobox/doc
| above = Text in uppermost cell of infobox
| subheader = Subheader of the infobox
| subheader2 = Second subheader of the infobox
| header = (the rest of the infobox goes here)
}}
<syntaxhighlight lang="wikitext" style="overflow:auto">
{{Infobox
| name = {{subst:PAGENAME}}
| above = Text in uppermost cell of infobox
| subheader = Subheader of the infobox
| subheader2 = Second subheader of the infobox
| header = (the rest of the infobox goes here)
}}
</syntaxhighlight>{{clear}}
=== Illustration images ===
; image(n) : images to display at the top of the template. Use full image syntax, for example <nowiki>[[File:example.png|200px|alt=Example alt text]]</nowiki>. Image is centered by default. See [[WP:ALT]] for more on alt text.
; caption(n) : Text to put underneath the images.
=== Main data ===
; header(n) : Text to use as a header in row n.
; label(n) : Text to use as a label in row n.
; data(n) : Text to display as data in row n.
Note: for any given value for (n), not all combinations of parameters are permitted. The presence of a {{para|header''(n)''}} will cause the corresponding {{para|data''(n)''}} (and {{para|rowclass''(n)''}} {{para|label''(n)''}}, see below) to be ignored; the absence of a {{para|data''(n)''}} will cause the corresponding {{para|label''(n)''}} to be ignored. Valid combinations for any single row are:
* {{para|class''(n)''}} {{para|header''(n)''}}
* {{para|rowclass''(n)''}} {{para|class''(n)''}} {{para|data''(n)''}}
* {{para|rowclass''(n)''}} {{para|label''(n)''}} {{para|class''(n)''}} {{para|data''(n)''}}
See the rendering of header4, label4, and data4 in the [[#Examples|Examples]] section below.
==== Number ranges ====
To allow flexibility when the layout of an infobox is changed, it may be helpful when developing an infobox to use non-contiguous numbers for header and label/data rows. Parameters for new rows can then be inserted in future without having to renumber existing parameters. For example:
<syntaxhighlight lang="wikitext" style="overflow:auto">
| header3 = Section 1
| label5 = Label A
| data5 = Data A
| label7 = Label C
| data7 = Data C
| header10 = Section 2
| label12 = Label D
| data12 = Data D
</syntaxhighlight>{{clear}}
It is also possible to automatically renumber parameter names by using [[User:Frietjes/infoboxgap.js]] or [[Module:IncrementParams]].
There is no upper limit on numbers but there must be at most 50 between each used number.
==== Making data fields optional ====
A row with a label but no data is not displayed. This allows for the easy creation of optional infobox content rows. To make a row optional use a parameter that defaults to an empty string, like so:
<syntaxhighlight lang="wikitext" style="overflow:auto">
| label5 = Population
| data5 = {{{population|}}}
</syntaxhighlight>{{clear}}
This way if an article doesn't define the population parameter in its infobox the row won't be displayed.
For more complex fields with pre-formatted contents that would still be present even if the parameter wasn't set, you can wrap it all in an "#if" statement to make the whole thing vanish when the parameter is not used. For instance, the "#if" statement in the following example reads "#if:the parameter ''mass'' has been supplied |then display it, followed by 'kg'":
<syntaxhighlight lang="wikitext" style="overflow:auto">
| label6 = Mass
| data6 = {{ #if: {{{mass|}}} | {{{mass}}} kg }}
</syntaxhighlight>{{clear}}
For more on #if, see [[meta:ParserFunctions##if:|here]].
==== Hiding headers when all its data fields are empty ====
You can also make headers automatically hide when their section is empty (has no data-row showing).
Consider this situation:
{{Infobox
| title = Example: header with & without data
| headerstyle = background:lightgrey
| header1 = Header1 with empty section
| label2 = label2 text | data2 =
| label3 = label3 text | data3 =
| label4 = label4 text | data4 =
| header5 = Header5 with data below
| label6 = label6 text | data6 = Some value
}}
<syntaxhighlight lang="wikitext" style="overflow:auto">
{{Infobox
| title = Example: header with & without data
| headerstyle = background:lightgrey
| header1 = Header1 with empty section
| label2 = label2 text | data2 =
| label3 = label3 text | data3 =
| label4 = label4 text | data4 =
| header5 = Header5 with data below
| label6 = label6 text | data6 = Some value
}}
</syntaxhighlight>{{clear}}
If you want hide the header when no {{para|data''N''}} values are present, use '''{{para|autoheaders|y}}''':
{{Infobox
| title = Example: header with & without data
| autoheaders = y
| headerstyle = background:lightgrey
| header1 = Header1 with empty section
| label2 = label2 text | data2 =
| label3 = label3 text | data3 =
| label4 = label4 text | data4 =
| header5 = Header5 with data below
| label6 = label6 text | data6 = Some value
}}
<syntaxhighlight lang="wikitext" style="overflow:auto">
{{Infobox
| title = Example: header with & without data
| autoheaders = y
| headerstyle = background:lightgrey
| header1 = Header1 with empty section
| label2 = label2 text | data2 =
| label3 = label3 text | data3 =
| label4 = label4 text | data4 =
| header5 = Header5 with data below
| label6 = label6 text | data6 = Some value
}}
</syntaxhighlight>{{clear}}
So, header1 will be shown if any of item1, item2, or item3 is defined. If none of the three parameters are defined the header won't be shown and no empty row appears before the next visible content.
Note: if the data has empty css elements, like {{para|data|2=<span style="background:yellow;"></span>}}, this will be treated as non-empty (having data).
If {{para|autoheaders|y}} but there are items that you ''do not'' want to trigger a header, place {{para|headerX|_BLANK_}}. This will serve as an empty header and separate it from the subsequent items.
{{Infobox
| title = Example: blank header with & without data
| autoheaders = y
| headerstyle = background:lightgrey
| header1 = Header1 with empty section
| label2 = label2 text | data2 =
| label3 = label3 text | data3 =
| label4 = label4 text | data4 =
| header5 = _BLANK_
| label6 = label6 text | data6 = Some value, but does not trigger header1 or show header5
}}
<syntaxhighlight lang="wikitext" style="overflow:auto">
{{Infobox
| title = Example: header with & without data
| autoheaders = y
| headerstyle = background:lightgrey
| header1 = Header1 with empty section
| label2 = label2 text | data2 =
| label3 = label3 text | data3 =
| label4 = label4 text | data4 =
| header5 = _BLANK_
| label6 = label6 text | data6 = Some value, but does not trigger header1 or show header5
}}
</syntaxhighlight>{{clear}}
=== Footer ===
; below : Text to put in the bottom cell. The bottom cell is intended for footnotes, see-also, and other such information.
== Presentation parameters ==
=== Italic titles ===
Titles of articles with infoboxes may be made italic, in line with [[WP:ITALICTITLE]], by passing the <code>italic title</code> parameter.
* Turn on italic titles by passing {{para|italic title|<nowiki>{{{italic title|}}}</nowiki>}} from the infobox.
* Turn off by default (notably because only Latin script may be safely rendered in this style and italic may be needed to distinguish foreign language from local English language only in that script, but would be difficult to read for other scripts) but allow some instances to be made italic by passing {{para|italic title|<nowiki>{{{italic title|no}}}</nowiki>}}
* Do not make any titles italic by not passing the parameter at all.
=== CSS styling ===
{{div col}}
; bodystyle : Applies to the infobox table as a whole
; titlestyle : Applies only to the title caption. Adding a background color is usually inadvisable since the text is rendered "outside" the infobox.
; abovestyle : Applies only to the "above" cell at the top. The default style has font-size:125%; since this cell is usually used for a title, if you want to use the above cell for regular-sized text include "font-size:100%;" in the abovestyle.
; imagestyle : Applies to the cell the image is in. This includes the text of the image caption, but you should set text properties with captionstyle instead of imagestyle in case the caption is moved out of this cell in the future.
; captionstyle : Applies to the text of the image caption.
; rowstyle(n) : This parameter is inserted into the <code>style</code> attribute for the specified row.
; headerstyle : Applies to all header cells
; subheaderstyle : Applies to all subheader cells
; labelstyle : Applies to all label cells
; datastyle : Applies to all data cells
; belowstyle : Applies only to the below cell
{{div col end}}
=== HTML classes and microformats ===
{{div col}}
; bodyclass : This parameter is inserted into the <code>class</code> attribute for the infobox as a whole.
; titleclass : This parameter is inserted into the <code>class</code> attribute for the infobox's '''title''' caption.
<!-- currently not implemented in Lua module
; aboverowclass : This parameter is inserted into the <code>class</code> attribute for the complete table row the '''above''' cell is on.
-->
; aboveclass : This parameter is inserted into the <code>class</code> attribute for the infobox's '''above''' cell.
; subheaderrowclass(n) : This parameter is inserted into the <code>class</code> attribute for the complete table row the '''subheader''' is on.
; subheaderclass(n) : This parameter is inserted into the <code>class</code> attribute for the infobox's '''subheader'''.
; imagerowclass(n) : These parameters are inserted into the <code>class</code> attribute for the complete table row their respective '''image''' is on.
; imageclass : This parameter is inserted into the <code>class</code> attribute for the '''image'''.
; rowclass(n) : This parameter is inserted into the <code>class</code> attribute for the specified row including the '''label''' and '''data''' cells.
; class(n) : This parameter is inserted into the <code>class</code> attribute for the '''data''' cell of the specified row. If there's no '''data''' cell it has no effect.
<!-- currently not implemented in Lua module
; belowrowclass : This parameter is inserted into the <code>class</code> attribute for the complete table row the '''below''' cell is on.
-->
; belowclass : This parameter is inserted into the <code>class</code> attribute for the infobox's '''below''' cell.
{{div col end}}
This template supports the addition of microformat information. This is done by adding "class" attributes to various data cells, indicating what kind of information is contained within. Multiple class names may be specified, separated by spaces, some of them being used as selectors for custom styling according to a project policy or to the skin selected in user preferences, others being used for microformats.
To flag an infobox as containing [[hCard]] information, for example, add the following parameter:
<syntaxhighlight lang="wikitext" style="overflow:auto">
| bodyclass = vcard
</syntaxhighlight>{{clear}}
And for each row containing a data cell that's part of the vcard, add a corresponding class parameter:
<syntaxhighlight lang="wikitext" style="overflow:auto">
| class1 = fn
| class2 = org
| class3 = tel
</syntaxhighlight>{{clear}}
...and so forth. "above" and "title" can also be given classes, since these are usually used to display the name of the subject of the infobox.
See [[Wikipedia:WikiProject Microformats]] for more information on adding microformat information to Wikipedia, and [[microformat]] for more information on microformats in general.
== Examples ==
Notice how the row doesn't appear in the displayed infobox when a '''label''' is defined without an accompanying '''data''' cell, and how all of them are displayed when a '''header''' is defined on the same row as a '''data''' cell. Also notice that '''subheaders''' are not bold by default like the '''headers''' used to split the main data section, because this role is meant to be for the '''above''' cell :
{{Suppress categories|
{{Infobox
|name = Infobox/doc
|bodystyle =
|titlestyle =
|abovestyle = background:#cfc;
|subheaderstyle =
|title = Test Infobox
|above = Above text
|subheader = Subheader above image
|subheader2 = Second subheader
|imagestyle =
|captionstyle =
|image = [[File:Example-serious.jpg|200px|alt=Example alt text]]
|caption = Caption displayed below File:Example-serious.jpg
|headerstyle = background:#ccf;
|labelstyle = background:#ddf;
|datastyle =
|header1 = Header defined alone
| label1 =
| data1 =
|header2 =
| label2 = Label defined alone does not display (needs data, or is suppressed)
| data2 =
|header3 =
| label3 =
| data3 = Data defined alone
|header4 = All three defined (header, label, data, all with same number)
| label4 = does not display (same number as a header)
| data4 = does not display (same number as a header)
|header5 =
| label5 = Label and data defined (label)
| data5 = Label and data defined (data)
|belowstyle = background:#ddf;
|below = Below text
}}
}}
<syntaxhighlight lang="wikitext">
{{Infobox
|name = Infobox/doc
|bodystyle =
|titlestyle =
|abovestyle = background:#cfc;
|subheaderstyle =
|title = Test Infobox
|above = Above text
|subheader = Subheader above image
|subheader2 = Second subheader
|imagestyle =
|captionstyle =
|image = [[File:Example-serious.jpg|200px|alt=Example alt text]]
|caption = Caption displayed below File:Example-serious.jpg
|headerstyle = background:#ccf;
|labelstyle = background:#ddf;
|datastyle =
|header1 = Header defined alone
| label1 =
| data1 =
|header2 =
| label2 = Label defined alone does not display (needs data, or is suppressed)
| data2 =
|header3 =
| label3 =
| data3 = Data defined alone
|header4 = All three defined (header, label, data, all with same number)
| label4 = does not display (same number as a header)
| data4 = does not display (same number as a header)
|header5 =
| label5 = Label and data defined (label)
| data5 = Label and data defined (data)
|belowstyle = background:#ddf;
|below = Below text
}}
</syntaxhighlight>
For this example, the {{para|bodystyle}} and {{para|labelstyle}} parameters are used to adjust the infobox width and define a default width for the column of labels:
{{Infobox
|name = Infobox/doc
|bodystyle = width:20em
|titlestyle =
|title = Test Infobox
|headerstyle =
|labelstyle = width:33%
|datastyle =
|header1 =
| label1 = Label 1
| data1 = Data 1
|header2 =
| label2 = Label 2
| data2 = Data 2
|header3 =
| label3 = Label 3
| data3 = Data 3
|header4 = Header 4
| label4 =
| data4 =
|header5 =
| label5 = Label 5
| data5 = Data 5: Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
|belowstyle =
|below = Below text
}}
<syntaxhighlight lang="wikitext">
{{Infobox
|name = Infobox/doc
|bodystyle = width:20em
|titlestyle =
|title = Test Infobox
|headerstyle =
|labelstyle = width:33%
|datastyle =
|header1 =
| label1 = Label 1
| data1 = Data 1
|header2 =
| label2 = Label 2
| data2 = Data 2
|header3 =
| label3 = Label 3
| data3 = Data 3
|header4 = Header 4
| label4 =
| data4 =
|header5 =
| label5 = Label 5
| data5 = Data 5: Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
|belowstyle =
|below = Below text
}}
</syntaxhighlight>
== Embedding ==
<!--Linked from [[Template:Subinfobox bodystyle/doc]]-->
One infobox template can be embedded into another using the {{para|child}} parameter. This feature can be used to create a modular infobox, or to create better-defined logical sections. Long ago, it was necessary to use embedding in order to create infoboxes with more than 99 rows; but nowadays there's no limit to the number of rows that can be defined in a single instance of <code><nowiki>{{infobox}}</nowiki></code>.
{{Infobox
| title = Top level title
| data1 = {{Infobox | decat = yes | child = yes
| title = First subsection
| label1= Label 1.1
| data1 = Data 1.1
}}
| data2 = {{Infobox | decat = yes | child = yes
|title = Second subsection
| label1= Label 2.1
| data1 = Data 2.1
}}
| belowstyle =
| below = Below text
}}
<syntaxhighlight lang="wikitext" style="overflow:auto">
{{Infobox
| title = Top level title
| data1 = {{Infobox | decat = yes | child = yes
| title = First subsection
| label1= Label 1.1
| data1 = Data 1.1
}}
| data2 = {{Infobox | decat = yes | child = yes
|title = Second subsection
| label1= Label 2.1
| data1 = Data 2.1
}}
| belowstyle =
| below = Below text
}}
</syntaxhighlight>{{clear}}
Note, in the examples above, the child infobox is placed in a <code>data</code> field, not a <code>header</code> field. Notice that the section subheadings are not in bold font if bolding is not explicitly specified. To obtain bold section headings, place the child infobox in a '''header''' field (but not in a '''label''' field because it would not be displayed!), either using
{{Infobox
| title = Top level title
| header1 = {{Infobox | decat = yes | child = yes
| title = First subsection
| label1= Label 1.1
| data1 = Data 1.1
}}
| header2 = {{Infobox | decat = yes | child = yes
| title = Second subsection
| label1= Label 2.1
| data1 = Data 2.1
}}
| belowstyle =
| below = Below text
}}
<syntaxhighlight lang="wikitext" style="overflow:auto">
{{Infobox
| title = Top level title
| header1 = {{Infobox | decat = yes | child = yes
| title = First subsection
| label1= Label 1.1
| data1 = Data 1.1
}}
| header2 = {{Infobox | decat = yes | child = yes
| title = Second subsection
| label1= Label 2.1
| data1 = Data 2.1
}}
| belowstyle =
| below = Below text
}}
</syntaxhighlight>{{clear}}
or,
{{Infobox
| title = Top level title
| header1 = First subsection
{{Infobox | decat = yes | child = yes
| label1 = Label 1.1
| data1 = Data 1.1
}}
| header2 = Second subsection
{{Infobox | decat = yes | child = yes
| label1 = Label 2.1
| data1 = Data 2.1
}}
| belowstyle =
| below = Below text
}}
<syntaxhighlight lang="wikitext" style="overflow:auto">
{{Infobox
| title = Top level title
| header1 = First subsection
{{Infobox | decat = yes | child = yes
| label1 = Label 1.1
| data1 = Data 1.1
}}
| header2 = Second subsection
{{Infobox | decat = yes | child = yes
| label1 = Label 2.1
| data1 = Data 2.1
}}
| belowstyle =
| below = Below text
}}
</syntaxhighlight>{{clear}}
Note that omitting the {{para|title}} parameter, and not including any text preceding the embedded infobox, may result in spurious blank table rows, creating gaps in the visual presentation. The garbage output can be suppressed using {{para|rowstyleN|display: none}}, replacing N with the data/header number.
[[Wikipedia:WikiProject Infoboxes/embed]] includes some links to Wikipedia articles which include infoboxes embedded within other infoboxes.
== Subboxes ==
An alternative method for embedding is to use {{para|subbox|yes}}, which removes the outer border from the infobox, but preserves the interior structure. One feature of this approach is that the parent and child boxes need not have the same structure, and the label and data fields are not aligned between the parent and child boxes because they are not in the same parent table.
{{Infobox
| headerstyle = background-color:#eee;
| labelstyle = background-color:#eee;
| header1 = Main 1
| header2 = Main 2
| data3 = {{Infobox | subbox = yes
| headerstyle = background-color:#ccc;
| labelstyle = background-color:#ddd;
| header1 = Sub 3-1
| header2 = Sub 3-2
| label3 = Label 3-3 | data3 = Data 3-3
}}
| data4 = {{Infobox | subbox = yes
| labelstyle = background-color:#ccc;
| label1 = Label 4-1 | data1 = Data 4-1
}}
| label5 = Label 5 | data5 = Data 5
| header6 = Main 6
}}
<syntaxhighlight lang="wikitext" style="overflow:auto">
{{Infobox
| headerstyle = background-color:#eee;
| labelstyle = background-color:#eee;
| header1 = Main 1
| header2 = Main 2
| data3 = {{Infobox | subbox = yes
| headerstyle = background-color:#ccc;
| labelstyle = background-color:#ddd;
| header1 = Sub 3-1
| header2 = Sub 3-2
| label3 = Label 3-3 | data3 = Data 3-3
}}
| data4 = {{Infobox | subbox = yes
| labelstyle = background-color:#ccc;
| label1 = Label 4-1 | data1 = Data 4-1
}}
| label5 = Label 5 | data5 = Data 5
| header6 = Main 6
}}
</syntaxhighlight>{{clear}}
Similar embedding techniques may be used within content parameters of some other templates generating tables (such as [[:Template:Sidebar|Sidebar]]) :
{{Sidebar
| navbar = off
| headingstyle = background-color:#eee;
| heading1 = Heading 1
| heading2 = Heading 2
| content3 = {{Infobox | subbox = yes
| headerstyle = background-color:#ccc;
| labelstyle = background-color:#ddd;
| header1 = Sub 3-1
| header2 = Sub 3-2
| label3 = Label 3-3 | data3 = Data 3-3
}}
| content4 = {{Infobox | subbox = yes
| labelstyle = background-color:#ccc;
| label1 = Label 4-1 | data1 = Data 4-1
}}
| heading5 = Heading 5
}}
<syntaxhighlight lang="wikitext" style="overflow:auto">
{{Sidebar
| navbar = off
| headingstyle = background-color:#eee;
| heading1 = Heading 1
| heading2 = Heading 2
| content3 = {{Infobox | subbox = yes
| headerstyle = background-color:#ccc;
| labelstyle = background-color:#ddd;
| header1 = Sub 3-1
| header2 = Sub 3-2
| label3 = Label 3-3 | data3 = Data 3-3
}}
| content4 = {{Infobox | subbox = yes
| labelstyle = background-color:#ccc;
| label1 = Label 4-1 | data1 = Data 4-1
}}
| heading5 = Heading 5
}}
</syntaxhighlight>{{clear}}
Note that the default padding of the parent data cell containing each subbox is still visible, so the subboxes are slightly narrower than the parent box and there's a higher vertical spacing between standard cells of the parent box than between cells of distinct subboxes.
== Controlling line-breaking in embedded bulletless lists ==
Template {{tlx|nbsp}} may be used with {{tlx|wbr}} and {{tlx|nowrap}} to control line-breaking in bulletless lists embedded in infoboxes (e.g. cast list in {{tlx|Infobox film}}), to prevent wrapped long entries from being confused with multiple entries. See [[Template:Wbr/doc#Controlling line-breaking in infoboxes]] for details.
== Full blank syntax ==
(Note: there is no limit to the number of possible rows; only 20 are given below since infoboxes larger than that will be relatively rare. Just extend the numbering as needed. The microformat "class" parameters are also omitted as they are not commonly used.)
<syntaxhighlight lang="wikitext" style="overflow:auto">
{{Infobox
| name = {{subst:PAGENAME}}
| child = {{{child|}}}
| subbox = {{{subbox|}}}
| italic title = {{{italic title|no}}}
| templatestyles =
| child templatestyles =
| grandchild templatestyles =
| bodystyle =
| titlestyle =
| abovestyle =
| subheaderstyle =
| title =
| above =
| subheader =
| imagestyle =
| captionstyle =
| image =
| caption =
| image2 =
| caption2 =
| headerstyle =
| labelstyle =
| datastyle =
| header1 =
| label1 =
| data1 =
| header2 =
| label2 =
| data2 =
| header3 =
| label3 =
| data3 =
| header4 =
| label4 =
| data4 =
| header5 =
| label5 =
| data5 =
| header6 =
| label6 =
| data6 =
| header7 =
| label7 =
| data7 =
| header8 =
| label8 =
| data8 =
| header9 =
| label9 =
| data9 =
| header10 =
| label10 =
| data10 =
| header11 =
| label11 =
| data11 =
| header12 =
| label12 =
| data12 =
| header13 =
| label13 =
| data13 =
| header14 =
| label14 =
| data14 =
| header15 =
| label15 =
| data15 =
| header16 =
| label16 =
| data16 =
| header17 =
| label17 =
| data17 =
| header18 =
| label18 =
| data18 =
| header19 =
| label19 =
| data19 =
| header20 =
| label20 =
| data20 =
| belowstyle =
| below =
}}
</syntaxhighlight>{{clear}}
{{Help:Infobox/user style}}
== Porting to other MediaWikis ==
The infobox template requires the [[:mw:Extension:Scribunto|Scribunto]] and [[:mw:Extension:TemplateStyles|TemplateStyles]] extensions. [[Wikipedia:WikiProject Transwiki|WikiProject Transwiki]] has a version of this template that has been modified to work on other MediaWikis.
== TemplateData ==
{{TemplateData header}}
<templatedata>
{
"description": "This template is intended as a meta template, a template used for constructing other templates. In general, it is not meant for use directly in an article but can be used on a one-off basis if required.",
"format": "{{_\n| ________________ = _\n}}\n",
"params": {
"title": {
"label": "Title",
"description": "Title displayed above the infobox",
"type": "string",
"suggested": true
},
"image": {
"label": "Image",
"description": "Image illustrating the topic. Use full image syntax.",
"type": "content",
"suggested": true,
"example": "[[File:example.png|200px|alt=Example alt text]]"
},
"caption": {
"label": "Caption",
"description": "caption for the image",
"type": "content",
"suggested": true
}
},
"paramOrder": [
"title",
"image",
"caption"
]
}
</templatedata>
==Tracking categories==
* {{Category link with count|Articles with missing Wikidata information}}
* {{Category link with count|Articles using infobox templates with no data rows}}
* {{Category link with count|Pages using embedded infobox templates with the title parameter}}
==See also==
* [[Module:Infobox]], the [[WP:LUA|Lua]] module on which this template is based
* [[Module:Check for unknown parameters]]
* {{tl|Infobox3cols}}
* {{tl|Navbox}} and {{tl|Sidebar}}
* [[Wikipedia:List of infoboxes|List of infoboxes]]
* [[:Module:InfoboxImage]]
<includeonly>{{Sandbox other||
<!-- Categories below this line, please; interwikis at Wikidata -->
[[Category:Infobox templates| ]]
[[Category:Wikipedia metatemplates|Infobox]]
[[Category:Templates generating microformats]]
[[Category:Templates that add a tracking category]]
[[Category:Templates based on the Infobox Lua module]]
}}</includeonly>
b7ba187ea76ee960bbe295ad01c44c646eaedadb
Module:Infobox/doc
828
92
661
187
2023-09-14T11:00:54Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{High-use|3308957|all-pages = yes}}
{{module rating|protected}}
{{Lua|Module:Navbar|Module:Italic title}}
{{Uses TemplateStyles|Module:Infobox/styles.css|Template:Hlist/styles.css|Template:Plainlist/styles.css}}
'''Module:Infobox''' is a [[WP:Module|module]] that implements the {{tl|Infobox}} template. Please see the template page for usage instructions.
== Tracking categories ==
* {{clc|Pages using infobox templates with ignored data cells}}
* {{clc|Articles using infobox templates with no data rows}}
* {{clc|Pages using embedded infobox templates with the title parameter}}
<includeonly>{{#ifeq:{{SUBPAGENAME}}|sandbox||
[[Category:Modules that add a tracking category]]
[[Category:Wikipedia infoboxes]]
[[Category:Infobox modules]]
[[Category:Modules that check for strip markers]]
}}</includeonly>
936ad219eb263a6f3293d62f667bd7b5db1059c1
Module:Hatnote/styles.css
828
317
662
2023-09-14T11:03:47Z
Ilovethehitgameomori
2
Created page with "/* {{pp|small=y}} */ .hatnote { font-style: italic; } /* Limit structure CSS to divs because of [[Module:Hatnote inline]] */ div.hatnote { /* @noflip */ padding-left: 1.6em; margin-bottom: 0.5em; } .hatnote i { font-style: normal; } /* The templatestyles element inserts a link element before hatnotes. * TODO: Remove link if/when WMF resolves T200206 */ .hatnote + link + .hatnote { margin-top: -0.5em; }"
sanitized-css
text/css
/* {{pp|small=y}} */
.hatnote {
font-style: italic;
}
/* Limit structure CSS to divs because of [[Module:Hatnote inline]] */
div.hatnote {
/* @noflip */
padding-left: 1.6em;
margin-bottom: 0.5em;
}
.hatnote i {
font-style: normal;
}
/* The templatestyles element inserts a link element before hatnotes.
* TODO: Remove link if/when WMF resolves T200206 */
.hatnote + link + .hatnote {
margin-top: -0.5em;
}
44680ffd6e888866df2cdfa0341af9c7b97da94c
678
662
2023-09-14T11:34:12Z
Ilovethehitgameomori
2
1 revision imported
sanitized-css
text/css
/* {{pp|small=y}} */
.hatnote {
font-style: italic;
}
/* Limit structure CSS to divs because of [[Module:Hatnote inline]] */
div.hatnote {
/* @noflip */
padding-left: 1.6em;
margin-bottom: 0.5em;
}
.hatnote i {
font-style: normal;
}
/* The templatestyles element inserts a link element before hatnotes.
* TODO: Remove link if/when WMF resolves T200206 */
.hatnote + link + .hatnote {
margin-top: -0.5em;
}
44680ffd6e888866df2cdfa0341af9c7b97da94c
Template:Hlist/styles.css
10
318
663
2023-09-14T11:09:50Z
Ilovethehitgameomori
2
Created page with "/* {{pp-protected|reason=match parent|small=yes}} */ /* * hlist styles are defined in core and Minerva and differ in Minerva. The * current definitions here (2023-01-01) are sufficient to override Minerva * without use of the hlist-separated class. The most problematic styles were * related to margin, padding, and the bullet. Check files listed at * [[MediaWiki talk:Common.css/to do#hlist-separated]] */ /* * TODO: When the majority of readership supports it (or s..."
sanitized-css
text/css
/* {{pp-protected|reason=match parent|small=yes}} */
/*
* hlist styles are defined in core and Minerva and differ in Minerva. The
* current definitions here (2023-01-01) are sufficient to override Minerva
* without use of the hlist-separated class. The most problematic styles were
* related to margin, padding, and the bullet. Check files listed at
* [[MediaWiki talk:Common.css/to do#hlist-separated]]
*/
/*
* TODO: When the majority of readership supports it (or some beautiful world
* in which grade C support is above the minimum threshold), use :is()
*/
.hlist dl,
.hlist ol,
.hlist ul {
margin: 0;
padding: 0;
}
/* Display list items inline */
.hlist dd,
.hlist dt,
.hlist li {
/*
* don't trust the note that says margin doesn't work with inline
* removing margin: 0 makes dds have margins again
* We also want to reset margin-right in Minerva
*/
margin: 0;
display: inline;
}
/* Display requested top-level lists inline */
.hlist.inline,
.hlist.inline dl,
.hlist.inline ol,
.hlist.inline ul,
/* Display nested lists inline */
.hlist dl dl,
.hlist dl ol,
.hlist dl ul,
.hlist ol dl,
.hlist ol ol,
.hlist ol ul,
.hlist ul dl,
.hlist ul ol,
.hlist ul ul {
display: inline;
}
/* Hide empty list items */
.hlist .mw-empty-li {
display: none;
}
/* TODO: :not() can maybe be used here to remove the later rule. naive test
* seems to work. more testing needed. like so:
*.hlist dt:not(:last-child)::after {
* content: ": ";
*}
*.hlist dd:not(:last-child)::after,
*.hlist li:not(:last-child)::after {
* content: " · ";
* font-weight: bold;
*}
*/
/* Generate interpuncts */
.hlist dt::after {
content: ": ";
}
.hlist dd::after,
.hlist li::after {
content: " · ";
font-weight: bold;
}
.hlist dd:last-child::after,
.hlist dt:last-child::after,
.hlist li:last-child::after {
content: none;
}
/* Add parentheses around nested lists */
.hlist dd dd:first-child::before,
.hlist dd dt:first-child::before,
.hlist dd li:first-child::before,
.hlist dt dd:first-child::before,
.hlist dt dt:first-child::before,
.hlist dt li:first-child::before,
.hlist li dd:first-child::before,
.hlist li dt:first-child::before,
.hlist li li:first-child::before {
content: " (";
font-weight: normal;
}
.hlist dd dd:last-child::after,
.hlist dd dt:last-child::after,
.hlist dd li:last-child::after,
.hlist dt dd:last-child::after,
.hlist dt dt:last-child::after,
.hlist dt li:last-child::after,
.hlist li dd:last-child::after,
.hlist li dt:last-child::after,
.hlist li li:last-child::after {
content: ")";
font-weight: normal;
}
/* Put ordinals in front of ordered list items */
.hlist ol {
counter-reset: listitem;
}
.hlist ol > li {
counter-increment: listitem;
}
.hlist ol > li::before {
content: " " counter(listitem) "\a0";
}
.hlist dd ol > li:first-child::before,
.hlist dt ol > li:first-child::before,
.hlist li ol > li:first-child::before {
content: " (" counter(listitem) "\a0";
}
8c9dd9c9c00f30eead17fe10f51d183333e81f33
Module:Documentation/styles.css
828
319
664
2023-09-14T11:12:58Z
Ilovethehitgameomori
2
Created page with "/* {{pp|small=yes}} */ .documentation, .documentation-metadata { border: 1px solid #a2a9b1; background-color: #ecfcf4; clear: both; } .documentation { margin: 1em 0 0 0; padding: 1em; } .documentation-metadata { margin: 0.2em 0; /* same margin left-right as .documentation */ font-style: italic; padding: 0.4em 1em; /* same padding left-right as .documentation */ } .documentation-startbox { padding-bottom: 3px; border-bottom: 1px solid #aaa; margin-bott..."
sanitized-css
text/css
/* {{pp|small=yes}} */
.documentation,
.documentation-metadata {
border: 1px solid #a2a9b1;
background-color: #ecfcf4;
clear: both;
}
.documentation {
margin: 1em 0 0 0;
padding: 1em;
}
.documentation-metadata {
margin: 0.2em 0; /* same margin left-right as .documentation */
font-style: italic;
padding: 0.4em 1em; /* same padding left-right as .documentation */
}
.documentation-startbox {
padding-bottom: 3px;
border-bottom: 1px solid #aaa;
margin-bottom: 1ex;
}
.documentation-heading {
font-weight: bold;
font-size: 125%;
}
.documentation-clear { /* Don't want things to stick out where they shouldn't. */
clear: both;
}
.documentation-toolbar {
font-style: normal;
font-size: 85%;
}
ce0e629c92e3d825ab9fd927fe6cc37d9117b6cb
Module:Navbar/styles.css
828
320
665
2023-09-14T11:14:38Z
Ilovethehitgameomori
2
Created page with "/* {{pp|small=yes}} */ .navbar { display: inline; font-size: 88%; font-weight: normal; } .navbar-collapse { float: left; text-align: left; } .navbar-boxtext { word-spacing: 0; } .navbar ul { display: inline-block; white-space: nowrap; line-height: inherit; } .navbar-brackets::before { margin-right: -0.125em; content: '[ '; } .navbar-brackets::after { margin-left: -0.125em; content: ' ]'; } .navbar li { word-spacing: -0.125em; } .navbar a > span, .nav..."
sanitized-css
text/css
/* {{pp|small=yes}} */
.navbar {
display: inline;
font-size: 88%;
font-weight: normal;
}
.navbar-collapse {
float: left;
text-align: left;
}
.navbar-boxtext {
word-spacing: 0;
}
.navbar ul {
display: inline-block;
white-space: nowrap;
line-height: inherit;
}
.navbar-brackets::before {
margin-right: -0.125em;
content: '[ ';
}
.navbar-brackets::after {
margin-left: -0.125em;
content: ' ]';
}
.navbar li {
word-spacing: -0.125em;
}
.navbar a > span,
.navbar a > abbr {
text-decoration: inherit;
}
.navbar-mini abbr {
font-variant: small-caps;
border-bottom: none;
text-decoration: none;
cursor: inherit;
}
.navbar-ct-full {
font-size: 114%;
margin: 0 7em;
}
.navbar-ct-mini {
font-size: 114%;
margin: 0 4em;
}
9d4056f949b4f0b159e3d40dfb1a5f01e72f9571
Template:Div col/styles.css
10
321
666
2023-09-14T11:17:05Z
Ilovethehitgameomori
2
Created page with "/* {{pp|small=yes}} */ .div-col { margin-top: 0.3em; column-width: 30em; } .div-col-small { font-size: 90%; } .div-col-rules { column-rule: 1px solid #aaa; } /* Reset top margin for lists in div col */ .div-col dl, .div-col ol, .div-col ul { margin-top: 0; } /* Avoid elements breaking between columns See also Template:No col break */ .div-col li, .div-col dd { page-break-inside: avoid; /* Removed from CSS in favor of break-inside c. 2020 */ break-inside: av..."
sanitized-css
text/css
/* {{pp|small=yes}} */
.div-col {
margin-top: 0.3em;
column-width: 30em;
}
.div-col-small {
font-size: 90%;
}
.div-col-rules {
column-rule: 1px solid #aaa;
}
/* Reset top margin for lists in div col */
.div-col dl,
.div-col ol,
.div-col ul {
margin-top: 0;
}
/* Avoid elements breaking between columns
See also Template:No col break */
.div-col li,
.div-col dd {
page-break-inside: avoid; /* Removed from CSS in favor of break-inside c. 2020 */
break-inside: avoid-column;
}
/* Unbulleted lists */
.plainlist ol,
.plainlist ul {
line-height: inherit;
list-style: none;
margin: 0;
}
.plainlist ol li,
.plainlist ul li {
margin-bottom: 0;
}
76c2c0a042b9164cff638cd44af5ab129702c141
Module:Sidebar/styles.css
828
322
667
2023-09-14T11:21:14Z
Ilovethehitgameomori
2
Created page with "/* {{pp-template}} */ /* TODO: Invert width design to be "mobile first" */ .sidebar { /* TODO: Ask if we should have max-width 22em instead */ width: 22em; /* @noflip */ float: right; /* @noflip */ clear: right; /* @noflip */ margin: 0.5em 0 1em 1em; background: #f8f9fa; border: 1px solid #aaa; padding: 0.2em; text-align: center; line-height: 1.4em; font-size: 88%; border-collapse: collapse; /* Timeless has display: none on .nomobile at mobile resolutions..."
sanitized-css
text/css
/* {{pp-template}} */
/* TODO: Invert width design to be "mobile first" */
.sidebar {
/* TODO: Ask if we should have max-width 22em instead */
width: 22em;
/* @noflip */
float: right;
/* @noflip */
clear: right;
/* @noflip */
margin: 0.5em 0 1em 1em;
background: #f8f9fa;
border: 1px solid #aaa;
padding: 0.2em;
text-align: center;
line-height: 1.4em;
font-size: 88%;
border-collapse: collapse;
/* Timeless has display: none on .nomobile at mobile resolutions, so we
* unhide it with display: table and let precedence and proximity win.
*/
display: table;
}
/* Unfortunately, so does Minerva desktop, except Minerva drops an
* !important on the declaration. So we have to be mean for Minerva users.
* Mobile removes the element entirely with `wgMFRemovableClasses` in
* https://github.com/wikimedia/operations-mediawiki-config/blob/master/
wmf-config/InitialiseSettings.php#L16992
* which is why displaying it categorically with display: table works.
* We don't really want to expose the generic user in the wild on mobile to have
* to deal with sidebars. (Maybe the ones with collapsible lists, so that
* might be an improvement. That is blocked on [[:phab:T111565]].)
*/
body.skin-minerva .sidebar {
display: table !important;
/* also, minerva is way too aggressive about other stylings on tables.
* TODO remove when this template gets moved to a div. plans on talk page.
* We always float right on Minerva because that's a lot of extra CSS
* otherwise. */
float: right !important;
margin: 0.5em 0 1em 1em !important;
}
.sidebar-subgroup {
width: 100%;
margin: 0;
border-spacing: 0;
}
.sidebar-left {
/* @noflip */
float: left;
/* @noflip */
clear: left;
/* @noflip */
margin: 0.5em 1em 1em 0;
}
.sidebar-none {
float: none;
clear: both;
/* @noflip */
margin: 0.5em 1em 1em 0;
}
.sidebar-outer-title {
padding: 0 0.4em 0.2em;
font-size: 125%;
line-height: 1.2em;
font-weight: bold;
}
.sidebar-top-image {
padding: 0.4em;
}
.sidebar-top-caption,
.sidebar-pretitle-with-top-image,
.sidebar-caption {
padding: 0.2em 0.4em 0;
line-height: 1.2em;
}
.sidebar-pretitle {
padding: 0.4em 0.4em 0;
line-height: 1.2em;
}
.sidebar-title,
.sidebar-title-with-pretitle {
padding: 0.2em 0.8em;
font-size: 145%;
line-height: 1.2em;
}
.sidebar-title-with-pretitle {
padding: 0.1em 0.4em;
}
.sidebar-image {
padding: 0.2em 0.4em 0.4em;
}
.sidebar-heading {
padding: 0.1em 0.4em;
}
.sidebar-content {
padding: 0 0.5em 0.4em;
}
.sidebar-content-with-subgroup {
padding: 0.1em 0.4em 0.2em;
}
.sidebar-above,
.sidebar-below {
padding: 0.3em 0.8em;
font-weight: bold;
}
.sidebar-collapse .sidebar-above,
.sidebar-collapse .sidebar-below {
border-top: 1px solid #aaa;
border-bottom: 1px solid #aaa;
}
.sidebar-navbar {
text-align: right;
font-size: 115%;
padding: 0 0.4em 0.4em;
}
.sidebar-list-title {
padding: 0 0.4em;
text-align: left;
font-weight: bold;
line-height: 1.6em;
font-size: 105%;
}
/* centered text with mw-collapsible headers is finicky */
.sidebar-list-title-c {
padding: 0 0.4em;
text-align: center;
margin: 0 3.3em;
}
@media (max-width: 720px) {
/* users have wide latitude to set arbitrary width and margin :(
"Super-specific" selector to prevent overriding this appearance by
lower level sidebars too */
body.mediawiki .sidebar {
width: 100% !important;
clear: both;
float: none !important; /* Remove when we div based; Minerva is dumb */
margin-left: 0 !important;
margin-right: 0 !important;
}
/* TODO: We might consider making all links wrap at small resolutions and then
* only introduce nowrap at higher resolutions. Do when we invert the media
* query.
*/
}
7d621b35a37807a103b59075851fe36201204ceb
Template:Nobold/styles.css
10
323
668
2023-09-14T11:22:12Z
Ilovethehitgameomori
2
Created page with "/* {{pp-template}} */ /* Styling for Template:Nobold */ .nobold { font-weight: normal; }"
sanitized-css
text/css
/* {{pp-template}} */
/* Styling for Template:Nobold */
.nobold {
font-weight: normal;
}
83e5f0adacf8c7984251f1fd9d11ed82ebaadf03
672
668
2023-09-14T11:34:03Z
Ilovethehitgameomori
2
1 revision imported
sanitized-css
text/css
/* {{pp-template}} */
/* Styling for Template:Nobold */
.nobold {
font-weight: normal;
}
83e5f0adacf8c7984251f1fd9d11ed82ebaadf03
Template:Infobox country
10
324
670
669
2023-09-14T11:33:55Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{infobox
|templatestyles = Template:Infobox country/styles.css
| bodyclass = ib-country vcard
| aboveclass = adr
| above =
{{#if:{{{conventional_long_name|}}}{{{native_name|}}}{{{name|}}}
| {{#if:{{{conventional_long_name|}}}
|<div class="fn org country-name">{{{conventional_long_name|}}}</div>
}}{{#if:{{{native_name|}}}{{{name|}}}
|<div class="ib-country-names"><!--
-->{{br separated entries
|{{{native_name|}}}
|{{#if:{{{name|}}}
|<div class="ib-country-name-style fn org country-name">{{{name|}}}</div>
}}}}</div>
}}<!--
-->{{#ifeq:{{{micronation|}}}|yes
|<span class="fn org">[[Micronation]]</span>
}}
}}
| subheader = {{#if:{{{life_span|}}} | {{{life_span}}} | {{#if:{{{year_start|}}}|{{{year_start}}}{{#if:{{{year_end|}}}|–{{{year_end}}} }} }} }}
| image1 = {{#if:{{{image_coat|}}}{{{image_symbol|}}}{{{image_flag|}}}{{{image_flag2|}}}
|{{infobox country/imagetable
|image1a = {{#invoke:InfoboxImage|InfoboxImage|suppressplaceholder={{main other||no}}|image={{{image_flag|}}}|sizedefault=125px|size={{{flag_width|{{{flag_size|}}}}}}|maxsize=250|border={{yesno |{{{flag_border|}}}|yes=yes|blank=yes}}|alt={{{alt_flag|{{{flag_alt|}}}}}}|title=Flag of {{{common_name|{{{name|{{{linking_name|{{PAGENAME}}}}}}}}}}}}}
|image1b = {{#invoke:InfoboxImage|InfoboxImage|suppressplaceholder={{main other||no}}|image={{{image_flag2|}}}|sizedefault=125px|size={{{flag_width|}}}|maxsize=250|border={{yesno |{{{flag2_border|}}}|yes=yes|blank=yes}}|alt={{{alt_flag2|{{{flag_alt2|}}}}}}}}
|caption1= {{#ifexist:{{if empty |{{{flag_type_article|}}} |{{{flag|}}} | {{if empty |{{{flag_type|}}} |Flag}} of {{if empty |{{{linking_name|}}} |{{{common_name|}}} |{{{name|}}} |{{PAGENAME}} }} }} |[[{{if empty |{{{flag_type_article|}}} |{{{flag|}}} |{{if empty |{{{flag_type|}}} |Flag}} of {{if empty |{{{linking_name|}}} |{{{common_name|}}} |{{{name|}}} |{{PAGENAME}} }} }}|{{if empty |{{{flag_caption|}}} |{{{flag_type|}}} |Flag}}]] |{{if empty |{{{flag_caption|}}} |{{{flag_type|}}} |Flag}} }}
|image2 = {{#invoke:InfoboxImage|InfoboxImage|suppressplaceholder={{main other||no}}|image={{if empty|{{{image_coat|}}}|{{{image_symbol|}}}}} |size={{{symbol_width|{{{coa_size|}}}}}}|sizedefault=85px|alt={{#if:{{{image_coat|}}}|{{{alt_coat|{{{coat_alt|}}}}}}|{{{alt_symbol|}}}}}|title={{{symbol_type|Coat of arms}}} of {{{common_name|{{{name|{{{linking_name|{{PAGENAME}}}}}}}}}}}}}
|caption2= {{#ifexist:{{if empty |{{{symbol_type_article|}}} |{{{symbol|}}} |{{if empty |{{{symbol_type|}}} |Coat of arms}} of {{if empty |{{{linking_name|}}} |{{{common_name|}}} |{{{name|}}} |{{PAGENAME}} }} }} |[[{{if empty |{{{symbol_type_article|}}} |{{{symbol|}}} |{{if empty |{{{symbol_type|}}} |Coat of arms}} of {{if empty |{{{linking_name|}}} |{{{common_name|}}} |{{{name|}}} |{{PAGENAME}} }} }} | {{if empty |{{{symbol_type|}}} |Coat of arms}}]] |{{if empty |{{{symbol_type|}}} |Coat of arms}} }}
}} }}
| data1 = {{#if:{{{national_motto|}}}{{{motto|}}}
|'''Motto: '''{{if empty|{{{motto|}}}|{{{national_motto|}}}}}<!--
-->{{#if:{{{englishmotto|}}}|<div>{{{englishmotto}}}</div> }}
}}
| class2 = anthem
| data2 = {{#if:{{{national_anthem|}}}{{{anthem|}}}
|'''Anthem:''' {{if empty|{{{national_anthem|}}}|{{{anthem|}}}}}
}}{{#if:{{{anthems|}}}
|'''Anthems:''' {{{anthems}}}
}}{{#if:{{{royal_anthem|}}}
|
<div class="ib-country-anthem">'''[[Royal anthem]]:''' {{{royal_anthem}}}</div>
}}{{#if:{{{flag_anthem|}}}
|
<div class="ib-country-anthem">'''[[Flag anthem]]:''' {{{flag_anthem}}}</div>
}}{{#if:{{{national_march|}}}
|
<div class="ib-country-anthem">'''National march:''' {{{national_march}}}</div>
}}{{#if:{{{territorial_anthem|}}}
|
<div class="ib-country-anthem">'''Territorial anthem:''' {{{territorial_anthem}}}</div>
}}{{#if:{{{regional_anthem|}}}
|
<div class="ib-country-anthem">'''Regional anthem:''' {{{regional_anthem}}}</div>
}}{{#if:{{{state_anthem|}}}
|
<div class="ib-country-anthem">'''State anthem:''' {{{state_anthem}}}</div>
}}{{#if:{{{march|}}}
|
<div class="ib-country-anthem">'''March:''' {{{march}}}</div>
}}
| data3 = {{#if:{{{other_symbol|}}}{{{text_symbol|}}}
|{{#if:{{{other_symbol_type|}}}{{{text_symbol_type|}}}
| '''{{if empty|{{{other_symbol_type|}}}|{{{text_symbol_type|}}}}}'''<br/>}}<!--
-->{{if empty|{{{other_symbol|}}}|{{{text_symbol|}}}}}
}}
| data4 = {{#if:{{{image_map|}}}
|{{#invoke:InfoboxImage|InfoboxImage|image={{{image_map|}}}|size={{{map_width|{{{image_map_size|}}}}}}|upright=1.15|alt={{{alt_map|{{{image_map_alt|}}}}}}|title={{{map_caption|{{{image_map_caption|Location of {{{common_name|{{{name|{{{linking_name|{{PAGENAME}} }}} }}} }}} }}} }}} }}<!--
-->{{#if:{{{map_caption|{{{image_map_caption|}}}}}}|<div class="ib-country-map-caption">{{{map_caption|{{{image_map_caption|}}}}}}</div>}} }}
| data5 = {{#if:{{{image_map2|}}}
|{{#invoke:InfoboxImage|InfoboxImage|image={{{image_map2|}}}|size={{{map2_width|{{{image_map2_size|}}}}}}|upright=1.15|alt={{{alt_map2|{{{image_map2_alt|}}}}}}|title={{{map_caption2|{{{image_map2_caption|Location of {{{common_name|{{{name|{{{linking_name|{{PAGENAME}} }}} }}} }}} }}} }}} }}<!--
-->{{#if:{{{map_caption2|{{{image_map2_caption|}}}}}}|<div class="ib-country-map-caption">{{{map_caption2|{{{image_map2_caption|}}}}}}</div>}} }}
| label6 = Status
| data6 = {{#if:{{{status|}}}|{{Infobox country/status text|status={{{status|}}}|status_text={{{status_text|}}}|empire={{{empire|}}}|year_end={{{year_end|}}}|year_exile_start={{{year_exile_start|}}}|year_exile_end={{{year_exile_end|}}} }} }}
| label7 = Location
| data7 = {{{loctext|}}}
| label8 = {{#if:{{{capital_type|}}} | {{{capital_type}}} | Capital }}{{#ifeq: {{#ifeq:{{{largest_city|}}}{{{largest_settlement|}}}|capital
|capital<!--
-->|{{#switch:{{{capital}}}
| [[{{{largest_city|}}}{{{largest_settlement|}}}]] = capital
| {{{largest_city|}}}{{{largest_settlement|}}} = capital
| not capital
}}<!--
-->}}|capital <!--
(#ifeq:)-->|<!------------------------------------------
capital is largest_city/_settlement:
-------------------------------------------
--><div class="ib-country-largest">and {{{largest_settlement_type|largest city}}}</div>
}}
| data8 = {{#if:{{{capital|}}}|{{{capital}}}{{#if:{{{coordinates|}}}|<br/>{{#invoke:Coordinates|coordinsert|{{{coordinates}}}|type:city}}}} }}
| rowclass9 = {{#if:{{{capital|}}}|mergedrow}}
| label9 = Capital-in-exile
| data9 = {{#ifexist:{{{capital_exile|}}}|[[{{{capital_exile|}}}]]|{{{capital_exile|}}}}}
| rowclass10 = {{#if:{{{capital|}}}|mergedrow}}
| label10 = {{#if:{{{admin_center_type|}}}| {{{admin_center_type}}} | Administrative center }}
| data10 = {{#switch:{{{admin_center|}}}
|capital | =
|[[{{{capital|}}}]] =
|{{{capital|}}} =
|#default = {{{admin_center}}}{{#if:{{{capital|}}}||{{#if:{{{coordinates|}}}|<br/>{{#invoke:Coordinates|coordinsert|{{{coordinates}}}|type:city}}}} }} }}
| rowclass11 = {{#if:{{{capital|}}}{{{admin_center|}}}|mergedbottomrow}}
| label11 = Largest {{{largest_settlement_type|city}}}
| data11 = {{#ifeq: {{#ifeq:{{{largest_city|}}}{{{largest_settlement|}}}|capital
|capital<!--
-->|{{#switch:{{{capital}}}
| [[{{{largest_city|}}}{{{largest_settlement|}}}]] = capital
| {{{largest_city|}}}{{{largest_settlement|}}} = capital
| not capital
}}<!--
-->}}|capital <!--
(#ifeq:)-->|<!-- nothing already appears above -->
| {{if empty| {{{largest_city|}}} | {{{largest_settlement|}}} }}
}}
| rowclass12 = mergedtoprow
| label12 = Official languages
| data12 = {{{official_languages|}}}
| rowclass13 = mergedrow
| label13 = <span class="ib-country-lang">{{#if:{{{recognized_languages|}}}|Recognized|Recognised}} languages</span>
| data13 = {{if empty| {{{recognized_languages|}}} | {{{recognised_languages|}}} }}
| rowclass14 = mergedrow
| label14 = <span class="ib-country-lang">{{#if:{{{recognized_national_languages|}}}|Recognized|Recognised}} national languages</span>
| data14 = {{if empty| {{{recognized_national_languages|}}} | {{{recognised_national_languages|}}} | {{{national_languages|}}} }}
| rowclass15 = mergedrow
| label15 = <span class="ib-country-lang">{{#if:{{{recognized_regional_languages|}}}|Recognized|Recognised}} regional languages</span>
| data15 = {{if empty| {{{recognized_regional_languages|}}} | {{{recognised_regional_languages|}}} | {{{regional_languages|}}} }}
| label16 = Common languages
| data16 = {{{common_languages|}}}
| rowclass17 = {{#ifeq:{{{languages2_sub|}}}|yes
|{{#ifeq:{{{languages_sub|}}}|yes |mergedrow}}
|{{#ifeq:{{{languages_sub|}}}|yes |mergedbottomrow}} }}
| label17 ={{#ifeq:{{{languages_sub|}}}|yes
|<div class="ib-country-lang">{{if empty| {{{languages_type|}}} | Other languages }}</div>
|{{if empty| {{{languages_type|}}} | Other languages }}
}}
| data17 = {{{languages|}}}
| rowclass18 = {{#ifeq:{{{languages2_sub|}}}|yes |mergedbottomrow}}
| label18 = {{#ifeq:{{{languages2_sub|}}}|yes
|<div class="ib-country-lang">{{if empty|{{{languages2_type|}}} | Other languages }}</div>
|{{if empty|{{{languages2_type|}}} | Other languages }}
}}
| data18 = {{{languages2|}}}
| label19 = [[Ethnic group|Ethnic groups]] <!--
-->{{#if:{{{ethnic_groups_year|}}} |<div class="ib-country-ethnic"> ({{{ethnic_groups_year}}}){{{ethnic_groups_ref|}}}</div>|<div class="ib-country-ethnic">{{{ethnic_groups_ref|}}}</div>}}
| data19 = {{{ethnic_groups|}}}
| label20 = Religion <!--
-->{{#if:{{{religion_year|}}} |<div class="ib-country-religion"> ({{{religion_year}}}){{{religion_ref|}}}</div>|<div class="ib-country-religion">{{{religion_ref|}}}</div>}}
| data20 = {{{religion|}}}
| label21 = [[Demonym|Demonym(s)]]
| data21 = {{#if:{{{demonym|}}}
|{{#ifexist:{{{demonym}}} people
| [[{{{demonym}}} people|{{{demonym}}}]]
| {{{demonym}}}
}}
}}
| label22 = Type
| data22 = {{{org_type|}}}
| label23 = {{if empty|{{{membership_type|}}} | Membership }}
| data23 = {{{membership|}}}
| label24 = {{#if:{{{government_type|}}}
| {{#if:{{{politics_link|}}}
| [[{{{politics_link}}}|{{#ifeq:{{{micronation|}}}|yes|Organizational structure|Government}}]]<!--
-->| {{#ifexist:Politics of {{{linking_name|{{{common_name|{{{name|{{PAGENAME}}}}}}}}}}}
| [[Politics of {{{linking_name|{{{common_name|{{{name|{{PAGENAME}}}}}}}}}}}|{{#ifeq:{{{micronation|}}}|yes|Organizational structure|Government}}]]<!--
-->| {{#ifeq:{{{micronation|}}}|yes|Organizational structure|Government}}<!--
-->}}<!--
-->}}<!--
-->}}
| data24 = {{{government_type|}}}
| header25 = {{#if:{{{government_type|}}} || {{#if:{{{leader_title1|}}}{{{leader_name1|}}}
| {{#if:{{{name|}}}{{{membership|}}}
| <!--template being used for geopolitical org:-->Leaders
| <!--template being used for country/territory: -->Government
}}
}} }}
| rowclass26 = mergedrow
| data26 = {{#if:{{{leader_name1|}}}|{{Infobox country/multirow|{{{leader_title1|}}} |{{{leader_name1|}}} |{{{leader_title2|}}} |{{{leader_name2|}}} |{{{leader_title3|}}} |{{{leader_name3|}}} |{{{leader_title4|}}} |{{{leader_name4|}}} |{{{leader_title5|}}} |{{{leader_name5|}}} |{{{leader_title6|}}} |{{{leader_name6|}}} |{{{leader_title7|}}} |{{{leader_name7|}}} |{{{leader_title8|}}} |{{{leader_name8|}}} |{{{leader_title9|}}} |{{{leader_name9|}}} |{{{leader_title10|}}} |{{{leader_name10|}}} |{{{leader_title11|}}} |{{{leader_name11|}}} |{{{leader_title12|}}} |{{{leader_name12|}}} |{{{leader_title13|}}} |{{{leader_name13|}}} |{{{leader_title14|}}} |{{{leader_name14|}}} |{{{leader_title15|}}} |{{{leader_name15|}}} }} }}
| rowclass27 = mergedrow
| label27 = {{#if:{{{title_leader|}}}| {{{title_leader}}} }}
| data27 = {{#if:{{{title_leader|}}}| }}
| rowclass28 = mergedrow
| data28 = {{#if:{{{year_leader1|}}} | {{Infobox country/multirow|{{{year_leader1|}}} |{{{leader1|}}} |{{{year_leader2|}}} |{{{leader2|}}} |{{{year_leader3|}}} |{{{leader3|}}} |{{{year_leader4|}}} |{{{leader4|}}} |{{{year_leader5|}}} |{{{leader5|}}} |{{{year_leader6|}}} |{{{leader6|}}} |{{{year_leader7|}}} |{{{leader7|}}} |{{{year_leader8|}}} |{{{leader8|}}} |{{{year_leader9|}}} |{{{leader9|}}} |{{{year_leader10|}}} |{{{leader10|}}} |{{{year_leader11|}}} |{{{leader11|}}}|{{{year_leader12|}}} |{{{leader12|}}}|{{{year_leader13|}}} |{{{leader13|}}}|{{{year_leader14|}}} |{{{leader14|}}}|{{{year_leader15|}}} |{{{leader15|}}} }} }}
| rowclass29 = mergedrow
| label29 = {{#if:{{{title_representative|}}}| {{{title_representative}}} }}
| data29 = {{#if:{{{title_representative|}}}| }}
| rowclass30 = mergedrow
| data30 = {{#if:{{{year_representative1|}}}|{{Infobox country/multirow|{{{year_representative1|}}} |{{{representative1|}}} |{{{year_representative2|}}} |{{{representative2|}}} |{{{year_representative3|}}} |{{{representative3|}}} |{{{year_representative4|}}} |{{{representative4|}}} |{{{year_representative5|}}} |{{{representative5|}}}|{{{year_representative6|}}} |{{{representative6|}}}|{{{year_representative7|}}} |{{{representative7|}}}|{{{year_representative8|}}} |{{{representative8|}}} }} }}
| rowclass31 = mergedrow
| label31 = {{#if:{{{title_deputy|}}}|{{{title_deputy}}} }}
| data31 = {{#if:{{{title_deputy|}}}| }}
| rowclass32 = mergedrow
| data32 = {{#if:{{{year_deputy1|}}}|{{Infobox country/multirow|{{{year_deputy1|}}} |{{{deputy1|}}} |{{{year_deputy2|}}} |{{{deputy2|}}} |{{{year_deputy3|}}} |{{{deputy3|}}} |{{{year_deputy4|}}} |{{{deputy4|}}} |{{{year_deputy5|}}} |{{{deputy5|}}} |{{{year_deputy6|}}} |{{{deputy6|}}}|{{{year_deputy7|}}} |{{{deputy7|}}}|{{{year_deputy8|}}} |{{{deputy8|}}}|{{{year_deputy9|}}} |{{{deputy9|}}}|{{{year_deputy10|}}} |{{{deputy10|}}}|{{{year_deputy11|}}} |{{{deputy11|}}}|{{{year_deputy12|}}} |{{{deputy12|}}}|{{{year_deputy13|}}} |{{{deputy13|}}}|{{{year_deputy14|}}} |{{{deputy14|}}}|{{{year_deputy15|}}} |{{{deputy15|}}} }} }}
| label40 = Legislature
| data40 = {{{legislature|}}}
| rowclass41 = mergedrow
| label41 = <div class="ib-country-fake-li">• {{#if:{{{type_house1|}}}|{{{type_house1}}}|[[Upper house]]}}</div>
| data41 = {{{upper_house|{{{house1|}}}}}}
| rowclass42 = mergedbottomrow
| label42 = <div class="ib-country-fake-li">• {{#if:{{{type_house2|}}}|{{{type_house2}}}|[[Lower house]]}}</div>
| data42 = {{{lower_house|{{{house2|}}}}}}
| rowclass43 = {{#if:{{{established_event1|}}} |mergedtoprow}}
| header43 = {{#if:{{{established_event1|}}}{{{sovereignty_type|}}}
|{{#if:{{{sovereignty_type|}}}
| {{{sovereignty_type}}}<!--
-->{{#if:{{{sovereignty_note|}}} | <div class="ib-country-sovereignty">{{{sovereignty_note}}}</div>}}
| {{#if:{{{established|}}}| | Establishment }}
}} }}
| label44 = Establishment
| data44 = {{#if:{{{sovereignty_type|}}}
|
|{{{established|}}}
}}
| label45 = {{#if:{{{era|}}}|Historical era|History}}
| data45 = {{#if:{{{era|}}} |{{#ifexist:{{{era|}}}|[[{{{era}}}]]|{{{era}}}}} | {{#if:{{{date_start|}}}{{{year_start|}}}| }}}}
| rowclass46 = {{#if:{{{established_event1|}}} |mergedrow |mergedbottomrow}}
| data46 = {{#if:{{{established_date1|}}}|{{Infobox country/multirow |{{{established_event1|}}} |{{{established_date1||}}} |{{{established_event2|}}} |{{{established_date2||}}} |{{{established_event3|}}} |{{{established_date3|}}} |{{{established_event4|}}} |{{{established_date4|}}} |{{{established_event5|}}} |{{{established_date5|}}} |{{{established_event6|}}} |{{{established_date6|}}} |{{{established_event7|}}} |{{{established_date7|}}} |{{{established_event8|}}} |{{{established_date8|}}} |{{{established_event9|}}} |{{{established_date9|}}} |{{{established_event10|}}} |{{{established_date10|}}} |{{{established_event11|}}} |{{{established_date11|}}} |{{{established_event12|}}} |{{{established_date12|}}} |{{{established_event13|}}} |{{{established_date13|}}} |{{{established_event14|}}} |{{{established_date14|}}} |{{{established_event15|}}} |{{{established_date15|}}} |{{{established_event16|}}} |{{{established_date16|}}} |{{{established_event17|}}} |{{{established_date17|}}} |{{{established_event18|}}} |{{{established_date18|}}} |{{{established_event19|}}} |{{{established_date19|}}} |{{{established_event20|}}} |{{{established_date20|}}} }} }}
| rowclass47 = {{#if:{{{date_start|}}}{{{year_start|}}} |mergedrow |mergedbottomrow}}
| data47 = {{#if:{{{date_start|}}}{{{year_start|}}}|{{Infobox country/multirow |{{{event_pre|}}} |{{{date_pre|}}} |{{if empty|{{{event_start|}}}|Established}} |{{{date_start|}}} {{{year_start|}}} |{{{event1|}}} |{{{date_event1|}}} |{{{event2|}}} |{{{date_event2|}}} |{{{event3|}}} |{{{date_event3|}}} |{{{event4|}}} |{{{date_event4|}}} |{{{event5|}}} |{{{date_event5|}}} |{{{event6|}}} |{{{date_event6|}}}|{{{event7|}}} |{{{date_event7|}}}|{{{event8|}}} |{{{date_event8|}}}|{{{event9|}}} |{{{date_event9|}}}|{{{event10|}}} |{{{date_event10|}}} |{{if empty|{{{event_end|}}}|Disestablished}} |{{{date_end|}}} {{{year_end|}}} |{{{event_post|}}} |{{{date_post|}}} }} }}
| rowclass60 = mergedtoprow
| header60 = {{#if:{{{area_km2|}}}{{{area_ha|}}}{{{area_sq_mi|}}}{{{area_acre|}}}{{{area_land_km2|}}}{{{area_land_ha|}}}{{{area_land_sq_mi|}}}{{{area_land_acre|}}}{{{area_water_km2|}}}{{{area_water_ha|}}}{{{area_water_sq_mi|}}}{{{area_water_acre|}}}{{{stat_area1|}}}{{{stat_area2|}}}{{{stat_area3|}}}{{{stat_area4|}}}{{{stat_area5|}}}
| {{#if:{{{area_link|}}}
| [[{{{area_link}}}|Area {{#ifeq:{{{micronation|}}}|yes|claimed|}}]]
| {{#ifexist:Geography of {{{linking_name|{{{common_name|{{{name|{{PAGENAME}}}}}}}}}}}
| [[Geography of {{{linking_name|{{{common_name|{{{name|{{PAGENAME}}}}}}}}}}}|Area {{#ifeq:{{{micronation|}}}|yes|claimed|}}]]
| Area {{#ifeq:{{{micronation|}}}|yes|claimed|}}<!--
-->}}<!--
-->}} }}
| rowclass61 = {{#if:{{{area_land_km2|}}}{{{area_land_ha|}}}{{{area_land_sq_mi|}}}{{{area_land_acre|}}}{{{area_water_km2|}}}{{{area_water_ha|}}}{{{area_water_sq_mi|}}}{{{area_water_acre|}}}{{{FR_metropole|}}}{{{area_label2|}}}{{{area_label3|}}}{{{percent_water|}}}{{{stat_area1|}}}{{{stat_area2|}}}{{{stat_area3|}}}{{{stat_area4|}}}{{{stat_area5|}}}|mergedrow|mergedbottomrow}}
| label61 = <div class="ib-country-fake-li">• {{{area_label|Total}}}{{{FR_foot4|}}}</div>
| data61 = {{#if:{{{area_km2|}}}{{{area_ha|}}}{{{area_sq_mi|}}}{{{area_acre|}}}
|{{#if:{{{area_km2|}}}{{{area_sq_mi|}}}
|{{convinfobox|{{{area_km2|}}}|km2|{{{area_sq_mi|}}}|sqmi|abbr=on}}
|{{#if:{{{area_ha|}}}{{{area_acre|}}}
|{{convinfobox|{{{area_ha|}}}|ha|{{{area_acre|}}}|acre|abbr=on}}
}}
}}{{{area_footnote|}}}{{#if:{{{area_rank|}}} | ([[List of countries and dependencies by area|{{{area_rank}}}]]) }}
}}
| rowclass62 = {{#if:{{{area_water_km2|}}}{{{area_water_ha|}}}{{{area_water_sq_mi|}}}{{{area_water_acre|}}}{{{FR_metropole|}}}{{{area_label2|}}}{{{area_label3|}}}{{{percent_water|}}}{{{stat_area1|}}}{{{stat_area2|}}}{{{stat_area3|}}}{{{stat_area4|}}}{{{stat_area5|}}}|mergedrow|mergedbottomrow}}
| label62 = <div class="ib-country-fake-li">• Land</div>
| data62 = {{#if:{{{area_land_km2|}}}{{{area_land_ha|}}}{{{area_land_sq_mi|}}}{{{area_land_acre|}}}
|{{#if:{{{area_land_km2|}}}{{{area_land_sq_mi|}}}
|{{convinfobox|{{{area_land_km2|}}}|km2|{{{area_land_sq_mi|}}}|sqmi|abbr=on}}
|{{#if:{{{area_land_ha|}}}{{{area_land_acre|}}}
|{{convinfobox|{{{area_land_ha|}}}|ha|{{{area_land_acre|}}}|acre|abbr=on}}
}}
}}{{{area_land_footnote|}}}
}}
| rowclass63 = {{#if:{{{FR_metropole|}}}{{{area_label2|}}}{{{area_label3|}}}{{{percent_water|}}}{{{stat_area1|}}}{{{stat_area2|}}}{{{stat_area3|}}}{{{stat_area4|}}}{{{stat_area5|}}}|mergedrow|mergedbottomrow}}
| label63 = <div class="ib-country-fake-li">• Water</div>
| data63 = {{#if:{{{area_water_km2|}}}{{{area_water_ha|}}}{{{area_water_sq_mi|}}}{{{area_water_acre|}}}
|{{#if:{{{area_water_km2|}}}{{{area_water_sq_mi|}}}
|{{convinfobox|{{{area_water_km2|}}}|km2|{{{area_water_sq_mi|}}}|sqmi|abbr=on}}
|{{#if:{{{area_water_ha|}}}{{{area_water_acre|}}}
|{{convinfobox|{{{area_water_ha|}}}|ha|{{{area_water_acre|}}}|acre|abbr=on}}
}}
}}{{{area_water_footnote|}}}
}}
| rowclass64 = {{#if:{{{FR_metropole|}}}{{{area_label2|}}}{{{area_label3|}}}{{{stat_area1|}}}{{{stat_area2|}}}{{{stat_area3|}}}{{{stat_area4|}}}{{{stat_area5|}}}|mergedrow|mergedbottomrow}}
| label64 = <div class="ib-country-fake-li">• Water (%)</div>
| data64 = {{{percent_water|}}}
| rowclass65 = {{#if:{{{FR_metropole|}}}{{{area_label3|}}}{{{stat_area1|}}}{{{stat_area2|}}}{{{stat_area3|}}}{{{stat_area4|}}}{{{stat_area5|}}}|mergedrow|mergedbottomrow}}
| label65 = <div class="ib-country-fake-li">• {{{area_label2|}}}</div>
| data65 = {{#if:{{{area_label2|}}}| {{{area_data2|}}} }}
| rowclass66 = {{#if:{{{FR_metropole|}}}{{{stat_area1|}}}{{{stat_area2|}}}{{{stat_area3|}}}{{{stat_area4|}}}{{{stat_area5|}}}|mergedrow|mergedbottomrow}}
| label66 = <div class="ib-country-fake-li">• {{{area_label3|}}}</div>
| data66 = {{#if:{{{area_label3|}}}| {{{area_data3|}}} }}
| rowclass67 = {{#if:{{{FR_metropole|}}}{{{stat_area2|}}}{{{stat_area3|}}}{{{stat_area4|}}}{{{stat_area5|}}}|mergedrow|mergedbottomrow}}
| label67 = {{{stat_year1|}}}{{{ref_area1|}}}
| data67 = {{#if: {{{stat_area1|}}} | {{convinfobox|{{{stat_area1|}}}|km2||sqmi}} }}
| rowclass68 = {{#if:{{{FR_metropole|}}}{{{stat_area3|}}}{{{stat_area4|}}}{{{stat_area5|}}}|mergedrow|mergedbottomrow}}
| label68 = {{{stat_year2|}}}{{{ref_area2|}}}
| data68 = {{#if: {{{stat_area2|}}} | {{convinfobox|{{{stat_area2|}}}|km2||sqmi}} }}
| rowclass69 = {{#if:{{{FR_metropole|}}}{{{stat_area4|}}}{{{stat_area5|}}}|mergedrow|mergedbottomrow}}
| label69 = {{{stat_year3|}}}{{{ref_area3|}}}
| data69 = {{#if: {{{stat_area3|}}} | {{convinfobox|{{{stat_area3|}}}|km2||sqmi}} }}
| rowclass70 = {{#if:{{{FR_metropole|}}}{{{stat_area5|}}}|mergedrow|mergedbottomrow}}
| label70 = {{{stat_year4|}}}{{{ref_area4|}}}
| data70 = {{#if: {{{stat_area4|}}} | {{convinfobox|{{{stat_area4|}}}|km2||sqmi}} }}
| rowclass71 = {{#if:{{{FR_metropole|}}}|mergedrow|mergedbottomrow}}
| label71 = {{{stat_year5|}}}{{{ref_area5|}}}
| data71 = {{#if: {{{stat_area5|}}} | {{convinfobox|{{{stat_area5|}}}|km2||sqmi}} }}
| rowclass72 = mergedrow
| label72 = <div class="ib-country-fake-li">• {{{FR_metropole}}}</div>
| data72 = {{#if:{{{FR_metropole|}}}| <nowiki /> }}
| rowclass73 = mergedrow
| label73 = <div class="ib-country-fake-li2">• [[Institut Géographique National|IGN]]{{{FR_foot2|}}}</div>
| data73 = {{#if:{{{FR_metropole|}}}
|{{#if:{{{FR_IGN_area_km2|}}}{{{FR_IGN_area_sq_mi|}}}
|{{convinfobox|{{{FR_IGN_area_km2|}}}|km2|{{{FR_IGN_area_sq_mi|}}}|sqmi|abbr=on}}{{#if:{{{FR_IGN_area_rank|}}}| ([[List of countries and dependencies by area|{{{FR_IGN_area_rank|}}}]])}}
}}
}}
| rowclass89 = mergedbottomrow
| label89 = <div class="ib-country-fake-li2">• [[Cadastre]]{{{FR_foot3|}}}</div>
| data89 = {{#if:{{{FR_metropole|}}}
|{{#if:{{{FR_cadastre_area_km2|}}}{{{FR_cadastre_area_sq_mi|}}}
| {{convinfobox|{{{FR_cadastre_area_km2|}}}|km2|{{{FR_cadastre_area_sq_mi|}}}|sqmi|abbr=on}}{{#if:{{{FR_cadastre_area_rank|}}}| ([[List of countries and dependencies by area|{{{FR_cadastre_area_rank|}}}]])}}
}}
}}
| rowclass90 = mergedtoprow
| header90 = {{#if:{{{population_estimate|}}}{{{population_census|}}}{{{FR_metropole_population|}}}{{{stat_pop1|}}}{{{stat_pop2|}}}{{{stat_pop3|}}}{{{stat_pop4|}}}{{{stat_pop5|}}}
|{{#if:{{{population_link|}}}
| {{#ifeq:{{{population_link}}}|no|Population|[[{{{population_link}}}|Population]]}}<!--
-->| {{#ifexist:Demographics of {{{linking_name|{{{common_name|{{{name|{{PAGENAME}}}}}}}}}}}
| [[Demographics of {{{linking_name|{{{common_name|{{{name|{{PAGENAME}}}}}}}}}}}|Population]]<!--
-->| Population<!--
-->}}<!--
-->}} }}
| rowclass91 = mergedrow
| label91 = <div class="ib-country-fake-li">• {{#if:{{{population_estimate_year|}}} |{{{population_estimate_year}}} estimate|Estimate}}</div>
| data91 = {{#if:{{{population_estimate|}}}
|{{{population_estimate}}}<!--
-->{{#if:{{{population_estimate_rank|}}} | ([[List of countries and dependencies by population|{{{population_estimate_rank}}}]])}}
}}
| rowclass92 = mergedrow
| label92= <div class="ib-country-fake-li">• {{{population_label2|}}}</div>
| data92= {{#if:{{{population_label2|}}}|{{{population_data2|}}}}}
| rowclass93= mergedrow
| label93= <div class="ib-country-fake-li">• {{{population_label3|}}}</div>
| data93= {{#if:{{{population_label3|}}}|{{{population_data3|}}}}}
| rowclass94= mergedrow
| data94= {{#if:{{{stat_pop1|}}}{{{stat_pop2|}}}{{{stat_pop3|}}}{{{stat_pop4|}}}{{{stat_pop5|}}}|{{infobox country/multirow|{{{stat_year1|}}}{{{ref_pop1|}}} |{{{stat_pop1|}}}|{{{stat_year2|}}}{{{ref_pop2|}}} |{{{stat_pop2|}}}|{{{stat_year3|}}}{{{ref_pop3|}}} |{{{stat_pop3|}}}|{{{stat_year4|}}}{{{ref_pop4|}}} |{{{stat_pop4|}}}|{{{stat_year5|}}}{{{ref_pop5|}}} |{{{stat_pop5|}}} }} }}
| rowclass95= mergedrow
| label95= <div class="ib-country-fake-li">• {{#if:{{{population_census_year|}}} |{{{population_census_year}}} census|Census}}</div>
| data95= {{#if:{{{population_census|}}}
|{{{population_census}}}<!--
-->{{#if:{{{population_census_rank|}}} | ([[List of countries and dependencies by population|{{{population_census_rank}}}]])}}
}}
| rowclass96= mergedrow
| label96 = {{#if:{{{FR_metropole_population|}}}|{{#if:{{{FR_total_population_estimate_year|}}}|{{nobold|1= ({{{FR_total_population_estimate_year}}})}}}}}}
| data96 = {{#if:{{{FR_metropole_population|}}}|{{#if:{{{FR_total_population_estimate_year|}}}|<nowiki />}}}}
| rowclass97 = mergedrow
| label97= <div class="ib-country-fake-li">• Total{{{FR_foot|}}}</div>
| data97= {{#if:{{{FR_metropole_population|}}}|{{#if:{{{FR_total_population_estimate|}}}
|{{{FR_total_population_estimate}}}{{#if:{{{FR_total_population_estimate_rank|}}}| ([[List of countries by population in 2005|{{{FR_total_population_estimate_rank}}}]])}}
}} }}
| rowclass98 = mergedrow
| label98= <div class="ib-country-fake-li">• {{{FR_metropole}}}</div>
| data98= {{#if:{{{FR_metropole_population|}}}|{{{FR_metropole_population}}}{{#if:{{{FR_metropole_population_estimate_rank|}}}
| ([[List of countries by population in 2005|{{{FR_metropole_population_estimate_rank}}}]])}}
}}
| rowclass99 = mergedbottomrow
| label99= <div class="ib-country-fake-li">• Density{{{FR_foot5|}}}</div>
| data99= {{#if:{{{population_density_km2|}}}{{{population_density_sq_mi|}}}
| {{convinfobox|{{{population_density_km2|}}}|/km2|{{{population_density_sq_mi|}}}|/sqmi|1|abbr=on}}{{{pop_den_footnote|}}}<!--
-->{{#if:{{{population_density_rank|}}} | ([[List of countries and dependencies by population density|{{{population_density_rank}}}]])}}
}}
| rowclass100 = {{#if:{{{population_estimate|}}}{{{population_census|}}}{{{FR_metropole_population|}}}|mergedbottomrow|mergedtoprow}}
| label100 = Membership
| data100= {{{nummembers|}}}
| rowclass101= mergedtoprow
| label101= {{#ifeq:{{{micronation|}}}|yes|Claimed|}} [[Gross domestic product|GDP]] {{nobold|([[Purchasing power parity|PPP]])}}
| data101= {{#if:{{{GDP_PPP|}}}{{{GDP_PPP_per_capita|}}}
|{{#if:{{{GDP_PPP_year|}}} |{{{GDP_PPP_year}}} }}estimate
}}
| rowclass102= mergedrow
| label102= <div class="ib-country-fake-li">• Total</div>
| data102= {{#if:{{{GDP_PPP|}}}
|{{{GDP_PPP}}}<!--
-->{{#if:{{{GDP_PPP_rank|}}} | ([[List of countries by GDP (PPP)|{{{GDP_PPP_rank}}}]])}}
}}
| rowclass103= mergedbottomrow
| label103= <div class="ib-country-fake-li">• Per capita</div>
| data103= {{#if:{{{GDP_PPP_per_capita|}}}
|{{{GDP_PPP_per_capita}}}<!--
-->{{#if:{{{GDP_PPP_per_capita_rank|}}} | ([[List of countries by GDP (PPP) per capita|{{{GDP_PPP_per_capita_rank}}}]])}}
}}
| rowclass104= mergedtoprow
| label104= {{#ifeq:{{{micronation|}}}|yes|Claimed|}} [[Gross domestic product|GDP]] {{nobold|(nominal)}}
| data104= {{#if:{{{GDP_nominal|}}}{{{GDP_nominal_per_capita|}}}
|{{#if:{{{GDP_nominal_year|}}} |{{{GDP_nominal_year}}} }}estimate
}}
| rowclass105= mergedrow
| label105= <div class="ib-country-fake-li">• Total</div>
| data105= {{#if:{{{GDP_nominal|}}}
|{{{GDP_nominal}}}<!--
-->{{#if:{{{GDP_nominal_rank|}}} | ([[List of countries by GDP (nominal)|{{{GDP_nominal_rank}}}]])}}
}}
| rowclass106= mergedbottomrow
| label106= <div class="ib-country-fake-li">• Per capita</div>
| data106= {{#if:{{{GDP_nominal_per_capita|}}}
| {{{GDP_nominal_per_capita}}}<!--
-->{{#if:{{{GDP_nominal_per_capita_rank|}}} | ([[List of countries by GDP (nominal) per capita|{{{GDP_nominal_per_capita_rank}}}]])}}
}}
| label107= [[Gini_coefficient|Gini]]{{#if:{{{Gini_year|}}} | {{nobold|1=({{{Gini_year}}})}}}}
| data107= {{#if:{{{Gini|}}}
| {{#switch:{{{Gini_change|}}}
|increase = {{increaseNegative}} <!--
-->|decrease = {{decreasePositive}} <!--
-->|steady = {{steady}} <!--
-->}}{{{Gini}}}{{{Gini_ref|}}}<br/><!--
---------Evaluate and add Gini category:----------
-->{{nowrap|1=<!--
-->{{#iferror:<!--
-->{{#ifexpr:{{{Gini}}}>100 <!--
-->| {{error|Error: Gini value above 100}}<!--Handled by outer #iferror, not visible to users--><!--
-->| {{#ifexpr:{{{Gini}}}>=60 |{{color|red|very high}}<!--
-->| {{#ifexpr:{{{Gini}}}>=46 <!--
-->| {{color|darkred|high}}<!--
-->| {{#ifexpr:{{{Gini}}}>=30 <!--
-->| {{color|orange|medium}}<!--
-->| {{#ifexpr:{{{Gini}}}>=0 <!--
-->| {{color|forestgreen|low}}<!--
-->| {{error|Error:Gini value below 0}}<!--Handled by outer #iferror, not visible to users--><!--
-->}}<!--
-->}}<!--
-->}}<!--
-->}}<!--
-->}}<!--
-->| {{error|Error: Invalid Gini value}}{{#ifeq: {{NAMESPACE}} | {{ns:0}} | [[Category:Country articles requiring maintenance]] }}<!--
-->}}<!--
-->}}<!--
-----------Add Gini_rank (if supplied):----------
-->{{#if:{{{Gini_rank|}}}
| · [[List of countries by income equality|{{{Gini_rank}}}]]<!--
-->}}<!--
-->}}
| label108= [[Human Development Index|HDI]]{{#if:{{{HDI_year|}}} | {{nobold|1=({{{HDI_year}}})}}}}
| data108= {{#if:{{{HDI|}}}
| {{#switch:{{{HDI_change|}}}
|increase = {{increase}} <!--
-->|decrease = {{decrease}} <!--
-->|steady = {{steady}} <!--
-->}}{{{HDI}}}{{{HDI_ref|}}}<br/><!--
---------Evaluate and add HDI category:---------
-->{{nowrap|1=<!--
-->{{#iferror:<!--
-->{{#ifexpr:{{{HDI}}}>1 <!--
-->| {{error|Error: HDI value greater than 1}}<!--Handled by outer #iferror, not visible to users--><!--
-->| {{#ifexpr:{{{HDI}}}>0.799 <!--
-->| {{color|darkgreen|very high}}<!--
-->| {{#ifexpr:{{{HDI}}}>0.699 <!--
-->| {{color|forestgreen|high}}<!--
-->| {{#ifexpr:{{{HDI}}}>0.549 <!--
-->| {{color|orange|medium}}<!--
-->| {{#ifexpr:{{{HDI}}}>=0.000<!--
-->| {{color|red|low}}<!--
-->| {{error|Error: HDI value less than 0}}<!--Handled by outer #iferror, not visible to users--><!--
-->}}<!--
-->}}<!--
-->}}<!--
-->}}<!--
-->}}<!--
-->| {{error|Error: Invalid HDI value}}{{#ifeq: {{NAMESPACE}} | {{ns:0}} | [[Category:Country articles requiring maintenance]] }}<!--
-->}}<!--
-->}}<!--
----------Add HDI_rank (if supplied):-----------
-->{{#if:{{{HDI_rank|}}}
| · [[List of countries by Human Development Index|{{{HDI_rank}}}]]<!--
-->}}<!--
-->}}
| label109= {{#ifeq:{{{micronation|}}}|yes|Purported currency|Currency}}
| data109= {{#if:{{{currency|}}}
| {{{currency}}} {{#if:{{{currency_code|}}} |([[ISO 4217|{{{currency_code}}}]])}}
}}
| rowclass119= {{#if:{{{utc_offset_DST|}}}{{{DST_note|}}} |mergedtoprow}}
| label119= Time zone
| data119= {{#if:{{{utc_offset|}}}
|{{nowrap|[[Coordinated Universal Time|UTC]]{{{utc_offset}}}}} {{#if:{{{time_zone|}}}|({{{time_zone}}})}}
|{{{time_zone|}}}
}}
| rowclass120= {{#if:{{{DST_note|}}} |mergedrow |mergedbottomrow}}
| label120= <div class="ib-country-fake-li">• Summer ([[Daylight saving time|DST]])</div>
| data120= {{#if:{{{utc_offset_DST|}}}
|{{nowrap|[[Coordinated Universal Time|UTC]]{{{utc_offset_DST}}}}} {{#if:{{{time_zone_DST|}}}|({{{time_zone_DST}}})|{{#if:{{{DST|}}}|({{{DST}}})}}}}
|{{#if:{{{time_zone_DST|}}}|{{{time_zone_DST}}}|{{{DST|}}}}}
}}
| rowclass121= mergedbottomrow
| label121= <nowiki />
| data121= {{{DST_note|}}}
| label122 = [[Antipodes]]
| data122= {{{antipodes|}}}
| label123 = Date format
| data123= {{{date_format|}}}
| label125= [[Left- and right-hand traffic|Driving side]]
| data125= {{#if:{{{drives_on|}}} | {{lcfirst:{{{drives_on}}}}} }}
| label126= {{#if:{{{calling_code|}}}
|{{#ifexist:Telephone numbers in {{{linking_name|{{{common_name|{{{name|{{PAGENAME}}}}}}}}}}}
| [[Telephone numbers in {{{linking_name|{{{common_name|{{{name|{{PAGENAME}}}}}}}}}}}|Calling code]]
| Calling code
}}
}}
| data126= {{{calling_code|}}}
| label127= [[ISO 3166|ISO 3166 code]]
| data127= {{#switch:{{{iso3166code|}}}
|omit = <!--(do nothing)-->
| = <!--if iso3166code is not supplied:
-->{{#if:{{{common_name|}}}
| {{#if:{{ISO 3166 code|{{{common_name}}}|nocat=true}}
| [[ISO 3166-2:{{ISO 3166 code|{{{common_name}}}}}|{{ISO 3166 code|{{{common_name}}}}}]]
}}
}}
|#default = [[ISO 3166-2:{{uc:{{{iso3166code}}}}}|{{uc:{{{iso3166code}}}}}]]
}}
| label128= [[Country code top-level domain|Internet TLD]]
| data128= {{{cctld|}}}
| data129 = {{#if:{{{official_website|}}}
|<div class="ib-country-website">'''Website'''<br/>{{{official_website}}}</div>
}}
| data130= {{#if:{{{image_map3|{{{location_map|}}}}}}
| {{#invoke:InfoboxImage|InfoboxImage|image={{{image_map3|{{{location_map|}}}}}}|size={{{map3_width|}}}|upright=1.15|alt={{{alt_map3|}}}|title=Location of {{{common_name|{{{name|{{{linking_name|{{PAGENAME}} }}} }}} }}} }}<!--
-->{{#if:{{{map_caption3|}}}|<div class="ib-country-map-caption3">{{{map_caption3|}}}</div>}}
}}
| data134 = {{#if:{{{p1|}}}{{{s1|}}}
|{{Infobox country/formernext|flag_p1={{{flag_p1|}}}|image_p1={{{image_p1|}}}|p1={{{p1|}}}|border_p1={{{border_p1|}}}|flag_p2={{{flag_p2|}}}|image_p2={{{image_p2|}}}|p2={{{p2|}}}|border_p2={{{border_p2|}}}|flag_p3={{{flag_p3|}}}|image_p3={{{image_p3|}}}|p3={{{p3|}}}|border_p3={{{border_p3|}}}|flag_p4={{{flag_p4|}}}|image_p4={{{image_p4|}}}|p4={{{p4|}}}|border_p4={{{border_p4|}}}|flag_p5={{{flag_p5|}}}|image_p5={{{image_p5|}}}|p5={{{p5|}}}|border_p5={{{border_p5|}}}|flag_p6={{{flag_p6|}}}|image_p6={{{image_p6|}}}|p6={{{p6|}}}|border_p6={{{border_p6|}}}|flag_p7={{{flag_p7|}}}|image_p7={{{image_p7|}}}|p7={{{p7|}}}|border_p7={{{border_p7|}}}|flag_p8={{{flag_p8|}}}|image_p8={{{image_p8|}}}|p8={{{p8|}}}|border_p8={{{border_p8|}}}|flag_p9={{{flag_p9|}}}|image_p9={{{image_p9|}}}|p9={{{p9|}}}|border_p9={{{border_p9|}}}|flag_p10={{{flag_p10|}}}|image_p10={{{image_p10|}}}|p10={{{p10|}}}|border_p10={{{border_p10|}}}|flag_p11={{{flag_p11|}}}|image_p11={{{image_p11|}}}|p11={{{p11|}}}|border_p11={{{border_p11|}}}|flag_p12={{{flag_p12|}}}|image_p12={{{image_p12|}}}|p12={{{p12|}}}|border_p12={{{border_p12|}}}|flag_p13={{{flag_p13|}}}|image_p13={{{image_p13|}}}|p13={{{p13|}}}|border_p13={{{border_p13|}}}|flag_p14={{{flag_p14|}}}|image_p14={{{image_p14|}}}|p14={{{p14|}}}|border_p14={{{border_p14|}}}|flag_p15={{{flag_p15|}}}|image_p15={{{image_p15|}}}|p15={{{p15|}}}|border_p15={{{border_p15|}}}|flag_p16={{{flag_p16|}}}|image_p16={{{image_p16|}}}|p16={{{p16|}}}|border_p16={{{border_p16|}}}|flag_p17={{{flag_p17|}}}|image_p17={{{image_p17|}}}|p17={{{p17|}}}|border_p17={{{border_p17|}}}|flag_p18={{{flag_p18|}}}|image_p18={{{image_p18|}}}|p18={{{p18|}}}|border_p18={{{border_p18|}}}|flag_p19={{{flag_p19|}}}|image_p19={{{image_p19|}}}|p19={{{p19|}}}|border_p19={{{border_p19|}}}|flag_p20={{{flag_p20|}}}|image_p20={{{image_p20|}}}|p20={{{p20|}}}|border_p20={{{border_p20|}}}|flag_p21={{{flag_p21|}}}|image_p21={{{image_p21|}}}|p21={{{p21|}}}|border_p21={{{border_p21|}}}|flag_s1={{{flag_s1|}}}|image_s1={{{image_s1|}}}|s1={{{s1|}}}|border_s1={{{border_s1|}}}|flag_s2={{{flag_s2|}}}|image_s2={{{image_s2|}}}|s2={{{s2|}}}|border_s2={{{border_s2|}}}|flag_s3={{{flag_s3|}}}|image_s3={{{image_s3|}}}|s3={{{s3|}}}|border_s3={{{border_s3|}}}|flag_s4={{{flag_s4|}}}|image_s4={{{image_s4|}}}|s4={{{s4|}}}|border_s4={{{border_s4|}}}|flag_s5={{{flag_s5|}}}|image_s5={{{image_s5|}}}|s5={{{s5|}}}|border_s5={{{border_s5|}}}|flag_s6={{{flag_s6|}}}|image_s6={{{image_s6|}}}|s6={{{s6|}}}|border_s6={{{border_s6|}}}|flag_s7={{{flag_s7|}}}|image_s7={{{image_s7|}}}|s7={{{s7|}}}|border_s7={{{border_s7|}}}|flag_s8={{{flag_s8|}}}|image_s8={{{image_s8|}}}|s8={{{s8|}}}|border_s8={{{border_s8|}}}|flag_s9={{{flag_s9|}}}|image_s9={{{image_s9|}}}|s9={{{s9|}}}|border_s9={{{border_s9|}}}|flag_s10={{{flag_s10|}}}|image_s10={{{image_s10|}}}|s10={{{s10|}}}|border_s10={{{border_s10|}}}|flag_s11={{{flag_s11|}}}|image_s11={{{image_s11|}}}|s11={{{s11|}}}|border_s11={{{border_s11|}}}|flag_s12={{{flag_s12|}}}|image_s12={{{image_s12|}}}|s12={{{s12|}}}|border_s12={{{border_s12|}}}|flag_s13={{{flag_s13|}}}|image_s13={{{image_s13|}}}|s13={{{s13|}}}|border_s13={{{border_s13|}}}|flag_s14={{{flag_s14|}}}|image_s14={{{image_s14|}}}|s14={{{s14|}}}|border_s14={{{border_s14|}}}|flag_s15={{{flag_s15|}}}|image_s15={{{image_s15|}}}|s15={{{s15|}}}|border_s15={{{border_s15|}}}|flag_s16={{{flag_s16|}}}|image_s16={{{image_s16|}}}|s16={{{s16|}}}|border_s16={{{border_s16|}}}|flag_s17={{{flag_s17|}}}|image_s17={{{image_s17|}}}|s17={{{s17|}}}|border_s17={{{border_s17|}}}|flag_s18={{{flag_s18|}}}|image_s18={{{image_s18|}}}|s18={{{s18|}}}|border_s18={{{border_s18|}}}|flag_s19={{{flag_s19|}}}|image_s19={{{image_s19|}}}|s19={{{s19|}}}|border_s19={{{border_s19|}}}|flag_s20={{{flag_s20|}}}|image_s20={{{image_s20|}}}|s20={{{s20|}}}|border_s20={{{border_s20|}}}|flag_s21={{{flag_s21|}}}|image_s21={{{image_s21|}}}|s21={{{s21|}}}|border_s21={{{border_s21|}}}}}
}}
| label135 = Today part of
| data135 = {{{today|}}}
| data136 = {{#if:{{{footnote_a|}}}{{{footnote_b|}}}{{{footnote_c|}}}{{{footnote_d|}}}{{{footnote_e|}}}{{{footnote_f|}}}{{{footnote_g|}}}{{{footnote_h|}}}
|<div class="ib-country-fn"><ol class="ib-country-fn-alpha">
{{#if:{{{footnote_a|}}}|<li value=1>{{{footnote_a|}}}</li>
}}{{#if:{{{footnote_b|}}}|<li value=2>{{{footnote_b|}}}</li>
}}{{#if:{{{footnote_c|}}}|<li value=3>{{{footnote_c|}}}</li>
}}{{#if:{{{footnote_d|}}}|<li value=4>{{{footnote_d|}}}</li>
}}{{#if:{{{footnote_e|}}}|<li value=5>{{{footnote_e|}}}</li>
}}{{#if:{{{footnote_f|}}}|<li value=6>{{{footnote_f|}}}</li>
}}{{#if:{{{footnote_g|}}}|<li value=7>{{{footnote_g|}}}</li>
}}{{#if:{{{footnote_h|}}}|<li value=8>{{{footnote_h|}}}</li>}}
</ol></div>}}
| data137 = {{#if:{{{footnote1|}}}{{{footnote2|}}}{{{footnote3|}}}{{{footnote4|}}}{{{footnote5|}}}{{{footnote6|}}}{{{footnote7|}}}{{{footnote8|}}}
|<div class="ib-country-fn"><ol class="ib-country-fn-num">
{{#if:{{{footnote1|}}}|<li value=1>{{{footnote1|}}}</li>
}}{{#if:{{{footnote2|}}}|<li value=2>{{{footnote2|}}}</li>
}}{{#if:{{{footnote3|}}}|<li value=3>{{{footnote3|}}}</li>
}}{{#if:{{{footnote4|}}}|<li value=4>{{{footnote4|}}}</li>
}}{{#if:{{{footnote5|}}}|<li value=5>{{{footnote5|}}}</li>
}}{{#if:{{{footnote6|}}}|<li value=6>{{{footnote6|}}}</li>
}}{{#if:{{{footnote7|}}}|<li value=7>{{{footnote7|}}}</li>
}}{{#if:{{{footnote8|}}}|<li value=8>{{{footnote8|}}}</li>}}
</ol></div>}}
| data138 = {{#if:{{{footnotes|}}}|<div class="ib-country-fn">{{{footnotes}}}{{#if:{{{footnotes2|}}}|<br>{{{footnotes2}}}}}</div>}}
| belowclass = mergedtoprow noprint
| below = {{#if:{{{navbar|}}}| {{navbar|{{{navbar|}}}}} }}
}}{{#invoke:Check for unknown parameters|check|unknown={{main other|[[Category:Pages using infobox country with unknown parameters|_VALUE_{{PAGENAME}}]]}}|preview=Page using [[Template:Infobox country]] with unknown parameter "_VALUE_"|ignoreblank=y| admin_center_type | admin_center | alt_coat | alt_flag | alt_flag2 | alt_map | alt_map2 | alt_map3 | alt_symbol | anthem | anthems | antipodes | area_acre | area_data2 | area_data3 | area_footnote | area_ha | area_km2 | area_label | area_label2 | area_label3 | area_land_acre | area_land_footnote | area_land_ha | area_land_km2 | area_land_sq_mi | area_link | area_rank | area_sq_mi | area_water_acre | area_water_footnote | area_water_ha | area_water_km2 | area_water_sq_mi | border_p1 | border_p2 | border_p3 | border_p4 | border_p5 | border_p6 | border_p7 | border_p8 | border_p9 | border_p10 | border_p11 | border_p12 | border_p13 | border_p14 | border_p15 | border_p16 | border_p17 | border_p18 | border_p19 | border_p20| border_p21 | border_s1 | border_s2 | border_s3 | border_s4 | border_s5 | border_s6 | border_s7 | border_s8 | border_s9 | border_s10 | border_s11 | border_s12 | border_s13 | border_s14 | border_s15 | border_s16 | border_s17 | border_s18 | border_s19 | border_s20 | border_s21 | calling_code | capital_exile | capital_type | capital | cctld | coa_size | coat_alt | common_languages | common_name | conventional_long_name | coordinates | currency_code | currency | date_end | date_event1 | date_event2 | date_event3 | date_event4 | date_event5 | date_event6 | date_event7 | date_event8 | date_event9 | date_event10 | date_format | date_post | date_pre | date_start | demonym | deputy1 | deputy2 | deputy3 | deputy4 | deputy5 | deputy6 | deputy7 | deputy8 | deputy9 | deputy10 | deputy11 | deputy12 | deputy13 | deputy14 | deputy15 | drives_on | DST_note | DST | empire | englishmotto | era | established_date1 | established_date2 | established_date3 | established_date4 | established_date5 | established_date6 | established_date7 | established_date8 | established_date9 | established_date10 | established_date11 | established_date12 | established_date13 | established_date14 | established_date15 | established_date16 | established_date17 | established_date18 | established_date19 | established_date20 | established_event1 | established_event2 | established_event3 | established_event4 | established_event5 | established_event6 | established_event7 | established_event8 | established_event9 | established_event10 | established_event11 | established_event12 | established_event13 | established_event14 | established_event15 | established_event16 | established_event17 | established_event18 | established_event19 | established_event20 | established | ethnic_groups_ref | ethnic_groups_year | ethnic_groups | event_end | event_post | event_pre | event_start | event1 | event2 | event3 | event4 | event5 | event6 | event7 | event8 | event9 | event10 | flag| flag_alt | flag_alt2 | flag_border | flag_caption | flag_caption | flag_p1 | flag_p2 | flag_p3 | flag_p4 | flag_p5 | flag_p6 | flag_p7 | flag_p8 | flag_p9 | flag_p10 | flag_p11 | flag_p12 | flag_p13 | flag_p14 | flag_p15 | flag_p16 | flag_p17 | flag_p18 | flag_p19 | flag_p20 | flag_p21 | flag_s1 | flag_s2 | flag_s3 | flag_s4 | flag_s5 | flag_s6 | flag_s7 | flag_s8 | flag_s9 | flag_s10 | flag_s11 | flag_s12 | flag_s13 | flag_s14 | flag_s15 | flag_s16 | flag_s17 | flag_s18 | flag_s19 | flag_s20 | flag_s21 | flag_size | flag_type | flag_type_article | flag_width | flag2_border | footnote_a | footnote_a | footnote_b | footnote_b | footnote_c | footnote_c | footnote_d | footnote_d | footnote_e | footnote_e | footnote_f | footnote_f | footnote_g | footnote_g | footnote_h | footnote_h | footnote1 | footnote1 | footnote2 | footnote2 | footnote3 | footnote3 | footnote4 | footnote4 | footnote5 | footnote5 | footnote6 | footnote6 | footnote7 | footnote7 | footnote8 | footnote8 | footnotes | footnotes2 | FR_cadastre_area_km2 | FR_cadastre_area_rank | FR_cadastre_area_sq_mi | FR_foot | FR_foot2 | FR_foot3 | FR_foot4 | FR_foot5 | FR_IGN_area_km2 | FR_IGN_area_rank | FR_IGN_area_sq_mi | FR_metropole_population_estimate_rank | FR_metropole_population | FR_metropole | FR_total_population_estimate_rank | FR_total_population_estimate_year | FR_total_population_estimate | GDP_nominal_per_capita_rank | GDP_nominal_per_capita | GDP_nominal_rank | GDP_nominal_year | GDP_nominal | GDP_PPP_per_capita_rank | GDP_PPP_per_capita | GDP_PPP_rank | GDP_PPP_year | GDP_PPP | Gini_change | Gini_rank | Gini_ref | Gini_year | Gini | government_type | HDI_change | HDI_rank | HDI_ref | HDI_year | HDI | house1 | house2 | image_coat | image_flag | image_flag2 | image_map_alt | image_map_caption | image_map_size | image_map | image_map2_alt | image_map2_caption | image_map2_size | image_map2 | image_map3 | image_p1 | image_p2 | image_p3 | image_p4 | image_p5 | image_p6 | image_p7 | image_p8 | image_p9 | image_p10 | image_p11 | image_p12 | image_p13 | image_p14 | image_p15 | image_p16 | image_p17 | image_p18 | image_p19 | image_p20 | image_p21 | image_s1 | image_s2 | image_s3 | image_s4 | image_s5 | image_s6 | image_s7 | image_s8 | image_s9 | image_s10 | image_s11 | image_s12 | image_s13 | image_s14 | image_s15 | image_s16 | image_s17 | image_s18 | image_s19 | image_s20 | image_s21 | image_symbol | iso3166code | languages_sub | languages_type | languages | languages2_sub | languages2_type | languages2 | largest_city | largest_settlement_type | largest_settlement | leader_name1 | leader_name2 | leader_name3 | leader_name4 | leader_name5 | leader_name6 | leader_name7 | leader_name8 | leader_name9 | leader_name10 | leader_name11 | leader_name12 | leader_name13 | leader_name14 | leader_name15 | leader_title1 | leader_title2 | leader_title3 | leader_title4 | leader_title5 | leader_title6 | leader_title7 | leader_title8 | leader_title9 | leader_title10 | leader_title11 | leader_title12 | leader_title13 | leader_title14 | leader_title15 | leader1 | leader2 | leader3 | leader4 | leader5 | leader6 | leader7 | leader8 | leader9 | leader10 | leader11 | leader12 | leader13 | leader14 | leader15 | legislature | life_span | linking_name | location_map | loctext | lower_house | map_caption | map_caption2 | map_caption3 | map_width | map2_width | map3_width | membership_type | membership | micronation | motto | name | national_anthem | national_languages | national_motto | native_name | navbar | nummembers | official_languages | official_website | org_type | other_symbol_type | other_symbol | p1 | p2 | p3 | p4 | p5 | p6 | p7 | p8 | p9 | p10 | p11 | p12 | p13 | p14 | p15 | p16 | p17 | p18 | p19 | p20 | p21 | patron_saint | patron_saints | percent_water | politics_link | pop_den_footnote | population_census_rank | population_census_year | population_census | population_data2 | population_data3 | population_density_km2 | population_density_rank | population_density_sq_mi | population_estimate_rank | population_estimate_year | population_estimate | population_label2 | population_label3 | population_link | recognised_languages | recognised_national_languages | recognised_regional_languages | recognized_languages | recognized_national_languages | ref_area1 | ref_area2 | ref_area3 | ref_area4 | ref_area5 | ref_pop1 | ref_pop2 | ref_pop3 | ref_pop4 | ref_pop5 | regional_languages | recognized_regional_languages | religion_ref | religion_year | religion | representative1 | representative2 | representative3 | representative4 | representative5 | representative6 | representative7 | representative8 | royal_anthem | flag_anthem | march | national_march | regional_anthem | territorial_anthem | state_anthem | s1 | s2 | s3 | s4 | s5 | s6 | s7 | s8 | s9 | s10 | s11 | s12 | s13 | s14 | s15 | s16 | s17 | s18 | s19 | s20 | s21 | sovereignty_note | sovereignty_type | stat_area1 | stat_area2 | stat_area3 | stat_area4 | stat_area5 | stat_pop1 | stat_pop2 | stat_pop3 | stat_pop4 | stat_pop5 | stat_year1 | stat_year2 | stat_year3 | stat_year4 | stat_year5 | status_text | status | symbol| symbol_type_article | symbol_type | symbol_width | text_symbol_type | text_symbol | time_zone_DST | time_zone | title_deputy | title_leader | title_representative | today | type_house1 | type_house2 | upper_house | utc_offset_DST | utc_offset | year_deputy1 | year_deputy2 | year_deputy3 | year_deputy4 | year_deputy5 | year_deputy6 | year_deputy7 | year_deputy8 | year_deputy9 | year_deputy10 | year_deputy11 | year_deputy12 | year_deputy13 | year_deputy14 | year_deputy15 | year_end | year_exile_end | year_exile_start | year_leader1 | year_leader2 | year_leader3 | year_leader4 | year_leader5 | year_leader6 | year_leader7 | year_leader8 | year_leader9 | year_leader10 | year_leader11 | year_leader12 | year_leader13 | year_leader14 | year_leader15 | year_representative1 | year_representative2 | year_representative3 | year_representative4 | year_representative5 | year_representative6 | year_representative7 | year_representative8 | year_start}}{{main other|
{{#if:{{both|{{{image_coat|}}}|{{{image_symbol|}}}}}|[[Category:Pages using infobox country with syntax problems|A]]
}}{{#if:{{both|{{{alt_coat|}}}|{{{alt_symbol|}}}}}|[[Category:Pages using infobox country with syntax problems|B]]
}}{{#if:{{both|{{{motto|}}}|{{{national_motto|}}}}}|[[Category:Pages using infobox country with syntax problems|C]]
}}{{#if:{{both|{{{national_anthem|}}}|{{{anthem|}}}}}|[[Category:Pages using infobox country with syntax problems|D]]
}}{{#if:{{both|{{{other_symbol|}}}|{{{text_symbol|}}}}}|[[Category:Pages using infobox country with syntax problems|E]]
}}{{#if:{{both|{{{other_symbol_type|}}}|{{{text_symbol_type|}}}}}|[[Category:Pages using infobox country with syntax problems|F]]
}}{{#if:{{both|{{{largest_city|}}}|{{{largest_settlement|}}}}}|[[Category:Pages using infobox country with syntax problems|G]]
}}{{#if:{{both|{{{recognized_languages|}}}|{{{recognised_languages|}}}}}|[[Category:Pages using infobox country with syntax problems|H]]
}}{{#if:{{both|{{{recognized_national_languages|}}}|{{{recognised_national_languages|}}}}}{{both|{{{recognized_regional_languages|}}}|{{{recognised_regional_languages|}}}}}|[[Category:Pages using infobox country with syntax problems|I]]
}}{{#if:{{{official_languages|}}}||{{#if:{{{recognized_languages|}}}{{{recognised_languages|}}}{{{recognized_national_languages|}}}{{{recognised_national_languages|}}}{{{recognized_regional_languages|}}}{{{recognised_regional_languages|}}}|[[Category:Pages using infobox country with syntax problems|J]]}}
}}{{#if:{{both|{{{area_km2|}}}|{{{area_ha|}}}}}{{both|{{{area_land_km2|}}}|{{{area_land_ha|}}}}}{{both|{{{area_water_km2|}}}|{{{area_water_ha|}}}}}|[[Category:Pages using infobox country with syntax problems|K]]
}}{{#if:{{both|{{{DST|}}}|{{{time_zone_DST|}}}}}|[[Category:Pages using infobox country with syntax problems|L]]
}}{{#if:{{{time_zone|}}}{{{utc_offset|}}}||{{#if:{{{time_zone_DST|}}}{{{utc_offset_DST|}}}|[[Category:Pages using infobox country with syntax problems|M]]}}
}}{{#if:{{both|{{{sovereignty_type|}}}|{{{established|}}} }}|[[Category:Pages using infobox country with syntax problems|O]]
}}{{#if:{{{languages|}}}|{{#if:{{{languages_type|}}}||[[Category:Pages using infobox country with syntax problems|P]]}}
}}{{#if:{{{languages2|}}}|{{#if:{{{languages2_type|}}}||[[Category:Pages using infobox country with syntax problems|P]]}}
}}{{#if:{{{flag_type|}}}|[[Category:Pages using infobox country or infobox former country with the flag caption or type parameters|T{{PAGENAME}}]]
}}{{#if:{{{flag_caption|}}}|[[Category:Pages using infobox country or infobox former country with the flag caption or type parameters|C{{PAGENAME}}]]
}}{{#if:{{{symbol_type|}}}|[[Category:Pages using infobox country or infobox former country with the symbol caption or type parameters|T{{PAGENAME}}]]
}}{{#if:{{{symbol_caption|}}}|[[Category:Pages using infobox country or infobox former country with the symbol caption or type parameters|C{{PAGENAME}}]]
}}}}<!--
Tracking categories from merge with {{infobox former country}}. After all cats are empty/have been checked, these can be removed.
-->{{#if:{{{status_text|}}}|{{#ifeq:{{ucfirst:{{{status|}}}}}|Colony|{{main other|[[Category:Former country articles using status text with Colony or Exile]]}}|{{#ifeq:{{ucfirst:{{{status|}}}}}|Exile|{{main other|[[Category:Former country articles using status text with Colony or Exile]]}}}}}}
}}<!--End of former country tracking cats--><noinclude>
{{documentation}}
</noinclude>
be47d674190a41bd16abfd73bfb38394b5c704f2
Template:Infobox country/imagetable
10
325
680
679
2023-09-14T11:34:20Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{#if:{{both|{{{image1a|}}}{{{image1b|}}}|{{{image2|}}}}}|
<div class="noresize" style="display:table; width:100%;">
<div style="display:table-cell; vertical-align:middle; padding-left:5px;">
{{#if:{{{image1a|}}}|<div style="padding-bottom:3px;">{{{image1a|}}}</div>}}{{#if:{{{image1b|}}}|<div style="padding: 2px 0px 3px;">{{{image1b|}}}</div>}}
<div>{{{caption1|}}}</div>
</div>
<div style="display:table-cell; vertical-align:middle; padding: 0px 5px;">
<div style="padding-bottom:3px;">{{{image2|}}}</div>
<div>{{{caption2|}}}</div>
</div>
</div>
<!--else:-->|
{{#if:{{{image1a|}}}{{{image1b|}}}|
<div class="noresize" style="display:table; width:100%;">
{{#if:{{{image1a|}}}|<div style="display:table-cell; vertical-align:middle; padding: 0px 5px 3px;">{{{image1a|}}}</div>}}{{#if:{{{image1b|}}}|<div style="display:table-cell; vertical-align:middle; padding: 0px 5px 3px 0px;">{{{image1b|}}}</div>}}
</div>
<div>{{{caption1}}}</div>
}}
{{#if:{{{image2|}}}|
<div style="padding: 0px 5px;">
<div style="padding-bottom:3px;">{{{image2|}}}</div>
<div>{{{caption2}}}</div>
</div>
}}
}}<noinclude>
{{documentation|content=
This subtemplate is used to simplify the code of {{tl|infobox country}}. It should not be used directly.
}}</noinclude>
4094e7b538bb7456c09fbbfcdf9cf4e30e1b6b5b
Template:Infobox country/multirow
10
326
682
681
2023-09-14T11:34:21Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{infobox | child = yes | decat=yes
| rowclass25 = mergedrow
| label25 = <div style="text-indent:-0.9em;margin-left:1.2em;font-weight:normal;">• {{{1|}}}</div>
| data25 = {{{2|}}}
| rowclass26 = mergedrow
| label26 = <div style="text-indent:-0.9em;margin-left:1.2em;font-weight:normal;">• {{{3|}}}</div>
| data26 = {{{4|}}}
| rowclass27 = mergedrow
| label27 = <div style="text-indent:-0.9em;margin-left:1.2em;font-weight:normal;">• {{{5|}}}</div>
| data27 = {{{6|}}}
| rowclass28 = mergedrow
| label28 = <div style="text-indent:-0.9em;margin-left:1.2em;font-weight:normal;">• {{{7|}}}</div>
| data28 = {{{8|}}}
| rowclass29 = mergedrow
| label29 = <div style="text-indent:-0.9em;margin-left:1.2em;font-weight:normal;">• {{{9|}}}</div>
| data29 = {{{10|}}}
| rowclass30 = mergedrow
| label30 = <div style="text-indent:-0.9em;margin-left:1.2em;font-weight:normal;">• {{{11|}}}</div>
| data30 = {{{12|}}}
| rowclass31 = mergedrow
| label31 = <div style="text-indent:-0.9em;margin-left:1.2em;font-weight:normal;">• {{{13|}}}</div>
| data31 = {{{14|}}}
| rowclass32 = mergedrow
| label32 = <div style="text-indent:-0.9em;margin-left:1.2em;font-weight:normal;">• {{{15|}}}</div>
| data32 = {{{16|}}}
| rowclass33 = mergedrow
| label33 = <div style="text-indent:-0.9em;margin-left:1.2em;font-weight:normal;">• {{{17|}}}</div>
| data33 = {{{18|}}}
| rowclass34 = mergedrow
| label34 = <div style="text-indent:-0.9em;margin-left:1.2em;font-weight:normal;">• {{{19|}}}</div>
| data34 = {{{20|}}}
| rowclass35 = mergedrow
| label35 = <div style="text-indent:-0.9em;margin-left:1.2em;font-weight:normal;">• {{{21|}}}</div>
| data35 = {{{22|}}}
| rowclass36 = mergedrow
| label36 = <div style="text-indent:-0.9em;margin-left:1.2em;font-weight:normal;">• {{{23|}}}</div>
| data36 = {{{24|}}}
| rowclass37 = mergedrow
| label37 = <div style="text-indent:-0.9em;margin-left:1.2em;font-weight:normal;">• {{{25|}}}</div>
| data37 = {{{26|}}}
| rowclass38 = mergedrow
| label38 = <div style="text-indent:-0.9em;margin-left:1.2em;font-weight:normal;">• {{{27|}}}</div>
| data38 = {{{28|}}}
| rowclass39 = mergedrow
| label39 = <div style="text-indent:-0.9em;margin-left:1.2em;font-weight:normal;">• {{{29|}}}</div>
| data39 = {{{30|}}}
| rowclass40 = mergedrow
| label40 = <div style="text-indent:-0.9em;margin-left:1.2em;font-weight:normal;">• {{{31|}}}</div>
| data40 = {{{32|}}}
| rowclass41 = mergedrow
| label41 = <div style="text-indent:-0.9em;margin-left:1.2em;font-weight:normal;">• {{{33|}}}</div>
| data41 = {{{34|}}}
| rowclass42 = mergedrow
| label42 = <div style="text-indent:-0.9em;margin-left:1.2em;font-weight:normal;">• {{{35|}}}</div>
| data42 = {{{36|}}}
| rowclass43 = mergedrow
| label43 = <div style="text-indent:-0.9em;margin-left:1.2em;font-weight:normal;">• {{{37|}}}</div>
| data43 = {{{38|}}}
| rowclass44 = mergedrow
| label44 = <div style="text-indent:-0.9em;margin-left:1.2em;font-weight:normal;">• {{{39|}}}</div>
| data44 = {{{40|}}}
}}<noinclude>
{{documentation|content=
This subtemplate is used to simplify the code of {{tl|infobox country}}. It should not be used directly. It can currently take up to 20 rows.
}}</noinclude>
52b488ce963e6b79723ab148c9a82507ed2b4078
Template:Infobox country/styles.css
10
327
684
683
2023-09-14T11:34:21Z
Ilovethehitgameomori
2
1 revision imported
sanitized-css
text/css
/* {{pp|small=y}} */
.ib-country {
border-collapse: collapse;
line-height: 1.2em;
}
/* TODO split definitions to appropriate class names when live from HTML element */
.ib-country td,
.ib-country th {
border-top: 1px solid #a2a9b1;
padding: 0.4em 0.6em 0.4em 0.6em;
}
.ib-country .mergedtoprow .infobox-header,
.ib-country .mergedtoprow .infobox-label,
.ib-country .mergedtoprow .infobox-data,
.ib-country .mergedtoprow .infobox-full-data,
.ib-country .mergedtoprow .infobox-below {
border-top: 1px solid #a2a9b1;
padding: 0.4em 0.6em 0.2em 0.6em;
}
.ib-country .mergedrow .infobox-label,
.ib-country .mergedrow .infobox-data,
.ib-country .mergedrow .infobox-full-data {
border: 0;
padding: 0 0.6em 0.2em 0.6em;
}
.ib-country .mergedbottomrow .infobox-label,
.ib-country .mergedbottomrow .infobox-data,
.ib-country .mergedbottomrow .infobox-full-data {
border-top: 0;
border-bottom: 1px solid #a2a9b1;
padding: 0 0.6em 0.4em 0.6em;
}
.ib-country .infobox-header {
text-align: left;
}
.ib-country .infobox-above {
font-size: 125%;
line-height: 1.2;
}
.ib-country-names {
padding-top: 0.25em;
font-weight: normal;
}
.ib-country-name-style {
display: inline;
}
.ib-country .infobox-image {
padding: 0.5em 0;
}
.ib-country-anthem {
border-top: 1px solid #a2a9b1;
padding-top: 0.5em;
margin-top: 0.5em;
}
.ib-country-map-caption {
position: relative;
top: 0.3em;
}
.ib-country-largest,
.ib-country-lang {
font-weight: normal;
}
.ib-country-ethnic,
.ib-country-religion,
.ib-country-sovereignty {
font-weight: normal;
display: inline;
}
.ib-country-fake-li {
text-indent: -0.9em;
margin-left: 1.2em;
font-weight: normal;
}
.ib-country-fake-li2 {
text-indent: 0.5em;
margin-left: 1em;
font-weight: normal;
}
.ib-country-website {
line-height: 11pt;
}
.ib-country-map-caption3 {
position: relative;
top: 0.3em;
}
.ib-country-fn {
text-align: left;
margin: 0 auto;
}
.ib-country-fn-alpha {
list-style-type: lower-alpha;
margin-left: 1em;
}
.ib-country-fn-num {
margin-left: 1em;
}
3112a323cf9739e86afd52812cd38e196abfae7d
Template:Infobox country/formernext
10
328
686
685
2023-09-14T11:34:26Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{| style="width:95%; background: transparent; text-align:center; margin:0 auto; display:inline-table;"
|-
| style="text-align:center; border:0; padding-bottom:0"|<div id="before-after"></div> {{#if:{{{p1|}}}|'''Preceded by'''}} || style="text-align:center;border:0; padding-bottom:0;"| {{#if:{{{s1|}}}|'''Succeeded by'''}}
|-
| style="vertical-align:top; text-align:center; border:0;"| {{#if:{{{p1|}}} | <!--start subtable:-->{{{!}} style="width:100%; background: transparent; text-align:center; margin:0 auto; border:0;"
{{!}}-
{{!}}style="border:0; padding:0; vertical-align:middle;"{{!}} {{#if:{{{flag_p1|}}}|[[File:{{{flag_p1}}}|20px{{#ifeq:{{{border_p1}}}|no||{{!}}border}}|link=|alt=]]|{{#if:{{{image_p1|}}}|{{{image_p1}}}|[[File:Blank.png|22px|link=|alt=]]}}}}
{{!}}style="border:0; padding:0; vertical-align:middle; text-align:left;"{{!}} [[{{{p1}}}]]
{{!}}-
{{#if:{{{p2|}}} |
{{!}}style="border:0; padding:0; vertical-align:middle;"{{!}} {{#if:{{{flag_p2|}}}|[[File:{{{flag_p2}}}|20px{{#ifeq:{{{border_p2}}}|no||{{!}}border}}|link=|alt=]]|{{#if:{{{image_p2|}}}|{{{image_p2}}}|[[File:Blank.png|22px|link=|alt=]]}}}}
{{!}}style="border:0; padding:0; vertical-align:middle; text-align:left;"{{!}} [[{{{p2}}}]]}}
{{!}}-
{{#if:{{{p3|}}} |
{{!}}style="border:0; padding:0; vertical-align:middle;"{{!}} {{#if:{{{flag_p3|}}}|[[File:{{{flag_p3}}}|20px{{#ifeq:{{{border_p3}}}|no||{{!}}border}}|link=|alt=]]|{{#if:{{{image_p3|}}}|{{{image_p3}}}|[[File:Blank.png|22px|link=|alt=]]}}}}
{{!}}style="border:0; padding:0; vertical-align:middle; text-align:left;"{{!}} [[{{{p3}}}]]}}
{{!}}-
{{#if:{{{p4|}}} |
{{!}}style="border:0; padding:0; vertical-align:middle;"{{!}} {{#if:{{{flag_p4|}}}|[[File:{{{flag_p4}}}|20px{{#ifeq:{{{border_p4}}}|no||{{!}}border}}|link=|alt=]]|{{#if:{{{image_p4|}}}|{{{image_p4}}}|[[File:Blank.png|22px|link=|alt=]]}}}}
{{!}}style="border:0; padding:0; vertical-align:middle; text-align:left;"{{!}} [[{{{p4}}}]]}}
{{!}}-
{{#if:{{{p5|}}} |
{{!}}style="border:0; padding:0; vertical-align:middle;"{{!}} {{#if:{{{flag_p5|}}}|[[File:{{{flag_p5}}}|20px{{#ifeq:{{{border_p5}}}|no||{{!}}border}}|link=|alt=]]|{{#if:{{{image_p5|}}}|{{{image_p5}}}|[[File:Blank.png|22px|link=|alt=]]}}}}
{{!}}style="border:0; padding:0; vertical-align:middle; text-align:left;"{{!}} [[{{{p5}}}]]}}
{{!}}-
{{#if:{{{p6|}}} |
{{!}}style="border:0; padding:0; vertical-align:middle;"{{!}} {{#if:{{{flag_p6|}}}|[[File:{{{flag_p6}}}|20px{{#ifeq:{{{border_p6}}}|no||{{!}}border}}|link=|alt=]]|{{#if:{{{image_p6|}}}|{{{image_p6}}}|[[File:Blank.png|22px|link=|alt=]]}}}}
{{!}}style="border:0; padding:0; vertical-align:middle; text-align:left;"{{!}} [[{{{p6}}}]]}}
{{!}}-
{{#if:{{{p7|}}} |
{{!}}style="border:0; padding:0; vertical-align:middle;"{{!}} {{#if:{{{flag_p7|}}}|[[File:{{{flag_p7}}}|20px{{#ifeq:{{{border_p7}}}|no||{{!}}border}}|link=|alt=]]|{{#if:{{{image_p7|}}}|{{{image_p7}}}|[[File:Blank.png|22px|link=|alt=]]}}}}
{{!}}style="border:0; padding:0; vertical-align:middle; text-align:left;"{{!}} [[{{{p7}}}]]}}
{{!}}-
{{#if:{{{p8|}}} |
{{!}}style="border:0; padding:0; vertical-align:middle;"{{!}} {{#if:{{{flag_p8|}}}|[[File:{{{flag_p8}}}|20px{{#ifeq:{{{border_p8}}}|no||{{!}}border}}|link=|alt=]]|{{#if:{{{image_p8|}}}|{{{image_p8}}}|[[File:Blank.png|22px|link=|alt=]]}}}}
{{!}}style="border:0; padding:0; vertical-align:middle; text-align:left;"{{!}} [[{{{p8}}}]]}}
{{!}}-
{{#if:{{{p9|}}} |
{{!}}style="border:0; padding:0; vertical-align:middle;"{{!}} {{#if:{{{flag_p9|}}}|[[File:{{{flag_p9}}}|20px{{#ifeq:{{{border_p9}}}|no||{{!}}border}}|link=|alt=]]|{{#if:{{{image_p9|}}}|{{{image_p9}}}|[[File:Blank.png|22px|link=|alt=]]}}}}
{{!}}style="border:0; padding:0; vertical-align:middle; text-align:left;"{{!}} [[{{{p9}}}]]}}
{{!}}-
{{#if:{{{p10|}}} |
{{!}}style="border:0; padding:0; vertical-align:middle;"{{!}} {{#if:{{{flag_p10|}}}|[[File:{{{flag_p10}}}|20px{{#ifeq:{{{border_p10}}}|no||{{!}}border}}|link=|alt=]]|{{#if:{{{image_p10|}}}|{{{image_p10}}}|[[File:Blank.png|22px|link=|alt=]]}}}}
{{!}}style="border:0; padding:0; vertical-align:middle; text-align:left;"{{!}} [[{{{p10}}}]]}}
{{!}}-
{{#if:{{{p11|}}} |
{{!}}style="border:0; padding:0; vertical-align:middle;"{{!}} {{#if:{{{flag_p11|}}}|[[File:{{{flag_p11}}}|20px{{#ifeq:{{{border_p11}}}|no||{{!}}border}}|link=|alt=]]|{{#if:{{{image_p11|}}}|{{{image_p11}}}|[[File:Blank.png|22px|link=|alt=]]}}}}
{{!}}style="border:0; padding:0; vertical-align:middle; text-align:left;"{{!}} [[{{{p11}}}]]}}
{{!}}-
{{#if:{{{p12|}}} |
{{!}}style="border:0; padding:0; vertical-align:middle;"{{!}} {{#if:{{{flag_p12|}}}|[[File:{{{flag_p12}}}|20px{{#ifeq:{{{border_p12}}}|no||{{!}}border}}|link=|alt=]]|{{#if:{{{image_p12|}}}|{{{image_p12}}}|[[File:Blank.png|22px|link=|alt=]]}}}}
{{!}}style="border:0; padding:0; vertical-align:middle; text-align:left;"{{!}} [[{{{p12}}}]]}}
{{!}}-
{{#if:{{{p13|}}} |
{{!}}style="border:0; padding:0; vertical-align:middle;"{{!}} {{#if:{{{flag_p13|}}}|[[File:{{{flag_p13}}}|20px{{#ifeq:{{{border_p13}}}|no||{{!}}border}}|link=|alt=]]|{{#if:{{{image_p13|}}}|{{{image_p13}}}|[[File:Blank.png|22px|link=|alt=]]}}}}
{{!}}style="border:0; padding:0; vertical-align:middle; text-align:left;"{{!}} [[{{{p13}}}]]}}
{{!}}-
{{#if:{{{p14|}}} |
{{!}}style="border:0; padding:0; vertical-align:middle;"{{!}} {{#if:{{{flag_p14|}}}|[[File:{{{flag_p14}}}|20px{{#ifeq:{{{border_p14}}}|no||{{!}}border}}|link=|alt=]]|{{#if:{{{image_p14|}}}|{{{image_p14}}}|[[File:Blank.png|22px|link=|alt=]]}}}}
{{!}}style="border:0; padding:0; vertical-align:middle; text-align:left;"{{!}} [[{{{p14}}}]]}}
{{!}}-
{{#if:{{{p15|}}} |
{{!}}style="border:0; padding:0; vertical-align:middle;"{{!}} {{#if:{{{flag_p15|}}}|[[File:{{{flag_p15}}}|20px{{#ifeq:{{{border_p15}}}|no||{{!}}border}}|link=|alt=]]|{{#if:{{{image_p15|}}}|{{{image_p15}}}|[[File:Blank.png|22px|link=|alt=]]}}}}
{{!}}style="border:0; padding:0; vertical-align:middle; text-align:left;"{{!}} [[{{{p15}}}]]}}
{{!}}-
{{#if:{{{p16|}}} |
{{!}}style="border:0; padding:0; vertical-align:middle;"{{!}} {{#if:{{{flag_p16|}}}|[[File:{{{flag_p16}}}|20px{{#ifeq:{{{border_p16}}}|no||{{!}}border}}|link=|alt=]]|{{#if:{{{image_p16|}}}|{{{image_p16}}}|[[File:Blank.png|22px|link=|alt=]]}}}}
{{!}}style="border:0; padding:0; vertical-align:middle; text-align:left;"{{!}} [[{{{p16}}}]]}}
{{!}}-
{{#if:{{{p17|}}} |
{{!}}style="border:0; padding:0; vertical-align:middle;"{{!}} {{#if:{{{flag_p17|}}}|[[File:{{{flag_p17}}}|20px{{#ifeq:{{{border_p17}}}|no||{{!}}border}}|link=|alt=]]|{{#if:{{{image_p17|}}}|{{{image_p17}}}|[[File:Blank.png|22px|link=|alt=]]}}}}
{{!}}style="border:0; padding:0; vertical-align:middle; text-align:left;"{{!}} [[{{{p17}}}]]}}
{{!}}-
{{#if:{{{p18|}}} |
{{!}}style="border:0; padding:0; vertical-align:middle;"{{!}} {{#if:{{{flag_p18|}}}|[[File:{{{flag_p18}}}|20px{{#ifeq:{{{border_p18}}}|no||{{!}}border}}|link=|alt=]]|{{#if:{{{image_p18|}}}|{{{image_p18}}}|[[File:Blank.png|22px|link=|alt=]]}}}}
{{!}}style="border:0; padding:0; vertical-align:middle; text-align:left;"{{!}} [[{{{p18}}}]]}}
{{!}}-
{{#if:{{{p19|}}} |
{{!}}style="border:0; padding:0; vertical-align:middle;"{{!}} {{#if:{{{flag_p19|}}}|[[File:{{{flag_p19}}}|20px{{#ifeq:{{{border_p19}}}|no||{{!}}border}}|link=|alt=]]|{{#if:{{{image_p19|}}}|{{{image_p19}}}|[[File:Blank.png|22px|link=|alt=]]}}}}
{{!}}style="border:0; padding:0; vertical-align:middle; text-align:left;"{{!}} [[{{{p19}}}]]}}
{{!}}-
{{#if:{{{p20|}}} |
{{!}}style="border:0; padding:0; vertical-align:middle;"{{!}} {{#if:{{{flag_p20|}}}|[[File:{{{flag_p20}}}|20px{{#ifeq:{{{border_p20}}}|no||{{!}}border}}|link=|alt=]]|{{#if:{{{image_p20|}}}|{{{image_p20}}}|[[File:Blank.png|22px|link=|alt=]]}}}}
{{!}}style="border:0; padding:0; vertical-align:middle; text-align:left;"{{!}} [[{{{p20}}}]]}}
{{!}}-
{{#if:{{{p21|}}} |
{{!}}style="border:0; padding:0; vertical-align:middle;"{{!}} {{#if:{{{flag_p21|}}}|[[File:{{{flag_p21}}}|20px{{#ifeq:{{{border_p21}}}|no||{{!}}border}}|link=|alt=]]|{{#if:{{{image_p21|}}}|{{{image_p21}}}|[[File:Blank.png|22px|link=|alt=]]}}}}
{{!}}style="border:0; padding:0; vertical-align:middle; text-align:left;"{{!}} [[{{{p21}}}]]}}
<!--end subtable:-->
{{!}}}
}}
| style="vertical-align:top; text-align:center;border:0;"| {{#if:{{{s1|}}} | <!--start subtable:-->{{{!}} style="width:92%; background:transparent; text-align:center; margin:0 auto; border:0;"
{{!}}-
{{!}}style="border:0; padding:0; vertical-align:middle; text-align:right;"{{!}} [[{{{s1}}}]]
{{!}}style="border:0; padding:0; vertical-align:middle;"{{!}} {{#if:{{{flag_s1|}}}|[[File:{{{flag_s1}}}|20px{{#ifeq:{{{border_s1}}}|no||{{!}}border}}|link=|alt=]]|{{#if:{{{image_s1|}}}|{{{image_s1}}}|[[File:Blank.png|22px|link=|alt=]]}}}}
{{!}}-
{{#if:{{{s2|}}} |
{{!}}style="border:0; padding:0; vertical-align:middle; text-align:right;"{{!}} [[{{{s2}}}]]
{{!}}style="border:0; padding:0; vertical-align:middle;"{{!}} {{#if:{{{flag_s2|}}}|[[File:{{{flag_s2}}}|20px{{#ifeq:{{{border_s2}}}|no||{{!}}border}}|link=|alt=]]|{{#if:{{{image_s2|}}}|{{{image_s2}}}|[[File:Blank.png|22px|link=|alt=]]}}}}}}
{{!}}-
{{#if:{{{s3|}}} |
{{!}}style="border:0; padding:0; vertical-align:middle; text-align:right;"{{!}} [[{{{s3}}}]]
{{!}}style="border:0; padding:0; vertical-align:middle;"{{!}} {{#if:{{{flag_s3|}}}|[[File:{{{flag_s3}}}|20px{{#ifeq:{{{border_s3}}}|no||{{!}}border}}|link=|alt=]]|{{#if:{{{image_s3|}}}|{{{image_s3}}}|[[File:Blank.png|22px|link=|alt=]]}}}}}}
{{!}}-
{{#if:{{{s4|}}} |
{{!}}style="border:0; padding:0; vertical-align:middle; text-align:right;"{{!}} [[{{{s4}}}]]
{{!}}style="border:0; padding:0; vertical-align:middle;"{{!}} {{#if:{{{flag_s4|}}}|[[File:{{{flag_s4}}}|20px{{#ifeq:{{{border_s4}}}|no||{{!}}border}}|link=|alt=]]|{{#if:{{{image_s4|}}}|{{{image_s4}}}|[[File:Blank.png|22px|link=|alt=]]}}}}}}
{{!}}-
{{#if:{{{s5|}}} |
{{!}}style="border:0; padding:0; vertical-align:middle; text-align:right;"{{!}} [[{{{s5}}}]]
{{!}}style="border:0; padding:0; vertical-align:middle;"{{!}} {{#if:{{{flag_s5|}}}|[[File:{{{flag_s5}}}|20px{{#ifeq:{{{border_s5}}}|no||{{!}}border}}|link=|alt=]]|{{#if:{{{image_s5|}}}|{{{image_s5}}}|[[File:Blank.png|22px|link=|alt=]]}}}}}}
{{!}}-
{{#if:{{{s6|}}} |
{{!}}style="border:0; padding:0; vertical-align:middle; text-align:right;"{{!}} [[{{{s6}}}]]
{{!}}style="border:0; padding:0; vertical-align:middle;"{{!}} {{#if:{{{flag_s6|}}}|[[File:{{{flag_s6}}}|20px{{#ifeq:{{{border_s6}}}|no||{{!}}border}}|link=|alt=]]|{{#if:{{{image_s6|}}}|{{{image_s6}}}|[[File:Blank.png|22px|link=|alt=]]}}}}}}
{{!}}-
{{#if:{{{s7|}}} |
{{!}}style="border:0; padding:0; vertical-align:middle; text-align:right;"{{!}} [[{{{s7}}}]]
{{!}}style="border:0; padding:0; vertical-align:middle;"{{!}} {{#if:{{{flag_s7|}}}|[[File:{{{flag_s7}}}|20px{{#ifeq:{{{border_s7}}}|no||{{!}}border}}|link=|alt=]]|{{#if:{{{image_s7|}}}|{{{image_s7}}}|[[File:Blank.png|22px|link=|alt=]]}}}}}}
{{!}}-
{{#if:{{{s8|}}} |
{{!}}style="border:0; padding:0; vertical-align:middle; text-align:right;"{{!}} [[{{{s8}}}]]
{{!}}style="border:0; padding:0; vertical-align:middle;"{{!}} {{#if:{{{flag_s8|}}}|[[File:{{{flag_s8}}}|20px{{#ifeq:{{{border_s8}}}|no||{{!}}border}}|link=|alt=]]|{{#if:{{{image_s8|}}}|{{{image_s8}}}|[[File:Blank.png|22px|link=|alt=]]}}}}}}
{{!}}-
{{#if:{{{s9|}}} |
{{!}}style="border:0; padding:0; vertical-align:middle; text-align:right;"{{!}} [[{{{s9}}}]]
{{!}}style="border:0; padding:0; vertical-align:middle;"{{!}} {{#if:{{{flag_s9|}}}|[[File:{{{flag_s9}}}|20px{{#ifeq:{{{border_s9}}}|no||{{!}}border}}|link=|alt=]]|{{#if:{{{image_s9|}}}|{{{image_s9}}}|[[File:Blank.png|22px|link=|alt=]]}}}}}}
{{!}}-
{{#if:{{{s10|}}} |
{{!}}style="border:0; padding:0; vertical-align:middle; text-align:right;"{{!}} [[{{{s10}}}]]
{{!}}style="border:0; padding:0; vertical-align:middle;"{{!}} {{#if:{{{flag_s10|}}}|[[File:{{{flag_s10}}}|20px{{#ifeq:{{{border_s10}}}|no||{{!}}border}}|link=|alt=]]|{{#if:{{{image_s10|}}}|{{{image_s10}}}|[[File:Blank.png|22px|link=|alt=]]}}}}}}
{{!}}-
{{#if:{{{s11|}}} |
{{!}}style="border:0; padding:0; vertical-align:middle; text-align:right;"{{!}} [[{{{s11}}}]]
{{!}}style="border:0; padding:0; vertical-align:middle;"{{!}} {{#if:{{{flag_s11|}}}|[[File:{{{flag_s11}}}|20px{{#ifeq:{{{border_s11}}}|no||{{!}}border}}|link=|alt=]]|{{#if:{{{image_s11|}}}|{{{image_s11}}}|[[File:Blank.png|22px|link=|alt=]]}}}}}}
{{!}}-
{{#if:{{{s12|}}} |
{{!}}style="border:0; padding:0; vertical-align:middle; text-align:right;"{{!}} [[{{{s12}}}]]
{{!}}style="border:0; padding:0; vertical-align:middle;"{{!}} {{#if:{{{flag_s12|}}}|[[File:{{{flag_s12}}}|20px{{#ifeq:{{{border_s12}}}|no||{{!}}border}}|link=|alt=]]|{{#if:{{{image_s12|}}}|{{{image_s12}}}|[[File:Blank.png|22px|link=|alt=]]}}}}}}
{{!}}-
{{#if:{{{s13|}}} |
{{!}}style="border:0; padding:0; vertical-align:middle; text-align:right;"{{!}} [[{{{s13}}}]]
{{!}}style="border:0; padding:0; vertical-align:middle;"{{!}} {{#if:{{{flag_s13|}}}|[[File:{{{flag_s13}}}|20px{{#ifeq:{{{border_s13}}}|no||{{!}}border}}|link=|alt=]]|{{#if:{{{image_s13|}}}|{{{image_s13}}}|[[File:Blank.png|22px|link=|alt=]]}}}}}}
{{!}}-
{{#if:{{{s14|}}} |
{{!}}style="border:0; padding:0; vertical-align:middle; text-align:right;"{{!}} [[{{{s14}}}]]
{{!}}style="border:0; padding:0; vertical-align:middle;"{{!}} {{#if:{{{flag_s14|}}}|[[File:{{{flag_s14}}}|20px{{#ifeq:{{{border_s14}}}|no||{{!}}border}}|link=|alt=]]|{{#if:{{{image_s14|}}}|{{{image_s14}}}|[[File:Blank.png|22px|link=|alt=]]}}}}}}
{{!}}-
{{#if:{{{s15|}}} |
{{!}}style="border:0; padding:0; vertical-align:middle; text-align:right;"{{!}} [[{{{s15}}}]]
{{!}}style="border:0; padding:0; vertical-align:middle;"{{!}} {{#if:{{{flag_s15|}}}|[[File:{{{flag_s15}}}|20px{{#ifeq:{{{border_s15}}}|no||{{!}}border}}|link=|alt=]]|{{#if:{{{image_s15|}}}|{{{image_s15}}}|[[File:Blank.png|22px|link=|alt=]]}}}}}}
{{!}}-
{{#if:{{{s16|}}} |
{{!}}style="border:0; padding:0; vertical-align:middle; text-align:right;"{{!}} [[{{{s16}}}]]
{{!}}style="border:0; padding:0; vertical-align:middle;"{{!}} {{#if:{{{flag_s16|}}}|[[File:{{{flag_s16}}}|20px{{#ifeq:{{{border_s16}}}|no||{{!}}border}}|link=|alt=]]|{{#if:{{{image_s16|}}}|{{{image_s16}}}|[[File:Blank.png|22px|link=|alt=]]}}}}}}
{{!}}-
{{#if:{{{s17|}}} |
{{!}}style="border:0; padding:0; vertical-align:middle; text-align:right;"{{!}} [[{{{s17}}}]]
{{!}}style="border:0; padding:0; vertical-align:middle;"{{!}} {{#if:{{{flag_s17|}}}|[[File:{{{flag_s17}}}|20px{{#ifeq:{{{border_s17}}}|no||{{!}}border}}|link=|alt=]]|{{#if:{{{image_s17|}}}|{{{image_s17}}}|[[File:Blank.png|22px|link=|alt=]]}}}}}}
{{!}}-
{{#if:{{{s18|}}} |
{{!}}style="border:0; padding:0; vertical-align:middle; text-align:right;"{{!}} [[{{{s18}}}]]
{{!}}style="border:0; padding:0; vertical-align:middle;"{{!}} {{#if:{{{flag_s18|}}}|[[File:{{{flag_s18}}}|20px{{#ifeq:{{{border_s18}}}|no||{{!}}border}}|link=|alt=]]|{{#if:{{{image_s18|}}}|{{{image_s18}}}|[[File:Blank.png|22px|link=|alt=]]}}}}}}
{{!}}-
{{#if:{{{s19|}}} |
{{!}}style="border:0; padding:0; vertical-align:middle; text-align:right;"{{!}} [[{{{s19}}}]]
{{!}}style="border:0; padding:0; vertical-align:middle;"{{!}} {{#if:{{{flag_s19|}}}|[[File:{{{flag_s19}}}|20px{{#ifeq:{{{border_s19}}}|no||{{!}}border}}|link=|alt=]]|{{#if:{{{image_s19|}}}|{{{image_s19}}}|[[File:Blank.png|22px|link=|alt=]]}}}}}}
{{!}}-
{{#if:{{{s20|}}} |
{{!}}style="border:0; padding:0; vertical-align:middle; text-align:right;"{{!}} [[{{{s20}}}]]
{{!}}style="border:0; padding:0; vertical-align:middle;"{{!}} {{#if:{{{flag_s20|}}}|[[File:{{{flag_s20}}}|20px{{#ifeq:{{{border_s20}}}|no||{{!}}border}}|link=|alt=]]|{{#if:{{{image_s20|}}}|{{{image_s20}}}|[[File:Blank.png|22px|link=|alt=]]}}}}}}
{{!}}-
{{#if:{{{s21|}}} |
{{!}}style="border:0; padding:0; vertical-align:middle; text-align:right;"{{!}} [[{{{s21}}}]]
{{!}}style="border:0; padding:0; vertical-align:middle;"{{!}} {{#if:{{{flag_s21|}}}|[[File:{{{flag_s21}}}|20px{{#ifeq:{{{border_s21}}}|no||{{!}}border}}|link=|alt=]]|{{#if:{{{image_s21|}}}|{{{image_s21}}}|[[File:Blank.png|22px|link=|alt=]]}}}}}}
<!--end subtable:-->
<!--end subtable:-->
{{!}}}
}}
<!--end subtable:-->
{{!}}}<noinclude>
{{documentation|content=
This subtemplate is used to simplify the code of {{tl|infobox country}}. It should not be used directly. It can currently handle up to 21 flags.
}}</noinclude>
05a74d48da51cce78e3518579c2af4cd1e699e4a
Template:Infobox country/status text
10
329
688
687
2023-09-14T11:34:29Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{#if:{{{status_text|}}} |{{{status_text}}} |{{#switch:{{ucfirst:{{{status|}}}}}
|Empire=<!--Empire-->
|Nomadic empire|Nomadic Empire=[[Nomadic empire]]
|Ancient Chinese state |Ancient Chinese State=[[Ancient Chinese state]]
|Federation |Federal=<!--Federation-->
|Confederation=<!--Confederation-->
|State union |State Union |Union=<!--State union-->
|Special |Special territory=<!--Special territory-->
|Unrecognized state |Unrecognised state |Unrecognized State |Unrecognised State
|Unrecognized |Unrecognised=[[List of states with limited recognition|Unrecognized state]]
|City-state |City-State |City state |City State
|City={{#if:{{{empire|}}}
| {{#switch:{{{empire|}}} |Holy Roman Empire |HRE=[[Free Imperial City]] of the [[Holy Roman Empire]] {{#if:{{{year_end|}}}|{{#ifexpr:{{{year_end}}}>1806|<br/>(until 1806)}}|}} |#default=City-state {{#if:{{{empire|}}}|of [[{{{empire}}}]]|}} }}
|<!--City-state-->
}}
|Commonwealth realm |Commonwealth Realm=[[Commonwealth Realm]]
|League of Nations Mandate |League of Nations
|Mandate={{#if:{{{empire|}}}
| [[League of Nations mandate|Mandate]] of {{#switch:{{{empire}}} |United Kingdom |UK=the [[United Kingdom]] |#default={{#ifexist:{{{empire}}}|[[{{{empire}}}]]|{{{empire}}}}} }}
| [[League of Nations mandate]]
}}
|United Nations Trust Territory| UN Trust Territory
|Trust Territory=[[United Nations Trust Territories|Trust Territory]]<!--
-->{{#if:{{{empire|}}} | of {{#switch:{{{empire}}} |United Kingdom |UK=the [[United Kingdom]] |United States |US |USA=the [[United States]] |#default={{#ifexist:{{{empire}}}|[[{{{empire}}}]]|{{{empire}}}}} }} }}
|Protectorate=Protectorate of <!--
-->{{#if:{{{empire|}}}
|{{#switch:{{{empire}}}
|United Kingdom |UK=the [[United Kingdom]]
|United States |US |USA=the [[United States]] |#default={{#ifexist:{{{empire}}}|[[{{{empire}}}]]|{{{empire}}}}}
}}
|whom? {{#if:{{{_noautocat|<noinclude>yes</noinclude>}}}||[[Category:Former country articles requiring maintenance|S]]}}
}}
|Client |Client state |Client State |Puppet |Puppet-state
|Puppet state={{#if:{{{empire|}}}
| {{#switch:{{{empire}}} |First French Empire |France=[[French client republic|Client]] of the [[First French Empire]] |#default=[[Puppet state]] of {{#ifexist:{{{empire}}}|[[{{{empire}}}]]|{{{empire}}}}} }}
| Puppet state ''of whom?'' {{#if:{{{_noautocat|<noinclude>yes</noinclude>}}}||[[Category:Former country articles requiring maintenance|S]]}}
}}
|Vassal={{#switch:{{{empire|}}} |Holy Roman Empire |HRE=[[States of the Holy Roman Empire|State]] of the [[Holy Roman Empire]] {{#if:{{{year_end|}}}|{{#ifexpr:{{{year_end}}}>1806|(until 1806)}}|}} |#default=Vassal{{#if:{{{empire|}}}| of {{{empire}}}| ''of whom?'' {{#if:{{{_noautocat|<noinclude>yes</noinclude>}}}||[[Category:Former country articles requiring maintenance|S]]}}}} }}
|Fief={{#switch:{{{empire|}}} |#default=Fief{{#if:{{{empire|}}}| of {{{empire}}}| ''of whom?'' {{#if:{{{_noautocat|<noinclude>yes</noinclude>}}}||[[Category:Former country articles requiring maintenance|S]]}}}} }}
|Abbey={{#switch:{{{empire|}}} |Holy Roman Empire |HRE=[[Imperial Abbey]] of the [[Holy Roman Empire]] {{Main other|[[Category:Imperial abbeys|{{{common_name}}}]]}} |#default=Abbey{{#if:{{{empire|}}}| of {{{empire}}}| ''of whom?'' {{#if:{{{_noautocat|<noinclude>yes</noinclude>}}}||[[Category:Former country articles requiring maintenance|S]]}}}} }}
|Satellite state |Satellite State
|Satellite= Satellite state of the [[Soviet Union]]
|Colony={{#switch:{{ucfirst:{{{empire}}}}}
|United Kingdom |UK |British Empire |Britain=[[Territorial evolution of the British Empire|British colony]]
|England=[[English overseas possessions|English colony]]
|France |First French Empire| French Empire=[[French colonial empire|French colony]]
|NL |Netherlands |The Netherlands=[[Dutch Empire|Dutch colony]]
|Belgium=[[Belgian colonial empire|Belgian colony]]
|Spain |Spanish Empire=[[Spanish Empire|Spanish colony]]
|Portugal=[[Portuguese Empire|Portuguese colony]]
|Germany |German Empire=[[German colonial empire|German colony]]
|Italy=[[Italian Empire|Italian colony]]
|Sweden=[[Swedish overseas colonies|Swedish colony]]
|Denmark=[[Danish colonial empire|Danish colony]]
|Norway=[[Norwegian Empire|Norwegian colony]]
|Russia=[[Russian Empire|Russian colony]]
|Japan=[[Empire of Japan|Japanese colony]]
|#default=Colony ({{#if:{{{empire|}}} |{{{empire}}}) |''of whom?'') {{#if:{{{_noautocat|<noinclude>yes</noinclude>}}}||[[Category:Former country articles requiring maintenance|S]]}} }}
}}
|Provisional Government |Provisional government
|Provisional=[[Provisional government]]
|Exiled Government |Exiled government
|Exile={{#if:{{{year_exile_start|}}}
| [[Government in exile|In exile]] {{#if:{{{year_exile_end|}}} |({{{year_exile_start}}}{{spaced ndash}}{{{year_exile_end}}}) |since {{{year_exile_start}}} }}
| [[Government in exile]]
}}
|#default={{{status}}}
}}
}}<noinclude>
{{documentation|content=
This subtemplate is used to simplify the code of {{tl|infobox country}}. It should not be used directly.
}}</noinclude>
4f904d43bb6c4d628d19a39a391cc105027b09bf
Module:Documentation/styles.css
828
319
690
664
2023-09-14T11:34:34Z
Ilovethehitgameomori
2
1 revision imported
sanitized-css
text/css
/* {{pp|small=yes}} */
.documentation,
.documentation-metadata {
border: 1px solid #a2a9b1;
background-color: #ecfcf4;
clear: both;
}
.documentation {
margin: 1em 0 0 0;
padding: 1em;
}
.documentation-metadata {
margin: 0.2em 0; /* same margin left-right as .documentation */
font-style: italic;
padding: 0.4em 1em; /* same padding left-right as .documentation */
}
.documentation-startbox {
padding-bottom: 3px;
border-bottom: 1px solid #aaa;
margin-bottom: 1ex;
}
.documentation-heading {
font-weight: bold;
font-size: 125%;
}
.documentation-clear { /* Don't want things to stick out where they shouldn't. */
clear: both;
}
.documentation-toolbar {
font-style: normal;
font-size: 85%;
}
ce0e629c92e3d825ab9fd927fe6cc37d9117b6cb
2065
690
2023-09-14T20:56:10Z
Ilovethehitgameomori
2
1 revision imported from [[:dev:Module:Documentation/styles.css]]
sanitized-css
text/css
/* {{pp|small=yes}} */
.documentation,
.documentation-metadata {
border: 1px solid #a2a9b1;
background-color: #ecfcf4;
clear: both;
}
.documentation {
margin: 1em 0 0 0;
padding: 1em;
}
.documentation-metadata {
margin: 0.2em 0; /* same margin left-right as .documentation */
font-style: italic;
padding: 0.4em 1em; /* same padding left-right as .documentation */
}
.documentation-startbox {
padding-bottom: 3px;
border-bottom: 1px solid #aaa;
margin-bottom: 1ex;
}
.documentation-heading {
font-weight: bold;
font-size: 125%;
}
.documentation-clear { /* Don't want things to stick out where they shouldn't. */
clear: both;
}
.documentation-toolbar {
font-style: normal;
font-size: 85%;
}
ce0e629c92e3d825ab9fd927fe6cc37d9117b6cb
Template:Infobox country/doc
10
330
692
691
2023-09-14T11:34:44Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{#ifeq:{{{nested|no}}}|no|{{documentation subpage}}{{hatnote|{{tl|Infobox geopolitical organisation}} and {{tl|Infobox former country}} redirect here; related parameters and examples are included below.}}}}
{{High-use}}
{{Lua|Module:Infobox|Module:InfoboxImage|Module:Coordinates|Module:Check for unknown parameters}}
{{Uses TemplateStyles|Template:Infobox country/styles.css}}
This infobox template is used to generate an infobox for the right-hand side of two specific types of article: on a country or territory, or on a geopolitical organisation. Parameter syntax and examples are detailed in the collapsed sections immediately below.
__FORCETOC__
== Syntax ==
<!---------------------- Country/territory use ---------------------->
{{hidden begin |toggle=left |titlestyle=font-size:120%; |title=Country or territory |style=font-size:100%;}}
<syntaxhighlight lang="wikitext" style="overflow:auto;">
{{Infobox country
|micronation = <!--yes if a micronation-->
|conventional_long_name = <!--Formal or official full name of the country in English-->
|native_name = <!--Country's name (usually full name) in its official/defacto language(s), hence in italics (double quotemarks)-->
|common_name = <!--Common name in English (used for wikilinks, captions, and to produce a default iso3166 code)-->
|status = <!--Status of country, especially useful for micronations-->
|image_flag = <!--e.g. Flag of country.svg-->
|alt_flag = <!--alt text for flag (text shown when pointer hovers over flag)-->
|flag_border = <!--set to no to disable border around the flag-->
|image_flag2 = <!--e.g. Second-flag of country.svg-->
|alt_flag2 = <!--alt text for second flag-->
|flag2_border = <!--set to no to disable border around the flag-->
|image_coat = <!--e.g. Coat of arms of country.svg-->
|alt_coat = <!--alt text for coat of arms-->
|symbol_type = <!--emblem, seal, etc (if not a coat of arms)-->
|national_motto = <!--in inverted commas and wikilinked if link exists-->
|englishmotto = <!--English language version of motto-->
|national_anthem = <!--in inverted commas and wikilinked if link exists-->
|royal_anthem = <!--in inverted commas and wikilinked if link exists-->
|other_symbol_type = <!--Use if a further symbol exists, e.g. hymn-->
|other_symbol =
|image_map = <!--e.g. LocationCountry.svg-->
|loctext = <!--text description of location of country-->
|alt_map = <!--alt text for map-->
|map_caption = <!--Caption to place below map-->
|image_map_size = <!--Map size in number of pixels-->
|image_map2 = <!--Another map, if required-->
|alt_map2 = <!--alt text for second map-->
|map_caption2 = <!--Caption to place below second map-->
|image_map2_size = <!--Map size in number of pixels-->
|capital = <!--Name of country/territory's capital, wikilinked if link exists-->
|coordinates = <!-- Coordinates for capital, using {{tl|coord}} -->
|largest_city = <!--Name of country/territory's largest city. Use "capital" (without quotation marks) if it's the capital.-->
|largest_settlement_type = <!--Type of settlement if largest settlement not a city-->
|largest_settlement = <!--Name of largest settlement-->
|official_languages = <!--Languages recognised in legislation, constitution, etc-->
|national_languages = <!--Country/territory-wide languages recognised but not necessarily in country/territory-wide law, etc-->
|regional_languages = <!--Languages recognised or associated with particular regions within the country/territory-->
|languages_type = <!--Use to specify a further type of language, if not official, national or regional-->
|languages = <!--Languages of the further type-->
|languages_sub = <!--Is this further type of language a sub-item of the previous non-sub type? ("yes" or "no")-->
|languages2_type = <!--Another further type of language-->
|languages2 = <!--Languages of this second further type-->
|languages2_sub = <!--Is the second alternative type of languages a sub-item of the previous non-sub type? ("yes" or "no")-->
|ethnic_groups = <!--List/breakdown of ethnic groups within the country/territory-->
|ethnic_groups_year = <!--Year of ethnic groups data (if provided)-->
|ethnic_groups_ref = <!--(for any ref/s to associate with ethnic groups data)-->
|religion = <!--Religion-->
|religion_year = <!--Year of religion data (if provided)-->
|religion_ref = <!--(for any ref/s to associate with religion data)-->
|demonym = <!--Term/s describing those associated with the country/territory (e.g. "Belgian" for the country Belgium)-->
|government_type = <!--(often a compound multi-wikilinked term, e.g. "Federal semi-presidential constitutional republic", etc)-->
|leader_title1 = <!--(for a country, usually the head of state's (wikilinked) title, e.g. "President", "Monarch")-->
|leader_name1 =
|leader_title2 = <!--(could be "Vice President", otherwise "Prime Minster", etc, etc)-->
|leader_name2 =
|leader_title14 = <!--(up to 14 distinct leaders may be included)-->
|leader_name14 =
|legislature = <!--Name of the country/territory's governing body, e.g. "Parliament", "Congress", etc-->
|upper_house = <!--Name of governing body's upper house, if given (e.g. "Senate")-->
|lower_house = <!--Name of governing body's lower house, if given (e.g. "Chamber of Deputies")-->
|sovereignty_type = <!--Brief description of country/territory's status ("Independence [from...]", "Autonomous province [of...]", etc)-->
|sovereignty_note =
|established_event1 = <!--First key event in history of country/territory's status or formation-->
|established_date1 = <!--Date of first key event-->
|established_event2 = <!--Second key event-->
|established_date2 = <!--Date of second key event-->
|established_event13 = <!--(up to 13 distinct events may be included)-->
|established_date13 =
|area_rank =
|area = <!--Major area size (in [[Template:convert]] either km2 or sqmi first)-->
|area_km2 = <!--Major area size (in square km)-->
|area_sq_mi = <!--Area in square mi (requires area_km2)-->
|area_footnote = <!--Optional footnote for area-->
|percent_water =
|area_label = <!--Label under "Area" (default is "Total")-->
|area_label2 = <!--Label below area_label (optional)-->
|area_data2 = <!--Text after area_label2 (optional)-->
|population_estimate =
|population_estimate_rank =
|population_estimate_year =
|population_census =
|population_census_year =
|population_density_km2 =
|population_density_sq_mi =
|population_density_rank =
|nummembers = <!--An alternative to population for micronation-->
|GDP_PPP = <!--(Gross Domestic Product from Purchasing Power Parity)-->
|GDP_PPP_rank =
|GDP_PPP_year =
|GDP_PPP_per_capita =
|GDP_PPP_per_capita_rank =
|GDP_nominal =
|GDP_nominal_rank =
|GDP_nominal_year =
|GDP_nominal_per_capita =
|GDP_nominal_per_capita_rank =
|Gini = <!--(Gini measure of income inequality; input number only; valid values are between 0 and 100)-->
|Gini_ref = <!--(for any ref/s to associate with Gini number)-->
|Gini_rank =
|Gini_year =
|HDI_year = <!-- Please use the year to which the data refers, not the publication year-->
|HDI = <!--(Human Development Index; input number only; valid values are between 0 and 1)-->
|HDI_change = <!--increase/decrease/steady; rank change from previous year-->
|HDI_rank =
|HDI_ref = <!--(for any ref/s to associate with HDI number)-->
|currency = <!--Name/s of currency/ies used in country/territory-->
|currency_code = <!--ISO 4217 code/s for currency/ies (each usually three capital letters)-->
|time_zone = <!--e.g. GMT, PST, AST, etc, etc (wikilinked if possible)-->
|utc_offset = <!--in the form "+N", where N is number of hours offset-->
|time_zone_DST = <!--Link to DST (Daylight Saving Time) used, otherwise leave empty-->
|utc_offset_DST = <!--in the form "+N", where N is number of hours offset-->
|DST_note = <!--Optional note regarding DST use-->
|antipodes = <!--Place/s exactly on the opposite side of the world to country/territory-->
|date_format = <!--all-numeric date format and era, such as [[Common Era|CE]], [[Anno Domini|AD]], [[Hijri year|AH]], etc.; e.g. {{abbr|yyyy|year}}-{{abbr|mm|month}}-{{abbr|dd|day}} ([[Anno Domini|AD]]) -->
|drives_on = <!--"right" or "left" (side of road)-->
|cctld = <!--Internet country code top-level domain identifier (e.g. [[.br]], [[.de]], etc)-->
|iso3166code = <!--ISO code only; no extra text. Use to override default from common_name parameter above; omit using "omit".-->
|calling_code = <!--e.g. [[+1]], [[+531]], [[+44]], etc-->
|patron_saint = <!--Use patron_saints for multiple-->
|image_map3 = <!--Optional third map position, e.g. for use with reference to footnotes below it-->
|alt_map3 = <!--alt text for third map position-->
|footnote_a = <!--For any footnote <sup>a</sup> used above-->
|footnote_b = <!--For any footnote <sup>b</sup> used above-->
|footnote_h = <!--For any footnote <sup>h</sup> used above-->
|footnotes = <!--For any generic non-numbered footnotes-->
}}
</syntaxhighlight>
{{hidden end}}
{{hidden begin |toggle=left|title=France-specific parameters}}<!--(France-specific parameters)-->
Note: Now redundant.
<syntaxhighlight lang="wikitext">
|metropole =
|metropole_area =
|metropole_area_rank =
|metropole_area_magnitude =
|metropole_areami² =
|metropole_population =
|metropole_population_estimate_rank =
|foot =
|foot2 =
|foot3 =
|foot4 =
|foot5 =
</syntaxhighlight>
<!--(France-specific parameters)-->
{{smaller|* If, on a particular page, the default widths provided for the flag and coat-of-arms/symbol images produce an unsatisfactory result, use ''flag_width'' (as % or px) to specify the width to be used for the flag image; the remaining width is then assigned to the coat-of-arms/symbol (if included).}}
{{hidden end}}
<!------------------------- Geopolitical use -------------------------->
{{hidden begin |toggle=left |titlestyle=font-size:120%; |title=Geopolitical organization |style=font-size:100%;}}
<syntaxhighlight lang="wikitext" style="overflow:auto;">
{{Infobox geopolitical organization
|name = <!-- (in English) -->
|native_name = <!-- Long-form name in native or any/all non-English languages -->
|linking_name = <!-- For wikilinks, if diff from name -->
|image_flag = <!-- Flag image's filename -->
|alt_flag = <!-- alt text for flag-->
|flag_border = <!--set to no to disable border around the flag-->
|symbol_type = <!-- Symbol, Emblem, Logo, etc. -->
|image_symbol = <!-- Symbol image's filename -->
|alt_symbol = <!-- alt text for symbol -->
|symbol_width = <!-- Symbol image's width (default 85px) -->
|motto = <!-- "[motto]" -->
|englishmotto = <!--English language version of motto-->
|anthem = <!-- ''[anthem name]'' -->
|text_symbol_type = <!-- for other types of text symbol -->
|text_symbol = <!-- e.g. ''[hymn name]'' -->
|image_map = <!-- Map image's filename -->
|loctext = <!--text description of location of organization-->
|alt_map = <!-- alt text for map image -->
|map_width = <!-- Map image's width (default 250px) -->
|map_caption =
|org_type = <!-- e.g. Trade bloc -->
|membership_type = <!-- (default "Membership") -->
|membership = <!-- Type/s and/or number/s of members -->
|admin_center_type = <!-- e.g. "Administrative center" (default) -->
|admin_center = <!-- Location/s of administrative center/s -->
|languages_type = <!-- e.g. "[[Official language]]s" (default) -->
|languages =
|leader_title1 = <!-- e.g. "Chair", "President", etc. -->
|leader_name1 =
|leader_title2 = <!-- e.g. "Deputy chair", etc. -->
|leader_name2 =
|leader_title14 =
|leader_name14 =
|established = <!-- Usually a date, in lieu of event/s hereafter -->
|established_event1 =
|established_date1 =
|established_event2 =
|established_date2 =
|established_event9 =
|established_date9 =
|official_website =
|area_km2 = <!-- major area size (in sq_km) -->
|area_sq_mi = <!-- area in square mi (requires area_km2) -->
|area_footnote = <!-- optional footnote for area -->
|percent_water =
|area_label = <!-- label under "Area" (default is "Total") -->
|area_label2 = <!-- label below area_label (optional) -->
|area_dabodyalign = <!-- text after area_label2 (optional) -->
|population_estimate =
|population_estimate_year =
|population_density_km2 =
|population_density_sq_mi =
|GDP_PPP =
|GDP_PPP_rank =
|GDP_PPP_year =
|GDP_PPP_per_capita =
|GDP_nominal =
|GDP_nominal_year =
|GDP_nominal_per_capita =
|Gini = <!-- number only, 0-100 -->
|Gini_ref = <!-- for any ref/s to associate with Gini number -->
|Gini_year =
|HDI = <!-- number only, 0-1 -->
|HDI_ref = <!-- for any ref/s to associate with HDI number -->
|HDI_year =
|currency =
|currency_code =
|time_zone =
|utc_offset = <!-- +N, where N is number of hours -->
|footnote1 =
|footnote2 =
|footnote7 =
|footnotes = <!-- For generic non-numbered footnotes -->
}}
</syntaxhighlight>
{{hidden end}}
<!-------------------- Former country use ---------------------->
{{hidden begin |toggle=left |titlestyle=font-size:120%; |title=Former country |style=font-size:100%;}}
<syntaxhighlight lang="wikitext" style="overflow:auto;">
{{Infobox former country
|native_name = <!-- Name in a modern syntax of native language(s). Leave blank if name is only in English.
Separate with line breaks<br/> or use Template:Plainlist. If language uses Latin characters, place name(s) in italics. -->
|conventional_long_name = <!-- Full name in English -->
|common_name = <!-- Name to be used in constructing links and category names; not for display -->
|iso3166code = omit <!-- For a country or geopolitical version of a country that ceased to exist prior to the introduction of iso3166-->
|era = <!-- Use: "Napoleonic Wars", "Cold War", etc. -->
|status = <!-- Status: see Category list on template page -->
|status_text = <!-- A free text to describe status at the top of the infobox. Use sparingly. -->
|empire = <!-- The empire or country to which the entity was in a state of dependency -->
|government_type = <!-- To generate categories: "Monarchy", "Republic", etc. to generate categories -->
<!-- Rise and fall, events, years and dates -->
<!-- only fill in the start/end event entry if a specific article exists. Don't just say "abolition" or "declaration" -->
|event_start = <!-- Default: "Established" -->
|date_start = <!-- Optional: Date of establishment, in format 1 January (no year) -->
|year_start = <!-- Year of establishment -->
|event_end = <!-- Default: "Disestablished" -->
|date_end = <!-- Optional: Date of disestablishment, in format 1 January (no year) -->
|year_end = <!-- Year of disestablishment -->
|year_exile_start = <!-- Year of start of exile (if dealing with exiled government: status="Exile") -->
|year_exile_end = <!-- Year of end of exile (leave blank if still in exile) -->
|event1 = <!-- Optional: other events between "start" and "end" -->
|date_event1 =
|event2 =
|date_event2 =
|event3 =
|date_event3 =
|event4 =
|date_event4 =
|event5 =
|date_event5 =
|event6 =
|date_event6 =
|event_pre = <!-- Optional: A crucial event that took place before "event_start" -->
|date_pre =
|event_post = <!-- Optional: A crucial event that took place after "event_end" -->
|date_post =
<!-- Flag navigation: Preceding and succeeding entities p1 to p5 and s1 to s5 -->
|p1 = <!-- Name of the article for preceding entity, numbered 1-5 -->
|flag_p1 = <!-- Default: "Flag of {{{p1}}}.svg" (size 30) -->
|image_p1 = <!-- Use: [[File:Sin escudo.svg|20px|Image missing]] -->
|p2 =
|flag_p2 =
|p3 =
|flag_p3 =
|p4 =
|flag_p4 =
|p5 =
|flag_p5 =
|s1 = <!-- Name of the article for succeeding entity, numbered 1-5 -->
|flag_s1 = <!-- Default: "Flag of {{{s1}}}.svg" (size 30) -->
|image_s1 = <!-- Use: [[File:Sin escudo.svg|20px|Image missing]] -->
|s2 =
|flag_s2 =
|s3 =
|flag_s3 =
|s4 =
|flag_s4 =
|s5 =
|flag_s5 =
|image_flag = <!-- Default: Flag of {{{common_name}}}.svg -->
|flag_alt = <!-- Alt text for flag -->
|image_flag2 = <!-- Second flag -->
|flag_alt2 = <!-- Alt text for second flag -->
|flag = <!-- Link target under flag image. Default: Flag of {{{common_name}}} -->
|flag2 = <!-- Link target under flag2 image. Default: Flag of {{{common_name}}} -->
|flag_type = <!-- Displayed text for link under flag. Default "Flag" -->
|flag2_type = <!-- Displayed text for link under flag2. Default "Flag" -->
|image_coat = <!-- Default: Coat of arms of {{{common_name}}}.svg -->
|coa_size = <!-- Size of coat of arms -->
|coat_alt = <!-- Alt text for coat of arms -->
|symbol_type = <!-- Displayed text for link under symbol. Default "Coat of arms" -->
|symbol_type_article = <!-- Link target under symbol image. Default: Coat of arms of {{{common_name}}} -->
|image_map =
|image_map_size = <!--Map size in number of pixels-->
|image_map_alt =
|image_map_caption =
|image_map2 = <!-- If second map is needed; does not appear by default -->
|image_map2_size = <!--Map size in number of pixels-->
|image_map2_alt =
|image_map2_caption =
|capital =
|capital_exile = <!-- If status="Exile" -->
|national_motto =
|national_anthem =
|common_languages =
|religion =
|demonym =
|currency =
<!-- Titles and names of the first and last leaders and their deputies -->
|leader1 = <!-- Name of king or president -->
|leader2 =
|leader3 =
|leader4 =
|leader21 = <!--(up to 21 distinct leaders may be included)-->
|year_leader1 = <!-- Years served -->
|year_leader2 =
|year_leader3 =
|year_leader4 =
|year_leader21 =
|title_leader = <!-- Default: "King" for monarchy, otherwise "President" -->
|representative1 = <!-- Name of representative of head of state (e.g. colonial governor) -->
|representative2 =
|representative3 =
|representative4 =
|representative5 =
|year_representative1 = <!-- Years served -->
|year_representative2 =
|year_representative3 =
|year_representative4 =
|year_representative5 =
|title_representative = <!-- Default: "Governor" -->
|deputy1 = <!-- Name of prime minister -->
|deputy2 =
|deputy3 =
|deputy4 =
|year_deputy1 = <!-- Years served -->
|year_deputy2 =
|year_deputy3 =
|year_deputy4 =
|title_deputy = <!-- Default: "Prime minister" -->
<!-- Legislature -->
|legislature = <!-- Name of legislature -->
|house1 = <!-- Name of first chamber -->
|type_house1 = <!-- Default: "Upper house" -->
|house2 = <!-- Name of second chamber -->
|type_house2 = <!-- Default: "Lower house" -->
<!-- Area and population of a given year -->
|stat_year1 = <!-- year of the statistic, specify either area, population or both -->
|stat_area1 = <!-- area in square kilometres (w/o commas or spaces); area in square miles is calculated -->
|stat_pop1 = <!-- population (w/o commas or spaces) -->
|stat_year2 =
|stat_area2 =
|stat_pop2 =
|stat_year3 =
|stat_area3 =
|stat_pop3 =
|stat_year4 =
|stat_area4 =
|stat_pop4 =
|stat_year5 =
|stat_area5 =
|stat_pop5 =
|today = <!-- Present-day countries that overlap with the territorial extent of the former country. Do not use this parameter if there are more than four such countries. --><!-- Do NOT add flags, per MOS:INFOBOXFLAG -->
|footnote_a = <!-- Accepts wikilinks -->
|footnote_b = <!-- Accepts wikilinks -->
...
|footnote_h = <!-- Accepts wikilinks -->
|footnotes = <!-- Accepts wikilinks -->
}}
</syntaxhighlight>
{{hidden end}}
== Examples ==
<!------------------ Country/territory example ------------------->
{{hidden begin |toggle=left |titlestyle=font-size:120%; |title=Country or territory |style=font-size:100%;}}
{{Infobox country
|conventional_long_name = Republic of Cameroon
|native_name = {{lang|fr|République du Cameroun}}
|common_name = Cameroon
|image_flag = Flag of Cameroon.svg
|alt_flag = Vertical tricolor (green, red, yellow) with a five-pointed gold star in the center of the red.
|image_coat = Coat of arms of Cameroon.svg
|symbol_type = Coat of arms
|image_map = Cameroon (orthographic projection).svg
|alt_map = Location of Cameroon on the globe.
|national_motto = <br/>{{native phrase|fr|"Paix – Travail – Patrie"|italics=off}}<br/>{{small|"Peace – Work – Fatherland"}}
|national_anthem = <br/>"{{native phrase|fr|[[O Cameroon, Cradle of our Forefathers|Ô Cameroun, Berceau de nos Ancêtres]]|nolink=yes|italics=off}}"<br/>{{raise|0.2em|{{small|''O Cameroon, Cradle of our Forefathers''}} {{lower|0.1em|<sup>a</sup>}}}}
|official_languages = {{hlist |[[French language|French]] |[[English language|English]]}}
|demonym = Cameroonian
|ethnic_groups =
{{unbulleted list
| {{nowrap|31% [[Ethnic groups in Cameroon|Cameroon Highlanders]]}}
| 19% [[Bantu peoples|Equatorial Bantu]]
| 11% [[Kirdi]]
| 10% [[Fula people|Fulani]]
| {{0|0}}8% [[Bantu peoples|Northwestern Bantu]]
| {{0|0}}7% Eastern Nigritic
| 13% other African
| <1% non-African
}}
|capital = [[Yaoundé]]
|coordinates = {{coord|3|52|N|11|31|E}}
|largest_city = [[Douala]]
|government_type = [[Republic]]
|leader_title1 = [[List of heads of state of Cameroon|President]]
|leader_name1 = [[Paul Biya]]
|leader_title2 = [[Prime Minister of Cameroon|Prime Minister]]
|leader_name2 = [[Philémon Yang]]
|legislature = [[National Assembly (Cameroon)|National Assembly]]
|area_rank = 54th <!--Demographic Yearbook 1.-->
|area_km2 = 475,442
|area_sq_mi = 183,568 <!--Do not remove per [[WP:MOSNUM]]-->
|percent_water = 1.3 <!--CIA World Factbook-->
|population_estimate = 20,129,878
|population_estimate_rank = 58th <!--UN World Population Prospects-->
|population_estimate_year = July 2012
|population_census = 17,463,836
|population_census_year = 2005
|population_density_km2 = 39.7
|population_density_sq_mi = 102.8 <!--Do not remove per [[WP:MOSNUM]]-->
|population_density_rank = 167th <!--UN World Population Prospects-->
|GDP_PPP = $47.251 billion
|GDP_PPP_year = 2011
|GDP_PPP_per_capita = $2,257
|GDP_PPP_per_capita_rank =
|GDP_nominal = $25.759 billion
|GDP_nominal_year = 2011
|GDP_nominal_per_capita = $1,230
|sovereignty_type = Independence {{nobold|from [[France]]}}
|established_event1 = Declared
|established_date1 = 1 January 1960
|established_event2 = {{nowrap|Annexation of former<br/>[[British Cameroons]]}}
|established_date2 = 1 October 1961
|HDI_year = 2011
|HDI_change = increase <!--increase/decrease/steady-->
|HDI = 0.482 <!--number only-->
|HDI_ref =
|HDI_rank = 150th
|Gini_year = 2001
|Gini_change = <!--increase/decrease/steady-->
|Gini = 44.6 <!--number only-->
|Gini_ref =
|Gini_rank =
|currency = [[Central African CFA franc]]
|currency_code = XAF
|time_zone = [[West Africa Time|WAT]]
|utc_offset = +1
|time_zone_DST =
|utc_offset_DST =
|drives_on = right
|calling_code = [[+237]]
|cctld = [[.cm]]
|footnote_a = These are the titles as given in the ''Constitution of the Republic of Cameroon'', Article X. The French version of the song is sometimes called {{lang|fr|Chant de Ralliement}}, as in ''National Anthems of the World''; and the English version "O Cameroon, Cradle of Our Forefathers", as in DeLancey and DeLancey 61.
}}
<syntaxhighlight lang="wikitext" style="overflow:auto;">
{{Infobox country
|conventional_long_name = Republic of Cameroon
|native_name = {{lang|fr|République du Cameroun}}
|common_name = Cameroon
|image_flag = Flag of Cameroon.svg
|alt_flag = Vertical tricolor (green, red, yellow) with a five-pointed gold star in the center of the red.
|image_coat = Coat of arms of Cameroon.svg
|symbol_type = Coat of arms
|image_map = Cameroon (orthographic projection).svg
|alt_map = Location of Cameroon on the globe.
|national_motto = <br/>{{native phrase|fr|"Paix – Travail – Patrie"|italics=off}}<br/>{{small|"Peace – Work – Fatherland"}}
|national_anthem = <br/>"{{native phrase|fr|[[O Cameroon, Cradle of our Forefathers|Ô Cameroun, Berceau de nos Ancêtres]]|nolink=yes|italics=off}}"<br/>{{raise|0.2em|{{small|''O Cameroon, Cradle of our Forefathers''}} {{lower|0.1em|<sup>a</sup>}}}}
|official_languages = {{hlist |[[French language|French]] |[[English language|English]]}}
|demonym = Cameroonian
|ethnic_groups =
{{unbulleted list
| {{nowrap|31% [[Ethnic groups in Cameroon|Cameroon Highlanders]]}}
| 19% [[Bantu peoples|Equatorial Bantu]]
| 11% [[Kirdi]]
| 10% [[Fula people|Fulani]]
| {{0|0}}8% [[Bantu peoples|Northwestern Bantu]]
| {{0|0}}7% Eastern Nigritic
| 13% other African
| <1% non-African
}}
|capital = [[Yaoundé]]
|coordinates = {{coord|3|52|N|11|31|E}}
|largest_city = [[Douala]]
|government_type = [[Republic]]
|leader_title1 = [[List of heads of state of Cameroon|President]]
|leader_name1 = [[Paul Biya]]
|leader_title2 = [[Prime Minister of Cameroon|Prime Minister]]
|leader_name2 = [[Philémon Yang]]
|legislature = [[National Assembly (Cameroon)|National Assembly]]
|area_rank = 54th <!--Demographic Yearbook 1.-->
|area_km2 = 475,442
|area_sq_mi = 183,568 <!--Do not remove per [[WP:MOSNUM]]-->
|percent_water = 1.3 <!--CIA World Factbook-->
|population_estimate = 20,129,878
|population_estimate_rank = 58th <!--UN World Population Prospects-->
|population_estimate_year = July 2012
|population_census = 17,463,836
|population_census_year = 2005
|population_density_km2 = 39.7
|population_density_sq_mi = 102.8 <!--Do not remove per [[WP:MOSNUM]]-->
|population_density_rank = 167th <!--UN World Population Prospects-->
|GDP_PPP = $47.251 billion
|GDP_PPP_year = 2011
|GDP_PPP_per_capita = $2,257
|GDP_PPP_per_capita_rank =
|GDP_nominal = $25.759 billion
|GDP_nominal_year = 2011
|GDP_nominal_per_capita = $1,230
|sovereignty_type = Independence {{nobold|from [[France]]}}
|established_event1 = Declared
|established_date1 = 1 January 1960
|established_event2 = {{nowrap|Annexation of former<br/>[[British Cameroons]]}}
|established_date2 = 1 October 1961
|HDI_year = 2011
|HDI_change = increase <!--increase/decrease/steady-->
|HDI = 0.482 <!--number only-->
|HDI_ref =
|HDI_rank = 150th
|Gini_year = 2001
|Gini_change = <!--increase/decrease/steady-->
|Gini = 44.6 <!--number only-->
|Gini_ref =
|Gini_rank =
|currency = [[Central African CFA franc]]
|currency_code = XAF
|time_zone = [[West Africa Time|WAT]]
|utc_offset = +1
|time_zone_DST = not observed
|utc_offset_DST = +1
|drives_on = right
|calling_code = [[+237]]
|cctld = [[.cm]]
|footnote_a = These are the titles as given in the ''Constitution of the Republic of Cameroon'', Article X. The French version of the song is sometimes called {{lang|fr|Chant de Ralliement}}, as in ''National Anthems of the World''; and the English version "O Cameroon, Cradle of Our Forefathers", as in DeLancey and DeLancey 61.
}}
</syntaxhighlight>
{{hidden end}}
<!-------------- Geopolitical organization example --------------->
{{hidden begin |toggle=left |titlestyle=font-size:120%; |title=Geopolitical organization |style=font-size:100%;}}
{{Infobox geopolitical organization
|name =
{{collapsible list
|titlestyle = background:transparent;text-align:center;font-size:85%;
|title = {{resize|130%|European Union}}
|liststyle = text-align:center;
| {{smaller|{{native name|bg|Европейски съюз}}<br/><!--
-->{{native name|hr|Europska unija}}<br/><!--
-->{{native name|cs|Evropská unie}}<br/><!--
-->{{native name|da|Den Europæiske Union}}<br/><!--
-->{{native name|nl|Europese Unie}}<br /><!--
-->{{native name|et|Euroopa Liit}}<br/><!--
-->{{native name|fi|Euroopan unioni}}<br/><!--
-->{{native name|fr|Union européenne}}<br/><!--
-->{{native name|de|Europäische Union}}<br/><!--
-->{{native name|el|Ευρωπαϊκή Ένωση}}<br/><!--
-->{{native name|hu|Európai Unió}}<br/><!--
-->{{native name|ga|An tAontas Eorpach}}<br/><!--
-->{{native name|it|Unione europea}}<br/><!--
-->{{native name|lv|Eiropas Savienība}}<br/><!--
-->{{native name|lt|Europos Sąjunga}}<br/><!--
-->{{native name|mt|Unjoni Ewropea}}<br/><!--
-->{{native name|pl|Unia Europejska}}<br/><!--
-->{{native name|pt|União Europeia}}<br/><!--
-->{{native name|ro|Uniunea Europeană}}<br/><!--
-->{{native name|sk|Európska únia}}<br/><!--
-->{{native name|sl|Evropska unija}}<br/><!--
-->{{native name|es|Unión Europea}}<br/><!--
-->{{native name|sv|Europeiska unionen}}<!--
-->}}
}}
|linking_name = Europe
|image_flag = Flag of Europe.svg
|alt_flag = Circle of 12 gold stars on a blue background
|motto = "[[Motto of the European Union|United in diversity]]"
|anthem = <div style="padding-bottom:0.2em;">"[[Anthem of Europe|Ode to Joy]]" {{small|(orchestral)}}</div>[[File:Anthem of Europe (US Navy instrumental short version).ogg|center]]
|image_map = EU Globe No Borders.svg
|map_caption = An [[Orthographic projection (cartography)|orthographic projection]] of the world, highlighting the European Union and its Member States (green).
|map_width = 220px
|admin_center_type = Political centres
|admin_center = {{unbulleted list |[[Brussels]] ([[Brussels and the European Union|de facto capital]])|[[Luxembourg (city)|Luxembourg]] |[[Strasbourg]]}}
|largest_city = [[London]]
|official_languages =
{{collapsible list
|titlestyle = background:transparent;text-align:left;font-weight:normal;
|title = [[Languages of the European Union|24 languages]]
| {{hlist |[[Bulgarian language|Bulgarian]] |[[Croatian language|Croatian]] |[[Czech language|Czech]] |[[Danish language|Danish]] |[[Dutch language|Dutch]] |[[English language|English]] |[[Estonian language|Estonian]] |[[Finnish language|Finnish]] |[[French language|French]] |[[German language|German]] |[[Greek language|Greek]] |[[Hungarian language|Hungarian]] |[[Irish language|Irish]] |[[Italian language|Italian]] |[[Latvian language|Latvian]] |[[Lithuanian language|Lithuanian]] |[[Maltese language|Maltese]] |[[Polish language|Polish]] |[[Portuguese language|Portuguese]] |[[Romanian language|Romanian]] |[[Slovak language|Slovak]] |[[Slovene language|Slovene]] |[[Spanish language|Spanish]] |[[Swedish language|Swedish]]}}
}}
|demonym = [[Citizenship of the European Union|European]]
|membership_type = [[Member state of the European Union|Member state]]s
|membership =
{{collapsible list
|titlestyle = background:transparent;text-align:left;font-weight:normal;
|title = 27 states
|{{flagcountry|Austria}} |{{flagcountry|Belgium|state}} |{{flagcountry|Bulgaria}}
|{{flagcountry|Croatia}} |{{flagcountry|Cyprus}} |{{flagcountry|Czech Republic}}
|{{flagcountry|Denmark}} |{{flagcountry|Estonia}} |{{flagcountry|Finland}}
|{{flagcountry|France}} |{{flagcountry|Germany}} |{{flagcountry|Greece}}
|{{flagcountry|Hungary}} |{{flagcountry|Ireland}} |{{flagcountry|Italy}}
|{{flagcountry|Latvia}} |{{flagcountry|Lithuania}} |{{flagcountry|Luxembourg}}
|{{flagcountry|Malta}} |{{flagcountry|Netherlands}} |{{flagcountry|Poland}}
|{{flagcountry|Portugal}} |{{flagcountry|Romania}} |{{flagcountry|Slovakia}}
|{{flagcountry|Slovenia}} |{{flagcountry|Spain}} |{{flagcountry|Sweden}}
}}
|leader_title1 = [[President of the European Council|President of the European Council]]
|leader_name1 = {{nowrap|[[Charles Michel]] ([[Mouvement Réformateur|MR]])}}
|leader_title2 = [[President of the European Commission|President of the Commission]]
|leader_name2 = {{nowrap|[[Ursula von der Leyen]] ([[Christian Democratic Union of Germany|CDU]])}}
|legislature = [[Legislature of the European Union]]
|upper_house = {{nowrap|[[Council of the European Union]]}}
|lower_house = [[European Parliament]]
|established_event1 = [[Treaty of Paris (1951)|Treaty of Paris]]
|established_date1 = 23 July 1952
|established_event2 = [[Treaty of Rome]]
|established_date2 = 1 January 1958
|established_event3 = {{nowrap|[[Maastricht Treaty|Treaty of Maastricht]]}}
|established_date3 = 1 November 1993
|official_website = {{URL|europa.eu}}
|area_rank = 7th<sup>a</sup><!--gives link to list--><!--Calculated by taking out EU members from the list-->
|area_km2 = 4,381,376 <!--Do not remove per [[WP:MOSNUM]]-->
|area_sq_mi = 1,691,658 <!--Do not remove per [[WP:MOSNUM]]-->
|percent_water = 3.08
|population_estimate = 507,890,191
|population_estimate_rank = 3rd<sup>a</sup><!--gives link to list--><!--Calculated by taking out EU members from the list-->
|population_estimate_year = 2012
|population_density_km2 = 116.2 <!--502,486,499 / 4,324,782km2 = 116.2 people/km2 (1 January 2011)-->
|population_density_sq_mi = 300.9 <!--502,486,499 / 1,669,807sq_mi = 300.9 people/sq_mi (1 January 2011)-->
|population_density_rank = <!--Calculated by taking out EU members from the list-->
<!--IMF GDP data published in September 2011; so please do not use the IMF *projections* for 2011-->
|GDP_PPP = $15.821 trillion
|GDP_PPP_rank = 1st<sup>a</sup><!--gives link to list--><!--Calculated by taking out EU members from the list-->
|GDP_PPP_year = 2011
|GDP_PPP_per_capita = $31,607<!--same ref as above-->
|GDP_PPP_per_capita_rank = 15th<sup>a</sup><!--Calculated by taking out EU members from the list-->
|GDP_nominal = $17.577 trillion
|GDP_nominal_rank = 1st<sup>a</sup><!--Calculated by taking out EU members from the list-->
|GDP_nominal_year = 2011
|GDP_nominal_per_capita = $35,116
|GDP_nominal_per_capita_rank = 14th<sup>a</sup><!--gives link to list--><!--Calculated by taking out EU members from the list-->
|Gini_year = 2010
|Gini_change = <!--increase/decrease/steady-->
|Gini = 30.4 <!--number only-->
|Gini_ref =
|Gini_rank =
|HDI_year = 2011
|HDI_change = increase <!--increase/decrease/steady-->
|HDI = 0.876 <!--number only-->
|HDI_ref =
|HDI_rank = 13th<!--Calculated by taking out EU members from the list-->{{\}}25th<sup>a</sup><!--Calculated with EU members in the list-->
|currency =
{{(!}} cellspacing="0" cellpadding="0"
{{!-}} style="height: 22px;"
! colspan="4" style="font-size: 120%; white-space:nowrap" {{!}} [[Eurozone]]{{spaces|2}}{{nobold|{{small|(17 countries)}}}}
{{!-}} style="height: 22px;"
! {{flagicon|EU}}
! [[Euro]]
! [[Euro sign|€]]
! [[ISO 4217|EUR]]
{{!-}} style="height: 22px;"
! colspan="4" style="font-size: 120%;" {{!}} [[Currencies of the European Union|Other currencies]]
{{!-}} style="height: 22px;"
{{!}} {{flagicon|Bulgaria}}
{{!}} [[Bulgarian lev|Lev]]
{{!}} лв
{{!}} [[ISO 4217|BGN]]
{{!-}} style="height: 22px;"
{{!}} {{flagicon|Croatia}}
{{!}} [[Croatian kuna|Kuna]]
{{!}} kn
{{!}} [[ISO 4217|HRK]]
{{!-}} style="height: 22px;"
{{!}} {{flagicon|Czech Republic}}
{{!}} [[Czech koruna|Koruna]]
{{!}} Kč
{{!}} [[ISO 4217|CZK]]
{{!-}} style="height: 22px;"
{{!}} {{flagicon|Denmark}}
{{!}} [[Danish krone|Krone]]
{{!}} kr
{{!}} [[ISO 4217|DKK]]
{{!-}} style="height: 22px;"
{{!}} {{flagicon|Hungary}}
{{!}} [[Hungarian forint|Forint]]
{{!}} Ft
{{!}} [[ISO 4217|HUF]]
{{!-}} style="height: 22px;"
{{!}} {{flagicon|Latvia}}
{{!}} [[Latvian lats|Lats]]
{{!}} Ls
{{!}} [[ISO 4217|LVL]]
{{!-}} style="height: 22px;"
{{!}} {{flagicon|Lithuania}}
{{!}} [[Lithuanian litas|Litas]]
{{!}} Lt
{{!}} [[ISO 4217|LTL]]
{{!-}} style="height: 22px;"
{{!}} {{flagicon|Poland}}
{{!}} [[Polish złoty|Złoty]]
{{!}} zł
{{!}} [[ISO 4217|PLN]]
{{!-}} style="height: 22px;"
{{!}} {{flagicon|Romania}}
{{!}} [[Romanian Leu|Leu]]
{{!}} L
{{!}} [[ISO 4217|RON]]
{{!-}} style="height: 22px;"
{{!}} {{flagicon|Sweden}}
{{!}} [[Swedish krona|Krona]]
{{!}} kr
{{!}} [[ISO 4217|SEK]]
{{!)}}
|time_zone =
|utc_offset = +0 to +2
|time_zone_DST =
|utc_offset_DST = +1 to +3
|date_format =
|cctld = [[.eu]]
|calling_code = [[Telephone numbers in the European Union|27 codes]]
|footnote_a = If considered as a single entity.
}}
<syntaxhighlight lang="wikitext" style="overflow:auto;">
{{Infobox geopolitical organization
|name =
{{collapsible list
|titlestyle = background:transparent;text-align:center;font-size:85%;
|title = {{resize|130%|European Union}}
|liststyle = text-align:center;
| {{smaller|{{native name|bg|Европейски съюз}}<br/><!--
-->{{native name|hr|Europska unija}}<br/><!--
-->{{native name|cs|Evropská unie}}<br/><!--
-->{{native name|da|Den Europæiske Union}}<br/><!--
-->{{native name|nl|Europese Unie}}<br /><!--
-->{{native name|et|Euroopa Liit}}<br/><!--
-->{{native name|fi|Euroopan unioni}}<br/><!--
-->{{native name|fr|Union européenne}}<br/><!--
-->{{native name|de|Europäische Union}}<br/><!--
-->{{native name|el|Ευρωπαϊκή Ένωση}}<br/><!--
-->{{native name|hu|Európai Unió}}<br/><!--
-->{{native name|ga|An tAontas Eorpach}}<br/><!--
-->{{native name|it|Unione europea}}<br/><!--
-->{{native name|lv|Eiropas Savienība}}<br/><!--
-->{{native name|lt|Europos Sąjunga}}<br/><!--
-->{{native name|mt|Unjoni Ewropea}}<br/><!--
-->{{native name|pl|Unia Europejska}}<br/><!--
-->{{native name|pt|União Europeia}}<br/><!--
-->{{native name|ro|Uniunea Europeană}}<br/><!--
-->{{native name|sk|Európska únia}}<br/><!--
-->{{native name|sl|Evropska unija}}<br/><!--
-->{{native name|es|Unión Europea}}<br/><!--
-->{{native name|sv|Europeiska unionen}}<!--
-->}}
}}
|linking_name = Europe
|image_flag = Flag of Europe.svg
|alt_flag = Circle of 12 gold stars on a blue background
|motto = "[[Motto of the European Union|United in diversity]]"
|anthem = <div style="padding-bottom:0.2em;">''[[Anthem of Europe|Ode to Joy]]'' {{small|(orchestral)}}</div>{{center|[[File:Anthem of Europe (US Navy instrumental short version).ogg]]}}
|image_map = EU Globe No Borders.svg
|map_caption = An [[Orthographic projection (cartography)|orthographic projection]] of the world, highlighting the European Union and its Member States (green).
|map_width = 220px
|admin_center_type = Political centres
|admin_center = {{unbulleted list |[[Brussels]] ([[Brussels and the European Union|de facto capital]])|[[Luxembourg (city)|Luxembourg]] |[[Strasbourg]]}}
|largest_city = [[London]]
|official_languages =
{{collapsible list
|titlestyle = background:transparent;text-align:left;font-weight:normal;
|title = [[Languages of the European Union|24 languages]]
| {{hlist |[[Bulgarian language|Bulgarian]] |[[Croatian language|Croatian]] |[[Czech language|Czech]] |[[Danish language|Danish]] |[[Dutch language|Dutch]] |[[English language|English]] |[[Estonian language|Estonian]] |[[Finnish language|Finnish]] |[[French language|French]] |[[German language|German]] |[[Greek language|Greek]] |[[Hungarian language|Hungarian]] |[[Irish language|Irish]] |[[Italian language|Italian]] |[[Latvian language|Latvian]] |[[Lithuanian language|Lithuanian]] |[[Maltese language|Maltese]] |[[Polish language|Polish]] |[[Portuguese language|Portuguese]] |[[Romanian language|Romanian]] |[[Slovak language|Slovak]] |[[Slovene language|Slovene]] |[[Spanish language|Spanish]] |[[Swedish language|Swedish]]}}
}}
|demonym = [[Citizenship of the European Union|European]]
|membership_type = [[Member state of the European Union|Member state]]s
|membership =
{{collapsible list
|titlestyle = background:transparent;text-align:left;font-weight:normal;
|title = 27 states
|{{flagcountry|Austria}} |{{flagcountry|Belgium|state}} |{{flagcountry|Bulgaria}}
|{{flagcountry|Croatia}} |{{flagcountry|Cyprus}} |{{flagcountry|Czech Republic}}
|{{flagcountry|Denmark}} |{{flagcountry|Estonia}} |{{flagcountry|Finland}}
|{{flagcountry|France}} |{{flagcountry|Germany}} |{{flagcountry|Greece}}
|{{flagcountry|Hungary}} |{{flagcountry|Ireland}} |{{flagcountry|Italy}}
|{{flagcountry|Latvia}} |{{flagcountry|Lithuania}} |{{flagcountry|Luxembourg}}
|{{flagcountry|Malta}} |{{flagcountry|Netherlands}} |{{flagcountry|Poland}}
|{{flagcountry|Portugal}} |{{flagcountry|Romania}} |{{flagcountry|Slovakia}}
|{{flagcountry|Slovenia}} |{{flagcountry|Spain}} |{{flagcountry|Sweden}}
}}
|leader_title1 = [[President of the European Council|President of the European Council]]
|leader_name1 = {{nowrap|[[Charles Michel]] ([[Mouvement Réformateur|MR]])}}
|leader_title2 = [[President of the European Commission|President of the Commission]]
|leader_name2 = {{nowrap|[[Ursula von der Leyen]] ([[Christian Democratic Union of Germany|CDU]])}}
|legislature = [[Legislature of the European Union]]
|upper_house = {{nowrap|[[Council of the European Union]]}}
|lower_house = [[European Parliament]]
|established_event1 = [[Treaty of Paris (1951)|Treaty of Paris]]
|established_date1 = 23 July 1952
|established_event2 = [[Treaty of Rome]]
|established_date2 = 1 January 1958
|established_event3 = {{nowrap|[[Maastricht Treaty|Treaty of Maastricht]]}}
|established_date3 = 1 November 1993
|official_website = {{URL|europa.eu}}
|area_rank = 7th<sup>a</sup><!--gives link to list--><!--Calculated by taking out EU members from the list-->
|area_km2 = 4,381,376 <!--Do not remove per [[WP:MOSNUM]]-->
|area_sq_mi = 1,691,658 <!--Do not remove per [[WP:MOSNUM]]-->
|percent_water = 3.08
|population_estimate = 507,890,191
|population_estimate_rank = 3rd<sup>a</sup><!--gives link to list--><!--Calculated by taking out EU members from the list-->
|population_estimate_year = 2012
|population_density_km2 = 116.2 <!--502,486,499 / 4,324,782km2 = 116.2 people/km2 (1 January 2011)-->
|population_density_sq_mi = 300.9 <!--502,486,499 / 1,669,807sq_mi = 300.9 people/sq_mi (1 January 2011)-->
|population_density_rank = <!--Calculated by taking out EU members from the list-->
<!--IMF GDP data published in September 2011; so please do not use the IMF *projections* for 2011-->
|GDP_PPP = $15.821 trillion
|GDP_PPP_rank = 1st<sup>a</sup><!--gives link to list--><!--Calculated by taking out EU members from the list-->
|GDP_PPP_year = 2011
|GDP_PPP_per_capita = $31,607
|GDP_PPP_per_capita_rank = 15th<sup>a</sup><!--Calculated by taking out EU members from the list-->
|GDP_nominal = $17.577 trillion
|GDP_nominal_rank = 1st<sup>a</sup><!--Calculated by taking out EU members from the list-->
|GDP_nominal_year = 2011
|GDP_nominal_per_capita = $35,116
|GDP_nominal_per_capita_rank = 14th<sup>a</sup><!--gives link to list--><!--Calculated by taking out EU members from the list-->
|Gini_year = 2010
|Gini_change = <!--increase/decrease/steady-->
|Gini = 30.4 <!--number only-->
|Gini_ref =
|Gini_rank =
|HDI_year = 2011
|HDI_change = increase <!--increase/decrease/steady-->
|HDI = 0.876 <!--number only-->
|HDI_ref =
|HDI_rank = 13th<!--Calculated by taking out EU members from the list-->{{\}}25th<sup>a</sup><!--Calculated with EU members in the list-->
|currency =
{{(!}} cellspacing="0" cellpadding="0"
{{!-}} style="height: 22px;"
! colspan="4" style="font-size: 120%; white-space:nowrap" {{!}} [[Eurozone]]{{spaces|2}}{{nobold|{{small|(17 countries)}}}}
{{!-}} style="height: 22px;"
! {{flagicon|EU}}
! [[Euro]]
! [[Euro sign|€]]
! [[ISO 4217|EUR]]
{{!-}} style="height: 22px;"
! colspan="4" style="font-size: 120%;" {{!}} [[Currencies of the European Union|Other currencies]]
{{!-}} style="height: 22px;"
{{!}} {{flagicon|Bulgaria}}
{{!}} [[Bulgarian lev|Lev]]
{{!}} лв
{{!}} [[ISO 4217|BGN]]
{{!-}} style="height: 22px;"
{{!}} {{flagicon|Croatia}}
{{!}} [[Croatian kuna|Kuna]]
{{!}} kn
{{!}} [[ISO 4217|HRK]]
{{!-}} style="height: 22px;"
{{!}} {{flagicon|Czech Republic}}
{{!}} [[Czech koruna|Koruna]]
{{!}} Kč
{{!}} [[ISO 4217|CZK]]
{{!-}} style="height: 22px;"
{{!}} {{flagicon|Denmark}}
{{!}} [[Danish krone|Krone]]
{{!}} kr
{{!}} [[ISO 4217|DKK]]
{{!-}} style="height: 22px;"
{{!}} {{flagicon|Hungary}}
{{!}} [[Hungarian forint|Forint]]
{{!}} Ft
{{!}} [[ISO 4217|HUF]]
{{!-}} style="height: 22px;"
{{!}} {{flagicon|Latvia}}
{{!}} [[Latvian lats|Lats]]
{{!}} Ls
{{!}} [[ISO 4217|LVL]]
{{!-}} style="height: 22px;"
{{!}} {{flagicon|Lithuania}}
{{!}} [[Lithuanian litas|Litas]]
{{!}} Lt
{{!}} [[ISO 4217|LTL]]
{{!-}} style="height: 22px;"
{{!}} {{flagicon|Poland}}
{{!}} [[Polish złoty|Złoty]]
{{!}} zł
{{!}} [[ISO 4217|PLN]]
{{!-}} style="height: 22px;"
{{!}} {{flagicon|Romania}}
{{!}} [[Romanian Leu|Leu]]
{{!}} L
{{!}} [[ISO 4217|RON]]
{{!-}} style="height: 22px;"
{{!}} {{flagicon|Sweden}}
{{!}} [[Swedish krona|Krona]]
{{!}} kr
{{!}} [[ISO 4217|SEK]]
{{!)}}
|time_zone =
|utc_offset = +0 to +2
|time_zone_DST =
|utc_offset_DST = +1 to +3
|date_format =
|cctld = [[.eu]]
|calling_code = [[Telephone numbers in the European Union|27 codes]]
|footnote_a = If considered as a single entity.
}}
</syntaxhighlight>
{{hidden end}}
<!------------------ Former country example ------------------->
{{hidden begin |toggle=left |titlestyle=font-size:120%; |title=Former country |style=font-size:100%;}}
{{Infobox former country
|native_name = ''Deutsches Reich''
|conventional_long_name = German Empire
|common_name = Germany
|iso3166code = omit
|status = Empire
|era = [[New Imperialism]]/[[World War I|WWI]]
|event_start = [[Unification of Germany|Unification]]
|date_start = 18 January
|year_start = 1871
|event_end = [[German Revolution of 1918–1919|Republic declared]]
|date_end = 9 November
|year_end = 1918
|event_post = Formal abdication
|date_post = 28 November 1918
|p1 = North German Confederation
|flag_p1 = Flag of the German Empire.svg
|p2 = Kingdom of Bavaria
|flag_p2 = Flag of Bavaria (striped).svg
|p3 = Kingdom of Württemberg
|flag_p3 = Flagge Königreich Württemberg.svg
|p4 = Grand Duchy of Baden
|flag_p4 = Flagge Großherzogtum Baden (1871-1891).svg
|p5 = Grand Duchy of Hesse
|flag_p5 = Flagge_Großherzogtum_Hessen_ohne_Wappen.svg
|p6 = Alsace-Lorraine
|flag_p6 = Flag of France.svg
|s1 = Weimar Republic
|s2 = Republic of Alsace-Lorraine
|s3 = Free City of Danzig
|s4 = Second Polish Republic
|s5 = Klaipėda Region
|s6 = Saar (League of Nations)
|s7 = Hlučín Region
|s8 = South Jutland County{{!}}Northern Schleswig
|s9 = Eupen-Malmedy
|flag_s1 = Flag of Germany (3-2 aspect ratio).svg
|flag_s2 = Flag of the Republic of Alsace-Lorraine.svg
|flag_s3 = Gdansk flag.svg
|flag_s4 = Flag of Poland.svg
|flag_s5 = Flag of Lithuania 1918-1940.svg
|flag_s6 = Flag of Saar 1920-1935.svg
|flag_s7 = Flag of Bohemia.svg
|flag_s8 = Flag of Denmark.svg
|flag_s9 = Flag of Belgium.svg
|image_flag = Flag of the German Empire.svg
|flag_alt = Horizontal tricolor (black, white, red)
|flag_caption = Flag of the German Empire
|image_coat = Wappen Deutsches Reich - Reichsadler 1889.svg
|symbol_type = Imperial Coat of arms
|coat_alt = Shield containing a black, one-headed, rightward-looking eagle with red beak, tongue and claws. On its breast is a shield with another eagle. Over its head is an imperial crown with two crossing ribbons.
|image_map = German Empire, Wilhelminian third version.svg
|image_map_alt = Located in north central Europe, containing modern Germany plus much of modern Poland
|image_map_caption = Territory of the German Empire in 1914, prior to [[World War I]]
|national_motto = ''[[Gott mit uns]]''<br/>{{small|"God with us"}}
|national_anthem = {{plainlist|
* ''(none official)''
* "[[Heil dir im Siegerkranz]]" (Imperial)
* "[[Deutschlandlied]]" (popular)
* "[[Die Wacht am Rhein]]" (unofficial)
}}
|capital = Berlin
|common_languages =
;Official language
:[[German language|German]]
;Unofficial minority languages
:[[Danish language|Danish]], [[French language|French]], [[Polish language|Polish]], [[Saterland Frisian language|Frisian]], [[Old Prussian language|Old Prussian]], [[Lithuanian language|Lithuanian]]
;Colonial languages
:[[Bantu languages|Bantu]], [[Oshiwambo]], [[Afrikaans]], [[Swahili language|Swahili]] (African Colonies)
:[[Chinese language|Chinese]] (Tsingtao & Jiaozhou bay)
:[[Papuan languages]] (German New Guinea)
:[[Samoan language|Samoan]] (German Samoa)
|government_type = Constitutional monarchy
|title_leader = [[German Emperor|Emperor]]
|leader1 = [[William I, German Emperor|William I]]
|year_leader1 = 1871–1888
|leader2 = [[Frederick III, German Emperor|Frederick III]]
|year_leader2 = 1888
|leader3 = [[Wilhelm II, German Emperor|Wilhelm II]]
|year_leader3 = 1888–1918
|title_deputy = [[List of Chancellors of Germany|Chancellor]]
|deputy1 = [[Otto von Bismarck]] (first)
|year_deputy1 = 1871–1890
|deputy2 = [[Friedrich Ebert]] (last)
|year_deputy2 = 8–9 Nov 1918
|legislature = [[Reichstag (German Empire)|Reichstag]]
|house1 = [[Reichsrat (Germany)|Reichsrat]]
|type_house1 = State council
|stat_year1 = 1871
|religion = {{plainlist|
* [[Lutherans]]~60%
* [[Roman Catholics]]~40%
}}
|stat_pop1 = {{formatnum:41058792}}
|stat_year2 = 1890
|stat_pop2 = {{formatnum:49428470}}
|stat_year4 = 1910
|stat_pop4 = {{formatnum:64925993}}
|stat_area4 = 540857.54
|currency = {{plainlist|
* [[Vereinsthaler]], [[South German gulden]], [[Bremen thaler]], [[Hamburg mark]], [[French franc]] {{small|(until 1873, together)}}
* [[German gold mark|Goldmark]] {{small|(1873–1914)}}
* [[German Papiermark|Papiermark]] {{small|(after 1914)}}
}}
|footnotes = Area and population not including colonial possessions
|today =
}}
<syntaxhighlight lang="wikitext" style="overflow:auto;">
{{Infobox former country
|native_name = ''Deutsches Reich''
|conventional_long_name = German Empire
|common_name = Germany
|iso3166code = omit
|status = Empire
|era = [[New Imperialism]]/[[World War I|WWI]]
|event_start = [[Unification of Germany|Unification]]
|date_start = 18 January
|year_start = 1871
|event_end = [[German Revolution of 1918–1919|Republic declared]]
|date_end = 9 November
|year_end = 1918
|event_post = Formal abdication
|date_post = 28 November 1918
|p1 = North German Confederation
|flag_p1 = Flag of the German Empire.svg
|p2 = Kingdom of Bavaria
|flag_p2 = Flag of Bavaria (striped).svg
|p3 = Kingdom of Württemberg
|flag_p3 = Flagge Königreich Württemberg.svg
|p4 = Grand Duchy of Baden
|flag_p4 = Flagge Großherzogtum Baden (1871-1891).svg
|p5 = Grand Duchy of Hesse
|flag_p5 = Flagge_Großherzogtum_Hessen_ohne_Wappen.svg
|p6 = Alsace-Lorraine
|flag_p6 = Flag of France.svg
|s1 = Weimar Republic
|s2 = Republic of Alsace-Lorraine
|s3 = Free City of Danzig
|s4 = Second Polish Republic
|s5 = Klaipėda Region
|s6 = Saar (League of Nations)
|s7 = Hlučín Region
|s8 = South Jutland County{{!}}Northern Schleswig
|s9 = Eupen-Malmedy
|flag_s1 = Flag of Germany (3-2 aspect ratio).svg
|flag_s2 = Flag of the Republic of Alsace-Lorraine.svg
|flag_s3 = Gdansk flag.svg
|flag_s4 = Flag of Poland.svg
|flag_s5 = Flag of Lithuania 1918-1940.svg
|flag_s6 = Flag of Saar 1920-1935.svg
|flag_s7 = Flag of Bohemia.svg
|flag_s8 = Flag of Denmark.svg
|flag_s9 = Flag of Belgium.svg
|image_flag = Flag of the German Empire.svg
|flag_alt = Horizontal tricolor (black, white, red)
|flag_caption = Flag of the German Empire
|image_coat = Wappen Deutsches Reich - Reichsadler 1889.svg
|symbol_type = Imperial Coat of arms
|coat_alt = Shield containing a black, one-headed, rightward-looking eagle with red beak, tongue and claws. On its breast is a shield with another eagle. Over its head is an imperial crown with two crossing ribbons.
|image_map = German Empire, Wilhelminian third version.svg
|image_map_alt = Located in north central Europe, containing modern Germany plus much of modern Poland
|image_map_caption = Territory of the German Empire in 1914, prior to [[World War I]]
|national_motto = ''[[Gott mit uns]]''<br/>{{small|"God with us"}}
|national_anthem = {{plainlist|
* ''(none official)''
* "[[Heil dir im Siegerkranz]]" (Imperial)
* "[[Deutschlandlied]]" (popular)
* "[[Die Wacht am Rhein]]" (unofficial)
}}
|capital = Berlin
|common_languages =
;Official language
:[[German language|German]]
;Unofficial minority languages
:[[Danish language|Danish]], [[French language|French]], [[Polish language|Polish]], [[Saterland Frisian language|Frisian]], [[Old Prussian language|Old Prussian]], [[Lithuanian language|Lithuanian]]
;Colonial languages
:[[Bantu languages|Bantu]], [[Oshiwambo]], [[Afrikaans]], [[Swahili language|Swahili]] (African Colonies)
:[[Chinese language|Chinese]] (Tsingtao & Jiaozhou bay)
:[[Papuan languages]] (German New Guinea)
:[[Samoan language|Samoan]] (German Samoa)
|government_type = Constitutional monarchy
|title_leader = [[German Emperor|Emperor]]
|leader1 = [[William I, German Emperor|William I]]
|year_leader1 = 1871–1888
|leader2 = [[Frederick III, German Emperor|Frederick III]]
|year_leader2 = 1888
|leader3 = [[Wilhelm II, German Emperor|Wilhelm II]]
|year_leader3 = 1888–1918
|title_deputy = [[List of Chancellors of Germany|Chancellor]]
|deputy1 = [[Otto von Bismarck]] (first)
|year_deputy1 = 1871–1890
|deputy2 = [[Friedrich Ebert]] (last)
|year_deputy2 = 8–9 Nov 1918
|legislature = [[Reichstag (German Empire)|Reichstag]]
|house1 = [[Reichsrat (Germany)|Reichsrat]]
|type_house1 = State council
|stat_year1 = 1871
|religion = {{plainlist|
* [[Lutherans]]~60%
* [[Roman Catholics]]~40%
}}
|stat_pop1 = {{formatnum:41058792}}
|stat_year2 = 1890
|stat_pop2 = {{formatnum:41058792}}
|stat_year4 = 1910
|stat_pop4 = {{formatnum:41058792}}
|stat_area4 = 540857.54
|currency = {{plainlist|
* [[Vereinsthaler]], [[South German gulden]], [[Bremen thaler]], [[Hamburg mark]], [[French franc]] {{small|(until 1873, together)}}
* [[German gold mark|Goldmark]] {{small|(1873–1914)}}
* [[German Papiermark|Papiermark]] {{small|(after 1914)}}
}}
|footnotes = Area and population not including colonial possessions
|today =
}}
</syntaxhighlight>
{{hidden end}}
== Errors ==
If the template generates errors when calculating data for the Gini or HDI fields, it will add the article to [[:Category:Country articles requiring maintenance]]. This only happens if the page is in the [[WP:MAINSPACE|main article space]], not any other [[WP:NAMESPACE|namespaces]].
== Microformat ==
{{UF-hcard-place}}
== Tracking categories ==
* {{clc|Country articles requiring maintenance}}
* {{clc|Pages using infobox country with unknown parameters}}
* {{clc|Pages using infobox country with syntax problems}}
* {{clc|Pages using infobox country or infobox former country with the flag caption or type parameters}}
* {{clc|Pages using infobox country or infobox former country with the symbol caption or type parameters}}
* {{clc|Former country articles using status text with Colony or Exile}}
== TemplateData ==
{{TemplateData header}}
{{collapse top|title=TemplateData}}
<templatedata>
{
"description": "This template produces an infobox for countries that covers their major attributes such as their flags, ethnic makeup, and political system.",
"format": "{{_\n| ______________________ = _\n}}\n",
"params": {
"conventional_long_name": {
"label": "Conventional long name",
"type": "string",
"required": false,
"description": "Formal or official full name of the country in English. This entry should not be enclosed in brackets.",
"example": "The United States of America"
},
"common_name": {},
"linking_name": {},
"native_name": {
"label": "Native name",
"type": "string",
"required": false,
"example": "{{native name|Bundesrepublik Deutschland}}",
"description": "Country's name (usually full name) in its native language, hence in italics (double quotemarks). The template {{native name}} should be used with this parameter to automatically italicize the text."
},
"name": {
"label": "Geopolitical organisation name",
"type": "string",
"required": false,
"description": "Name of the geopolitical organisation in English."
},
"image_flag": {
"label": "Flag",
"type": "wiki-file-name",
"required": false,
"example": "Flag of Iceland.svg",
"description": "File name of an image file on Wikipedia or on Commons that contains the country's current flag. Do not enclose this entry in double brackets and do not give it a prefix such as File:"
},
"flag_width": {
"label": "Flag width",
"type": "string",
"required": false,
"description": "If the default widths provided for the flag and coat-of-arms/symbol images produce an unsatisfactory result, use this to specify the width to be used for the flag image; the remaining width is then assigned to the coat-of-arms/symbol (if included). Can be done as a % or px."
},
"alt_flag": {
"label": "Flag alt text",
"type": "string",
"required": false,
"description": "Alternate text for flag (text shown when pointer hovers over flag)."
},
"flag_border": {
"label": "Flag border",
"type": "string",
"required": false,
"description": "Set to no to disable border around the flag."
},
"flag_caption": {
"label": "Flag caption",
"type": "string",
"required": false,
"description": "Use this parameter to enter a caption for the flag, if one is necessary. Do not end this entry with a period.",
"example": "1992 version of the flag prior to the country's dissolution"
},
"image_flag2": {
"label": "Second flag",
"type": "wiki-file-name",
"required": false,
"example": "Secondflag of Namibia.svg",
"description": "If a country has a second flag— perhaps because of an ongoing civil war or a dispute over sovereignty— you can provide the file name of that second flag in this parameter. Do not include the prefix File:, and do not enclose it in double brackets."
},
"alt_flag2": {
"label": "Second flag alt text",
"type": "string",
"required": false,
"description": "Alt text for second flag (text shown when pointer hovers over flag)."
},
"flag2_border": {
"label": "Second flag border",
"type": "string",
"required": false,
"description": "Set to no to disable border around the flag."
},
"image_coat": {
"label": "Coat of arms",
"type": "wiki-file-name",
"aliases": [
"image_symbol"
],
"example": "Great Seal of the United States (obverse).svg"
},
"symbol_width": {
"label": "Symbol width",
"type": "string",
"required": false,
"description": "Symbol image's width.",
"default": "85px"
},
"alt_coat": {
"label": "Coat of arms alt text",
"type": "string",
"aliases": [
"alt_symbol",
"coat_alt"
],
"required": false,
"description": "Alt text for coat of arms."
},
"symbol_type": {
"label": "Symbol type",
"type": "string",
"required": false,
"description": "If not a coat of arms.",
"example": "emblem, seal, etc"
},
"symbol_type_article": {
"label": "Symbol type article",
"type": "string",
"description": "An article about the type of symbol of the country"
},
"text_symbol": {
"label": "Text symbol",
"type": "string",
"required": false,
"description": "For other types of text symbol.",
"example": "''[hymn name]''"
},
"text_symbol_type": {
"label": "Text symbol type",
"type": "string",
"required": false,
"description": "For other types of text symbol."
},
"other_symbol": {
"label": "Other symbol",
"type": "string",
"required": false,
"description": "Use if a further symbol exists."
},
"other_symbol_type": {
"label": "Other symbol type",
"type": "string",
"required": false
},
"national_motto": {
"label": "National motto",
"type": "string",
"required": false,
"example": "{{lang|de|''{{lang|de|[[Das Lied der Deutschen|Einigkeit und Recht und Freiheit]]}}''}}",
"description": "In inverted commas and wikilinked if link exists. Can also be used with the {{lang}} template and correct two-letter language code to designate the language of the motto where not provided in English."
},
"motto": {
"label": "Motto",
"type": "string",
"required": false
},
"national_anthem": {
"label": "National anthem",
"type": "string",
"required": false,
"description": "In inverted commas and wikilinked if link exists."
},
"anthem": {
"label": "Anthem",
"type": "string",
"required": false
},
"royal_anthem": {
"label": "Royal anthem",
"type": "string",
"required": false,
"description": "In inverted commas and wikilinked if link exists."
},
"image_map": {
"label": "Map",
"type": "string",
"required": false,
"example": "LocationCountry.svg"
},
"map_width": {
"label": "Map width",
"type": "string",
"required": false,
"description": "Map image's width.",
"default": "250px"
},
"alt_map": {
"label": "Map alt text",
"type": "string",
"required": false
},
"map_caption": {
"label": "Map caption",
"type": "string",
"required": false,
"description": "Caption to place below map."
},
"image_map2": {
"label": "Map 2",
"type": "string",
"required": false,
"description": "Another map, if required."
},
"map2_width": {
"label": "Map 2 width",
"type": "string",
"required": false
},
"alt_map2": {
"label": "Map 2 alt text",
"type": "string",
"required": false
},
"map_caption2": {
"label": "Map 2 caption",
"type": "string",
"required": false,
"description": "Caption to place below second map."
},
"image_map3": {},
"map3_width": {},
"alt_map3": {},
"map_caption3": {},
"capital": {
"label": "Capital",
"type": "string",
"required": false,
"description": "Name of country/territory's capital, wikilinked if link exists."
},
"capital_type": {
"label": "Capital type",
"type": "string",
"required": false
},
"coordinates": {
"label": "Coordinates",
"type": "string",
"required": false,
"description": "The geographic coordinates of the capital."
},
"latd": {
"label": "Latitude degrees",
"type": "string",
"required": false,
"description": "The degrees of the capital's latitude."
},
"latm": {
"label": "Latitude minutes",
"type": "string",
"description": "The minutes of the capital's latitude."
},
"latNS": {
"label": "Latitude NS",
"type": "string",
"description": "The direction of the capital's latitude."
},
"longd": {
"label": "Longitude degrees",
"type": "string",
"description": "The degrees of the capital's longitude."
},
"longm": {
"label": "Longitude minutes",
"type": "string",
"description": "The minutes of the capital's longitude."
},
"longEW": {
"label": "Longitude EW",
"type": "string",
"description": "The direction of the capital's longitude."
},
"admin_center": {
"label": "Administrative center",
"type": "string",
"required": false,
"description": "Location/s of administrative center/s."
},
"admin_center_type": {
"label": "Administrative center type",
"type": "string",
"required": false,
"default": "Administrative center"
},
"capital2": {
"label": "Capital 2",
"type": "string",
"required": false,
"description": "Name of country/territory's capital, wikilinked if link exists."
},
"capital_type2": {
"label": "Capital 2 type",
"type": "string",
"required": false
},
"admin_center2": {
"label": "Administrative center 2",
"type": "string",
"required": false
},
"admin_center_type2": {
"label": "Administrative center 2 type",
"type": "string",
"required": false
},
"largest_city": {
"label": "Largest city",
"type": "string",
"required": false,
"description": "Name of country/territory's largest city. Use \"capital\" (without quotemarks) if it's the capital."
},
"largest_settlement": {
"label": "Largest settlement",
"type": "string",
"required": false,
"description": "Name of largest settlement if not a city."
},
"largest_settlement_type": {
"label": "Largest settlement type",
"type": "string",
"required": false,
"description": "Type of settlement if largest settlement not a city."
},
"official_languages": {
"label": "Official languages",
"type": "string",
"required": false,
"description": "Languages recognised in legislation, constitution, etc."
},
"national_languages": {
"label": "National languages",
"type": "string",
"required": false,
"description": "Country/territory-wide languages recognised but not necessarily in country/territory-wide law, etc."
},
"regional_languages": {
"label": "Regional languages",
"type": "string",
"required": false,
"description": "Languages recognised or associated with particular regions within the country/territory."
},
"languages_type": {
"label": "Languages type",
"type": "string",
"description": "Use to specify a further type of language, if not official, national or regional."
},
"languages_sub": {
"label": "Languages sub",
"type": "string",
"required": false,
"description": "Is this further type of language a sub-item of the previous non-sub type?",
"example": "'yes' or 'no'"
},
"languages": {
"label": "Languages",
"type": "string",
"required": false,
"description": "Languages of the further type."
},
"languages2_type": {
"label": "2nd languages type",
"type": "string",
"description": "Use to specify a 2nd further type of language, if not official, national or regional."
},
"languages2_sub": {
"label": "Languages 2 sub",
"type": "string",
"required": false,
"description": "Is the second alternative type of languages a sub-item of the previous non-sub type?",
"example": "'yes or 'no'"
},
"languages2": {
"label": "Languages 2",
"type": "string",
"required": false,
"description": "Languages of the second further type."
},
"ethnic_groups": {
"label": "Ethnic groups",
"type": "string",
"required": false,
"description": "The primary ethnic groups of the country",
"example": "{{unbulleted list | 68.8% [[Bumiputera (Malaysia)|Bumiputera]] | 23.2% [[Malaysian Chinese|Chinese]] | 7.0% [[Malaysian Indian|Indian]] | 1.0% Others }}"
},
"ethnic_groups_ref": {
"label": "Ethnic groups reference",
"type": "string",
"required": false,
"description": "Reference, in <ref> format, of ethnic composition"
},
"ethnic_groups_year": {
"label": "Ethnic groups year",
"type": "number",
"required": false,
"description": "Year the ethnic group statistic is from",
"example": "2017"
},
"religion": {
"label": "Religions",
"type": "string",
"required": false,
"description": "List of religious affiliations in {{ublist}} format",
"example": "{{ublist|list_style=line-height:1.3em; |class=nowrap | 33.2% [[Buddhism in Singapore|Buddhism]]...}}"
},
"religion_ref": {
"label": "Religions reference",
"type": "string",
"required": false,
"description": "Reference, in <ref> format, of religious composition"
},
"demonym": {
"label": "Demonym",
"type": "string",
"required": false,
"description": "Name of residents of this country",
"example": "Singaporean",
"suggested": true
},
"org_type": {
"label": "Organization type",
"type": "string",
"required": false
},
"membership": {
"label": "membership",
"type": "string",
"required": false
},
"membership_type": {
"label": "membership_type",
"type": "string",
"required": false
},
"government_type": {
"label": "Type of government",
"type": "string",
"required": false,
"description": "The type of government, e.g. federal republic",
"example": "[[Monarchy]]"
},
"politics_link": {
"label": "Politics link",
"type": "string",
"required": false
},
"leader_title1": {
"label": "Leader 1 title",
"type": "line",
"required": false,
"description": "Title of principal leader",
"example": "[[President of Singapore|President]]"
},
"leader_name1": {
"label": "Leader 1 name",
"type": "line",
"required": false,
"description": "Name of principal leader",
"example": "[[Halimah Yacob]]"
},
"leader_title2": {
"label": "Leader 2 title",
"type": "line",
"required": false,
"description": "Title of 2nd leader",
"example": "[[Prime Minister of Singapore|Prime Minister]]"
},
"leader_name2": {
"label": "Leader 2 name",
"type": "line",
"description": "Name of 2nd leader",
"example": "[[Lee Hsien Loong]]"
},
"leader_title3": {
"label": "Leader 3 title",
"type": "line",
"required": false,
"description": "Title of 3rd leader",
"example": "[[Deputy Prime Minister of Singapore|Deputy Prime Ministers]]"
},
"leader_name3": {
"label": "Leader 3 name",
"type": "line",
"description": "Name of 3rd leader",
"example": "[[Teo Chee Hean]]<br>[[Tharman Shanmugaratnam]]"
},
"leader_title4": {
"label": "Leader 4 title",
"type": "line",
"required": false,
"description": "Title of the 4th leader",
"example": "[[President pro tempore of the United States Senate|President pro tempore]]"
},
"leader_name4": {
"label": "Leader 4 name",
"type": "line",
"description": "Name of the 4th leader"
},
"leader_title5": {
"label": "leader_title5",
"type": "string",
"required": false
},
"leader_name5": {
"label": "Leader name 5",
"type": "string"
},
"leader_title6": {
"label": "Leader title 6",
"type": "string",
"required": false
},
"leader_name6": {
"label": "Leader name 6",
"type": "string"
},
"leader_title7": {
"label": "Leader title7",
"type": "string",
"required": false
},
"leader_name7": {
"label": "Leader name 7",
"type": "string"
},
"leader_title8": {
"label": "Leader title 8",
"type": "string",
"required": false
},
"leader_name8": {
"label": "Leader name 8",
"type": "string"
},
"leader_title9": {
"label": "Leader title 9",
"type": "string",
"required": false
},
"leader_name9": {
"label": "Leader name 9",
"type": "string"
},
"leader_title10": {
"label": "Leader title 10",
"type": "string",
"required": false
},
"leader_name10": {
"label": "Leader name 10",
"type": "string"
},
"leader_title11": {
"label": "Leader title 11",
"type": "string",
"required": false
},
"leader_name11": {
"label": "Leader name 11",
"type": "string"
},
"leader_title12": {
"label": "Leader title 12",
"type": "string",
"required": false
},
"leader_name12": {
"label": "Leader name 12",
"type": "string"
},
"leader_title13": {
"label": "Leader title 13",
"type": "string",
"required": false
},
"leader_name13": {
"label": "Leader name 13",
"type": "string"
},
"leader_title14": {
"label": "Leader title 14",
"type": "string",
"required": false
},
"leader_name14": {
"label": "Leader name 14",
"type": "string"
},
"legislature": {
"label": "Legislature",
"type": "line",
"description": "Name of, and link to, the country's national legislature",
"example": "[[Parliament of Singapore|Parliament]]"
},
"upper_house": {
"description": "Upper house of the country or organization's legislature",
"type": "string",
"example": "[[United States House of Representatives|House of Representatives]]"
},
"lower_house": {
"description": "Lower house of the country or organization's legislature",
"label": "Lower house",
"type": "string",
"example": "[[United States House of Representatives|House of Representatives]]"
},
"sovereignty_type": {
"label": "Sovereignty type",
"type": "line",
"required": false,
"description": "Type of sovereignty this country has",
"example": "Independence"
},
"sovereignty_note": {
"label": "Sovereignty note",
"type": "content",
"required": false,
"description": "Note about this country's sovereignty",
"example": "from the [[United Kingdom]]"
},
"established": {
"label": "established",
"type": "string",
"required": false
},
"established_event1": {
"label": "Establishment event 1",
"type": "string",
"required": false
},
"established_date1": {
"label": "Establishment date 1",
"type": "string",
"required": false
},
"established_event2": {
"label": "Establishment event 2",
"type": "string",
"required": false
},
"established_date2": {
"label": "Establishment date 2",
"type": "string",
"required": false
},
"established_event3": {
"label": "Establishment event 3",
"type": "string",
"required": false
},
"established_date3": {
"label": "Establishment date 3",
"type": "string",
"required": false
},
"established_event4": {
"label": "Establishment event 4",
"type": "string",
"required": false
},
"established_date4": {
"label": "established_date4",
"type": "string",
"required": false
},
"established_event5": {
"label": "Establishment event 5",
"type": "string",
"required": false
},
"established_date5": {
"label": "established_date5",
"type": "string",
"required": false
},
"established_event6": {
"label": "established_event6",
"type": "string",
"required": false
},
"established_date6": {
"label": "established_date6",
"type": "string",
"required": false
},
"established_event7": {
"label": "established_event7",
"type": "string",
"required": false
},
"established_date7": {
"label": "established_date7",
"type": "string",
"required": false
},
"established_event8": {
"label": "established_event8",
"type": "string",
"required": false
},
"established_date8": {
"label": "established_date8",
"type": "string",
"required": false
},
"established_event9": {
"label": "established_event9",
"type": "string",
"required": false
},
"established_date9": {
"label": "established_date9",
"type": "string",
"required": false
},
"established_event10": {
"label": "established_event10",
"type": "string",
"required": false
},
"established_date10": {
"label": "established_date10",
"type": "string",
"required": false
},
"established_event11": {
"label": "established_event11",
"type": "string",
"required": false
},
"established_date11": {
"label": "established_date11",
"type": "string",
"required": false
},
"established_event12": {
"label": "established_event12",
"type": "string",
"required": false
},
"established_date12": {
"label": "established_date12",
"type": "string",
"required": false
},
"area_km2": {
"label": "Land area (km²)",
"type": "number",
"required": false,
"description": "Land area of the country in square kilometers",
"example": "722.5",
"suggested": true
},
"area_link": {
"label": "area_link",
"type": "string",
"required": false
},
"area_label": {
"label": "area_label",
"type": "string",
"required": false
},
"FR_foot4": {
"label": "FR_foot4",
"type": "string",
"required": false,
"deprecated": true
},
"area_footnote": {
"label": "area_footnote",
"type": "string",
"required": false
},
"area_rank": {
"label": "Area rank",
"type": "string",
"required": false,
"description": "Rank among countries of land area",
"example": "174th",
"suggested": true
},
"area_sq_mi": {
"label": "Land area (mi²)",
"type": "number",
"required": false,
"description": "Land area of the country in square miles",
"example": "290"
},
"percent_water": {
"label": "percent_water",
"type": "string",
"required": false
},
"area_label2": {
"label": "area_label2",
"type": "string",
"required": false
},
"area_data2": {
"label": "area_data2",
"type": "string",
"required": false
},
"area_label3": {
"label": "area_label3",
"type": "string",
"required": false
},
"area_data3": {
"label": "area_data3",
"type": "string",
"required": false
},
"FR_metropole": {
"label": "FR_metropole",
"type": "string",
"required": false,
"deprecated": true
},
"FR_foot2": {
"label": "FR_foot2",
"type": "string",
"required": false,
"deprecated": true
},
"FR_IGN_area_km2": {
"label": "FR_IGN_area_km2",
"type": "string",
"required": false,
"deprecated": true
},
"FR_IGN_area_rank": {
"label": "FR_IGN_area_rank",
"type": "string",
"required": false,
"deprecated": true
},
"FR_IGN_area_sq_mi": {
"label": "FR_IGN_area_sq_mi",
"type": "string",
"required": false,
"deprecated": true
},
"FR_foot3": {
"label": "FR_foot3",
"type": "string",
"required": false,
"deprecated": true
},
"FR_cadastre_area_km2": {
"label": "FR_cadastre_area_km2",
"type": "string",
"required": false,
"deprecated": true
},
"FR_cadastre_area_rank": {
"label": "FR_cadastre_area_rank",
"type": "string",
"required": false,
"deprecated": true
},
"FR_cadastre_area_sq_mi": {
"label": "FR_cadastre_area_sq_mi",
"type": "string",
"required": false,
"deprecated": true
},
"population_estimate": {
"label": "Population estimate",
"type": "number",
"required": false,
"description": "An estimate of the country's population",
"example": "24,000,000"
},
"population_census": {
"label": "Population census",
"type": "string"
},
"population_link": {
"label": "Population link",
"type": "url"
},
"population_estimate_year": {
"label": "Population estimate year",
"type": "number",
"description": "The year the population estimate is from",
"example": "2018"
},
"population_estimate_rank": {
"label": "Population estimate rank",
"type": "string",
"description": "Rank among countries in estimated population",
"example": "3rd"
},
"population_label2": {
"label": "population_label2",
"type": "string",
"required": false
},
"population_data2": {
"label": "Population data 2",
"type": "string",
"required": false
},
"population_label3": {
"label": "Population label 3",
"type": "string",
"required": false
},
"population_data3": {
"label": "Population data 3",
"type": "string",
"required": false
},
"population_census_year": {
"label": "Population census year",
"type": "number",
"required": false,
"description": "Year the population census statistics are from",
"example": "2010"
},
"population_census_rank": {
"label": "Population census rank",
"type": "string",
"description": "Rank among countries in census population",
"example": "3rd"
},
"population_density_km2": {
"label": "Population density per km²",
"type": "number",
"example": "20,212",
"description": "Population density per square kilometer"
},
"population_density_sq_mi": {
"label": "Population density per mi²",
"type": "number",
"description": "Population density per square mile",
"example": "20,212"
},
"pop_den_footnote": {
"label": "Population density footnote",
"type": "string",
"description": "footnote about the population density statistic"
},
"population_density_rank": {
"label": "Population density rank",
"type": "string",
"required": false,
"description": "Rank among countries in population density",
"example": "3rd"
},
"FR_metropole_population": {
"label": "FR_metropole_population",
"type": "string",
"required": false,
"deprecated": true
},
"FR_total_population_estimate_year": {
"label": "FR_total_population_estimate_year",
"type": "string",
"deprecated": true
},
"FR_foot": {
"label": "FR_foot",
"type": "string",
"deprecated": true
},
"FR_total_population_estimate": {
"label": "FR_total_population_estimate",
"type": "string",
"deprecated": true
},
"FR_total_population_estimate_rank": {
"label": "FR_total_population_estimate_rank",
"type": "string",
"deprecated": true
},
"FR_metropole_population_estimate_rank": {
"label": "FR_metropole_population_estimate_rank",
"type": "string",
"deprecated": true
},
"FR_foot5": {
"label": "FR_foot5",
"type": "string",
"required": false,
"deprecated": true
},
"GDP_PPP": {
"label": "GDP (PPP)",
"type": "line",
"required": false,
"description": "Gross domestic product (purchasing power parity)",
"example": "$554.855 billion",
"suggested": true
},
"GDP_PPP_year": {
"label": "GDP (PPP) year cited",
"type": "number",
"required": false,
"description": "Year the GDP (PPP) statistic is cited from",
"example": "2018",
"suggested": true
},
"GDP_PPP_rank": {
"label": "GDP (PPP) rank",
"type": "string",
"required": false,
"description": "Rank among countries for GDP PPP",
"example": "39th"
},
"GDP_PPP_per_capita": {
"label": "GDP_PPP_per_capita",
"type": "line",
"required": false,
"description": "Gross domestic product (purchasing power parity) per capita",
"example": "$98,014"
},
"GDP_PPP_per_capita_rank": {
"label": "GDP (PPP) per capita rank",
"type": "line",
"required": false,
"description": "Rank among countries for GDP PPP per capita",
"example": "3rd"
},
"GDP_nominal": {
"label": "GDP (nominal)",
"type": "string",
"required": false,
"description": "Nominal GDP of the country"
},
"GDP_nominal_year": {
"label": "GDP (nominal) year",
"type": "number",
"required": false,
"description": "Year cited for the country's nominal GDP statistic"
},
"GDP_nominal_rank": {
"label": "GDP (nominal) rank",
"type": "string",
"required": false,
"description": "Rank among countries for nominal GDP",
"example": "41st"
},
"GDP_nominal_per_capita": {
"label": "GDP (nominal) per capita",
"type": "string",
"required": false,
"description": "Nominal GDP per capita in the country",
"example": "$61,766"
},
"GDP_nominal_per_capita_rank": {
"label": "GDP (nominal) per capita rank",
"type": "string",
"required": false,
"description": "Rank among countries for nominal GDP per capita",
"example": "8th"
},
"Gini": {
"label": "Gini index",
"type": "number",
"required": false,
"description": "Gini index of the country",
"example": "46.4"
},
"Gini_year": {
"label": "Gini index year cited",
"type": "number",
"required": false,
"description": "Year the gini index statistic is cited for",
"example": "2014"
},
"Gini_change": {
"label": "Gini change",
"type": "string",
"required": false,
"description": "\"increase\" or \"decrease\" (over last year)",
"example": "increase"
},
"Gini_ref": {
"label": "Gini index reference",
"type": "line",
"required": false,
"description": "Reference for cited Gini index statistic"
},
"Gini_rank": {
"label": "Gini rank",
"type": "string",
"required": false,
"description": "Rank of Gini indices",
"example": "30th"
},
"HDI": {
"label": "Human development index",
"type": "number",
"required": false,
"example": "0.932",
"suggested": true,
"description": "The country's human development index (HDI)"
},
"HDI_year": {
"label": "Human Development Index year",
"type": "number",
"required": false,
"description": "Year to which the HDI statistic refers",
"example": "2017",
"suggested": true
},
"HDI_change": {
"label": "HDI change",
"type": "string",
"required": false,
"description": "\"increase\" or \"decrease\" from previous year",
"example": "increase"
},
"HDI_ref": {
"label": "Human Development Index reference",
"type": "line",
"required": false,
"description": "Reference for HDI statistic"
},
"HDI_rank": {
"label": "Human development index rank",
"type": "string",
"required": false,
"description": "Rank among countries for HDI score",
"example": "9th"
},
"currency": {
"label": "Currency",
"type": "line",
"required": false,
"description": "National/official currency name and article link",
"example": "[[Singapore dollar]]"
},
"currency_code": {
"label": "Currency code",
"type": "line",
"required": false,
"description": "Currency code of the official currency",
"example": "SGD"
},
"time_zone": {
"label": "Time zone",
"type": "line",
"required": false,
"description": "National time zone(s)",
"example": "[[Singapore Standard Time|SST]]"
},
"utc_offset": {
"label": "UTC offsets",
"type": "string",
"example": "−4 to −12, +10, +11"
},
"utc_offset_DST": {
"label": "UTF offsets (DST)",
"type": "string",
"example": "−4 to −10"
},
"DST_note": {
"label": "DST note",
"type": "string",
"example": "{{efn|name=\"time\"}}"
},
"time_zone_DST": {
"label": "Time zones (DST)",
"type": "string",
"required": false
},
"DST": {
"label": "Daylight savings time",
"type": "string",
"required": false
},
"antipodes": {
"label": "antipodes",
"type": "string",
"required": false
},
"date_format": {
"label": "Date format",
"type": "string",
"required": false
},
"drives_on": {
"label": "drives on",
"type": "string",
"required": false
},
"rail gauge": {
"label": "Rail gauge",
"type": "string",
"required": false
},
"calling_code": {
"label": "Calling code",
"type": "string",
"example": "+1"
},
"patron_saint": {
"label": "Patron saint",
"aliases": [
"patron_saints"
],
"type": "string",
"required": false
},
"iso3166code": {
"label": "ISO 3166 code",
"type": "string",
"description": "ISO 3166 code for the country",
"example": "US"
},
"cctld": {
"label": "Country code top level domain",
"type": "string",
"example": ".se"
},
"official_website": {
"label": "official_website",
"type": "string",
"required": false,
"description": "For geopolitical entities: do not use government website (e.g. usa.gov) for countries (e.g. [[United States]])."
},
"footnote_a": {
"label": "footnote_a",
"type": "string",
"required": false
},
"footnote_b": {
"label": "footnote_b",
"type": "string",
"required": false
},
"footnote_c": {
"label": "footnote_c",
"type": "string",
"required": false
},
"footnote_d": {
"label": "footnote_d",
"type": "string",
"required": false
},
"footnote_e": {
"label": "footnote_e",
"type": "string",
"required": false
},
"footnote_f": {
"label": "footnote_f",
"type": "string",
"required": false
},
"footnote_g": {
"label": "footnote_g",
"type": "string",
"required": false
},
"footnote_h": {
"label": "footnote_h",
"type": "string",
"required": false
},
"footnote1": {
"label": "footnote1",
"type": "string",
"required": false
},
"footnote2": {
"label": "footnote2",
"type": "string",
"required": false
},
"footnote3": {
"label": "footnote3",
"type": "string",
"required": false
},
"footnote4": {
"label": "footnote4",
"type": "string",
"required": false
},
"footnote5": {
"label": "footnote5",
"type": "string",
"required": false
},
"footnote6": {
"label": "footnote6",
"type": "string",
"required": false
},
"footnote7": {
"label": "footnote7",
"type": "string",
"required": false
},
"footnote8": {
"label": "footnote8",
"type": "string",
"required": false
},
"footnotes": {
"label": "footnotes",
"type": "string",
"required": false
},
"navbar": {
"label": "navbar",
"type": "string",
"required": false
},
"micronation": {},
"status": {
"type": "line"
},
"status_text": {
"type": "line"
},
"empire": {},
"year_end": {
"type": "number"
},
"year_exile_start": {
"type": "number"
},
"year_exile_end": {
"type": "number"
},
"life_span": {
"type": "line"
},
"year_start": {
"type": "number"
},
"flag_size": {
"type": "line"
},
"flag_alt": {
"type": "string"
},
"flag_alt2": {
"type": "string"
},
"flag_type": {
"type": "string"
},
"coa_size": {
"type": "line"
},
"englishmotto": {
"type": "string",
"label": "Motto in English",
"description": "The country's motto translated into English"
},
"image_map_size": {
"type": "line"
},
"image_map_alt": {
"type": "string"
},
"image_map_caption": {
"type": "content"
},
"image_map2_size": {
"type": "line"
},
"image_map2_alt": {
"type": "string"
},
"image_map2_caption": {
"type": "content"
},
"loctext": {
"type": "string"
},
"capital_exile": {
"type": "string"
},
"recognized_languages": {
"aliases": [
"recognised_languages"
],
"type": "content",
"label": "Recognized languages",
"description": "Recognized languages of the country, possibly in list format"
},
"recognized_national_languages": {
"aliases": [
"recognised_national_languages"
],
"type": "content",
"label": "Recognized national languages",
"description": "Recognized national languages of the country, possibly in list format"
},
"recognized_regional_languages": {
"aliases": [
"recognised_regional_languages"
],
"type": "content",
"label": "Recognized regional languages",
"description": "Recognized regional languages of the country, possibly in list format"
},
"common_languages": {
"type": "content",
"label": "Common languages",
"description": "Common languages of the country, possibly in list format",
"example": "{{ublist|[[English language|English]]|[[Spanish language|Spanish]]|[[Chinese language|Chinese]]}}"
},
"religion_year": {
"type": "number",
"label": "Religion statistic year",
"description": "Year the religion statistic is from",
"example": "2015"
},
"leader_title15": {
"type": "line"
},
"leader_name15": {
"type": "line"
},
"title_leader": {
"type": "line",
"label": "Leader's title",
"description": "Title of the country's leader",
"example": "[[President of the United States|President]]"
},
"year_leader1": {
"type": "line",
"label": "Leader 1 years",
"description": "Years the first leader reigned",
"example": "1776-1795"
},
"leader1": {
"type": "line",
"label": "Leader 1",
"description": "The first leader of the country",
"example": "[[George Washington]]"
},
"year_leader2": {
"type": "line"
},
"leader2": {
"type": "line"
},
"year_leader3": {
"type": "line"
},
"leader3": {
"type": "line"
},
"year_leader4": {
"type": "line"
},
"leader4": {
"type": "line"
},
"year_leader5": {
"type": "line"
},
"leader5": {
"type": "line"
},
"year_leader6": {
"type": "line"
},
"leader6": {
"type": "line"
},
"year_leader7": {
"type": "line"
},
"leader7": {
"type": "line"
},
"year_leader8": {
"type": "line"
},
"leader8": {
"type": "line"
},
"year_leader9": {
"type": "line"
},
"leader9": {
"type": "line"
},
"year_leader10": {
"type": "line"
},
"leader10": {
"type": "line"
},
"year_leader11": {
"type": "line",
"label": "Leader 11 years",
"description": "Year of leader 11",
"example": "1980-1987"
},
"leader11": {
"type": "line"
},
"title_representative": {
"type": "line",
"label": "Representative title",
"description": "Title of the country's representative",
"example": "[[Governor General of Canada|Governor General]]"
},
"year_representative1": {
"type": "line",
"label": "Representative 1 years",
"description": "Year of representative 1",
"example": "1492-1506"
},
"representative1": {
"type": "line",
"label": "Representative 1",
"description": "First representative"
},
"year_representative2": {
"type": "line",
"label": "Representative 2 years",
"description": "Year of representative 2",
"example": "1552-1580"
},
"representative2": {
"type": "line"
},
"year_representative3": {
"type": "line",
"label": "Representative 3 years",
"description": "Year of representative 3",
"example": "1652-1666"
},
"representative3": {
"type": "line"
},
"year_representative4": {
"type": "line",
"label": "Representative 4 year",
"description": "Year of representative 4",
"example": "1652-1666"
},
"representative4": {
"type": "line"
},
"year_representative5": {
"type": "line",
"label": "Representative 5 years",
"description": "Year of representative 5",
"example": "1652-1666"
},
"representative5": {
"type": "line"
},
"title_deputy": {
"type": "line"
},
"year_deputy1": {
"type": "line",
"label": "Deputy 1 years",
"description": "Years of the 1st deputy",
"example": "2006-2009"
},
"deputy1": {
"type": "line",
"label": "Deputy 1",
"description": "First deputy"
},
"year_deputy2": {
"type": "line",
"label": "Deputy 2 years",
"description": "Years of the 2nd deputy",
"example": "2009-2011"
},
"deputy2": {
"type": "line"
},
"year_deputy3": {
"type": "line",
"label": "Deputy 3 years",
"description": "Years of the 3rd deputy",
"example": "2011-2013"
},
"deputy3": {
"type": "line"
},
"year_deputy4": {
"type": "line",
"label": "Deputy 4 years",
"description": "Years of the 4th deputy",
"example": "2013-2016"
},
"deputy4": {
"type": "line"
},
"year_deputy5": {
"type": "line",
"label": "Deputy 5 years",
"description": "Years of the 5th deputy",
"example": "2016-2018"
},
"deputy5": {
"type": "line"
},
"year_deputy6": {
"type": "line",
"label": "Deputy 6 years",
"description": "Years of the 6th deputy",
"example": "2018-"
},
"deputy6": {
"type": "line"
},
"type_house1": {
"type": "line"
},
"house1": {
"type": "line"
},
"type_house2": {
"type": "line"
},
"house2": {
"type": "line"
},
"event_pre": {
"type": "line"
},
"established_event13": {
"label": "Establishment event 13",
"type": "line"
},
"established_date13": {
"label": "Establishment date 13",
"type": "date"
},
"established_event14": {
"type": "line"
},
"established_date14": {
"type": "line"
},
"established_event15": {
"type": "line"
},
"established_date15": {
"type": "line"
},
"event_start": {
"label": "Starting event",
"description": "The foundational event of the country",
"example": "Established",
"type": "string"
},
"date_pre": {},
"date_start": {
"label": "Date established",
"description": "Date the country, dynasty or organization was established (date of event_start)",
"example": "601 CE",
"type": "string"
},
"event1": {
"label": "Event 1",
"description": "First significant event",
"example": "Signing of the [[Chanyuan Treaty]] with [[Liao dynasty|Liao]]",
"type": "string"
},
"date_event1": {
"label": "Event 1 date",
"description": "Date of the first significant event",
"example": "601",
"type": "date"
},
"event2": {
"label": "Event 2",
"description": "Second significant event",
"example": "[[Alliance Conducted at Sea|Alliance with Jin]]",
"type": "string"
},
"date_event2": {
"label": "Event 2 date",
"description": "Date of the second significant event",
"type": "string"
},
"event3": {
"label": "Event 3",
"description": "Third significant event",
"example": "[[Jingkang Incident]]",
"type": "string"
},
"date_event3": {},
"event4": {
"label": "Event 4",
"description": "Fourth significant event",
"example": "Beginning of [[Mongol conquest of the Song dynasty|Mongol invasion]]",
"type": "string"
},
"date_event4": {},
"event5": {
"label": "Event 5",
"description": "Fifth significant event",
"example": "Fall of [[Hangzhou|Lin'an]]",
"type": "string"
},
"date_event5": {},
"event6": {
"label": "Event 6",
"description": "Sixth significant event",
"example": "[[Krystallnacht]]",
"type": "string"
},
"date_event6": {},
"event_end": {
"label": "Event ending the country",
"description": "The event that caused the country to stop existing or transition, if applicable",
"example": "[[Battle of Yamen]] (end of dynasty)",
"type": "string"
},
"date_end": {
"label": "End date",
"description": "Date the country stopped existing or transitioned, if applicable",
"example": "1433",
"type": "date"
},
"event_post": {},
"date_post": {},
"area_ha": {},
"area_acre": {},
"area_land_km2": {},
"area_land_ha": {},
"area_land_sq_mi": {},
"area_land_acre": {},
"area_water_km2": {},
"area_water_ha": {},
"area_water_sq_mi": {},
"area_water_acre": {},
"stat_area1": {},
"stat_area2": {},
"stat_area3": {},
"stat_area4": {},
"stat_area5": {},
"area_land_footnote": {},
"area_water_footnote": {},
"stat_year1": {},
"ref_area1": {},
"stat_year2": {},
"ref_area2": {},
"stat_year3": {},
"ref_area3": {},
"stat_year4": {},
"ref_area4": {},
"stat_year5": {
"label": "Statistic 5 year",
"description": "Year of statistic 5",
"example": "1933",
"type": "number"
},
"ref_area5": {},
"stat_pop1": {},
"stat_pop2": {},
"stat_pop3": {},
"stat_pop4": {},
"stat_pop5": {},
"ref_pop1": {},
"ref_pop2": {},
"ref_pop3": {},
"ref_pop4": {},
"ref_pop5": {},
"nummembers": {},
"p1": {},
"s1": {},
"flag_p1": {},
"image_p1": {},
"border_p1": {},
"flag_p2": {},
"image_p2": {},
"p2": {},
"border_p2": {},
"flag_p3": {},
"image_p3": {},
"p3": {},
"border_p3": {},
"flag_p4": {},
"image_p4": {},
"p4": {},
"border_p4": {},
"flag_p5": {},
"image_p5": {},
"p5": {},
"border_p5": {},
"flag_p6": {},
"image_p6": {},
"p6": {},
"border_p6": {},
"flag_p7": {},
"image_p7": {},
"p7": {},
"border_p7": {},
"flag_p8": {},
"image_p8": {},
"p8": {},
"border_p8": {},
"flag_p9": {},
"image_p9": {},
"p9": {},
"border_p9": {},
"flag_p10": {},
"image_p10": {},
"p10": {},
"border_p10": {},
"flag_p11": {},
"image_p11": {},
"p11": {},
"border_p11": {},
"flag_p12": {},
"image_p12": {},
"p12": {},
"border_p12": {},
"flag_p13": {},
"image_p13": {},
"p13": {},
"border_p13": {},
"flag_p14": {},
"image_p14": {},
"p14": {},
"border_p14": {},
"flag_p15": {},
"image_p15": {},
"p15": {},
"border_p15": {},
"flag_s1": {},
"image_s1": {},
"border_s1": {},
"flag_s2": {},
"image_s2": {},
"s2": {},
"border_s2": {},
"flag_s3": {},
"image_s3": {},
"s3": {},
"border_s3": {},
"flag_s4": {},
"image_s4": {},
"s4": {},
"border_s4": {},
"flag_s5": {},
"image_s5": {},
"s5": {},
"border_s5": {},
"flag_s6": {},
"image_s6": {},
"s6": {},
"border_s6": {},
"flag_s7": {},
"image_s7": {},
"s7": {},
"border_s7": {},
"flag_s8": {},
"image_s8": {},
"s8": {},
"border_s8": {},
"flag_s9": {},
"image_s9": {},
"s9": {},
"border_s9": {},
"flag_s10": {},
"image_s10": {},
"s10": {},
"border_s10": {},
"flag_s11": {},
"image_s11": {},
"s11": {},
"border_s11": {},
"flag_s12": {},
"image_s12": {},
"s12": {},
"border_s12": {},
"flag_s13": {},
"image_s13": {},
"s13": {},
"border_s13": {},
"flag_s14": {},
"image_s14": {},
"s14": {},
"border_s14": {},
"flag_s15": {},
"image_s15": {},
"s15": {},
"border_s15": {},
"today": {
"label": "Today part of",
"description": "For former countries, a list of countries of which the former country's territories are now part, if no more than four.",
"example": "{{plainlist| *[[Czech Republic]] *[[Denmark]] *[[France]] *[[Germany]] }}",
"type": "content",
"suggested": true
},
"footnotes2": {},
"symbol_caption": {},
"nested": {}
},
"paramOrder": [
"conventional_long_name",
"common_name",
"linking_name",
"native_name",
"name",
"image_flag",
"flag_width",
"alt_flag",
"flag_border",
"flag_caption",
"image_flag2",
"alt_flag2",
"flag2_border",
"image_coat",
"symbol_width",
"alt_coat",
"symbol_type",
"symbol_type_article",
"text_symbol",
"text_symbol_type",
"other_symbol",
"other_symbol_type",
"national_motto",
"motto",
"national_anthem",
"anthem",
"royal_anthem",
"image_map",
"map_width",
"alt_map",
"map_caption",
"image_map2",
"map2_width",
"alt_map2",
"map_caption2",
"image_map3",
"map3_width",
"alt_map3",
"map_caption3",
"capital",
"capital_type",
"coordinates",
"latd",
"latm",
"latNS",
"longd",
"longm",
"longEW",
"admin_center",
"admin_center_type",
"capital2",
"capital_type2",
"admin_center2",
"admin_center_type2",
"largest_city",
"largest_settlement",
"largest_settlement_type",
"official_languages",
"national_languages",
"regional_languages",
"languages_type",
"languages_sub",
"languages",
"languages2_type",
"languages2_sub",
"languages2",
"ethnic_groups",
"ethnic_groups_ref",
"ethnic_groups_year",
"religion",
"religion_ref",
"demonym",
"org_type",
"membership",
"membership_type",
"government_type",
"politics_link",
"leader_title1",
"leader_name1",
"leader_title2",
"leader_name2",
"leader_title3",
"leader_name3",
"leader_title4",
"leader_name4",
"leader_title5",
"leader_name5",
"leader_title6",
"leader_name6",
"leader_title7",
"leader_name7",
"leader_title8",
"leader_name8",
"leader_title9",
"leader_name9",
"leader_title10",
"leader_name10",
"leader_title11",
"leader_name11",
"leader_title12",
"leader_name12",
"leader_title13",
"leader_name13",
"leader_title14",
"leader_name14",
"legislature",
"upper_house",
"lower_house",
"sovereignty_type",
"sovereignty_note",
"established",
"established_event1",
"established_date1",
"established_event2",
"established_date2",
"established_event3",
"established_date3",
"established_event4",
"established_date4",
"established_event5",
"established_date5",
"established_event6",
"established_date6",
"established_event7",
"established_date7",
"established_event8",
"established_date8",
"established_event9",
"established_date9",
"established_event10",
"established_date10",
"established_event11",
"established_date11",
"established_event12",
"established_date12",
"area_km2",
"area_link",
"area_label",
"FR_foot4",
"area_footnote",
"area_rank",
"area_sq_mi",
"percent_water",
"area_label2",
"area_data2",
"area_label3",
"area_data3",
"FR_metropole",
"FR_foot2",
"FR_IGN_area_km2",
"FR_IGN_area_rank",
"FR_IGN_area_sq_mi",
"FR_foot3",
"FR_cadastre_area_km2",
"FR_cadastre_area_rank",
"FR_cadastre_area_sq_mi",
"population_estimate",
"population_census",
"population_link",
"population_estimate_year",
"population_estimate_rank",
"population_label2",
"population_data2",
"population_label3",
"population_data3",
"population_census_year",
"population_census_rank",
"population_density_km2",
"population_density_sq_mi",
"pop_den_footnote",
"population_density_rank",
"FR_metropole_population",
"FR_total_population_estimate_year",
"FR_foot",
"FR_total_population_estimate",
"FR_total_population_estimate_rank",
"FR_metropole_population_estimate_rank",
"FR_foot5",
"GDP_PPP",
"GDP_PPP_year",
"GDP_PPP_rank",
"GDP_PPP_per_capita",
"GDP_PPP_per_capita_rank",
"GDP_nominal",
"GDP_nominal_year",
"GDP_nominal_rank",
"GDP_nominal_per_capita",
"GDP_nominal_per_capita_rank",
"Gini",
"Gini_year",
"Gini_change",
"Gini_ref",
"Gini_rank",
"HDI",
"HDI_year",
"HDI_change",
"HDI_ref",
"HDI_rank",
"currency",
"currency_code",
"time_zone",
"utc_offset",
"utc_offset_DST",
"DST_note",
"time_zone_DST",
"DST",
"antipodes",
"date_format",
"drives_on",
"rail gauge",
"calling_code",
"patron_saint",
"iso3166code",
"cctld",
"official_website",
"footnote_a",
"footnote_b",
"footnote_c",
"footnote_d",
"footnote_e",
"footnote_f",
"footnote_g",
"footnote_h",
"footnote1",
"footnote2",
"footnote3",
"footnote4",
"footnote5",
"footnote6",
"footnote7",
"footnote8",
"footnotes",
"navbar",
"micronation",
"status",
"status_text",
"empire",
"year_end",
"year_exile_start",
"year_exile_end",
"life_span",
"year_start",
"flag_size",
"flag_alt",
"flag_alt2",
"flag_type",
"coa_size",
"englishmotto",
"image_map_size",
"image_map_alt",
"image_map_caption",
"image_map2_size",
"image_map2_alt",
"image_map2_caption",
"loctext",
"capital_exile",
"recognized_languages",
"recognized_national_languages",
"recognized_regional_languages",
"common_languages",
"religion_year",
"leader_title15",
"leader_name15",
"title_leader",
"year_leader1",
"leader1",
"year_leader2",
"leader2",
"year_leader3",
"leader3",
"year_leader4",
"leader4",
"year_leader5",
"leader5",
"year_leader6",
"leader6",
"year_leader7",
"leader7",
"year_leader8",
"leader8",
"year_leader9",
"leader9",
"year_leader10",
"leader10",
"year_leader11",
"leader11",
"title_representative",
"year_representative1",
"representative1",
"year_representative2",
"representative2",
"year_representative3",
"representative3",
"year_representative4",
"representative4",
"year_representative5",
"representative5",
"title_deputy",
"year_deputy1",
"deputy1",
"year_deputy2",
"deputy2",
"year_deputy3",
"deputy3",
"year_deputy4",
"deputy4",
"year_deputy5",
"deputy5",
"year_deputy6",
"deputy6",
"type_house1",
"house1",
"type_house2",
"house2",
"established_event13",
"established_date13",
"established_event14",
"established_date14",
"established_event15",
"established_date15",
"event_pre",
"date_pre",
"event_start",
"date_start",
"event1",
"date_event1",
"event2",
"date_event2",
"event3",
"date_event3",
"event4",
"date_event4",
"event5",
"date_event5",
"event6",
"date_event6",
"event_end",
"date_end",
"event_post",
"date_post",
"area_ha",
"area_acre",
"area_land_km2",
"area_land_ha",
"area_land_sq_mi",
"area_land_acre",
"area_water_km2",
"area_water_ha",
"area_water_sq_mi",
"area_water_acre",
"stat_area1",
"stat_area2",
"stat_area3",
"stat_area4",
"stat_area5",
"area_land_footnote",
"area_water_footnote",
"stat_year1",
"ref_area1",
"stat_year2",
"ref_area2",
"stat_year3",
"ref_area3",
"stat_year4",
"ref_area4",
"stat_year5",
"ref_area5",
"stat_pop1",
"stat_pop2",
"stat_pop3",
"stat_pop4",
"stat_pop5",
"ref_pop1",
"ref_pop2",
"ref_pop3",
"ref_pop4",
"ref_pop5",
"nummembers",
"p1",
"s1",
"flag_p1",
"image_p1",
"border_p1",
"flag_p2",
"image_p2",
"p2",
"border_p2",
"flag_p3",
"image_p3",
"p3",
"border_p3",
"flag_p4",
"image_p4",
"p4",
"border_p4",
"flag_p5",
"image_p5",
"p5",
"border_p5",
"flag_p6",
"image_p6",
"p6",
"border_p6",
"flag_p7",
"image_p7",
"p7",
"border_p7",
"flag_p8",
"image_p8",
"p8",
"border_p8",
"flag_p9",
"image_p9",
"p9",
"border_p9",
"flag_p10",
"image_p10",
"p10",
"border_p10",
"flag_p11",
"image_p11",
"p11",
"border_p11",
"flag_p12",
"image_p12",
"p12",
"border_p12",
"flag_p13",
"image_p13",
"p13",
"border_p13",
"flag_p14",
"image_p14",
"p14",
"border_p14",
"flag_p15",
"image_p15",
"p15",
"border_p15",
"flag_s1",
"image_s1",
"border_s1",
"flag_s2",
"image_s2",
"s2",
"border_s2",
"flag_s3",
"image_s3",
"s3",
"border_s3",
"flag_s4",
"image_s4",
"s4",
"border_s4",
"flag_s5",
"image_s5",
"s5",
"border_s5",
"flag_s6",
"image_s6",
"s6",
"border_s6",
"flag_s7",
"image_s7",
"s7",
"border_s7",
"flag_s8",
"image_s8",
"s8",
"border_s8",
"flag_s9",
"image_s9",
"s9",
"border_s9",
"flag_s10",
"image_s10",
"s10",
"border_s10",
"flag_s11",
"image_s11",
"s11",
"border_s11",
"flag_s12",
"image_s12",
"s12",
"border_s12",
"flag_s13",
"image_s13",
"s13",
"border_s13",
"flag_s14",
"image_s14",
"s14",
"border_s14",
"flag_s15",
"image_s15",
"s15",
"border_s15",
"today",
"footnotes2",
"symbol_caption",
"nested"
]
}
</templatedata>
{{cob}}
<includeonly>{{Sandbox other||
<!--Categories below this line, please; interwikis at Wikidata-->
[[Category:Country infobox templates| ]]
[[Category:Templates that add a tracking category]]
}}</includeonly>
8cbf1ee3b4b56465bfd9368aea3d43fd02b80e66
Module:Message box/ombox.css
828
315
694
635
2023-09-14T11:34:45Z
Ilovethehitgameomori
2
1 revision imported
sanitized-css
text/css
/* {{pp|small=y}} */
.ombox {
margin: 4px 0;
border-collapse: collapse;
border: 1px solid #a2a9b1; /* Default "notice" gray */
background-color: #f8f9fa;
box-sizing: border-box;
}
/* For the "small=yes" option. */
.ombox.mbox-small {
font-size: 88%;
line-height: 1.25em;
}
.ombox-speedy {
border: 2px solid #b32424; /* Red */
background-color: #fee7e6; /* Pink */
}
.ombox-delete {
border: 2px solid #b32424; /* Red */
}
.ombox-content {
border: 1px solid #f28500; /* Orange */
}
.ombox-style {
border: 1px solid #fc3; /* Yellow */
}
.ombox-move {
border: 1px solid #9932cc; /* Purple */
}
.ombox-protection {
border: 2px solid #a2a9b1; /* Gray-gold */
}
.ombox .mbox-text {
border: none;
/* @noflip */
padding: 0.25em 0.9em;
width: 100%;
}
.ombox .mbox-image {
border: none;
/* @noflip */
padding: 2px 0 2px 0.9em;
text-align: center;
}
.ombox .mbox-imageright {
border: none;
/* @noflip */
padding: 2px 0.9em 2px 0;
text-align: center;
}
/* An empty narrow cell */
.ombox .mbox-empty-cell {
border: none;
padding: 0;
width: 1px;
}
.ombox .mbox-invalid-type {
text-align: center;
}
@media (min-width: 720px) {
.ombox {
margin: 4px 10%;
}
.ombox.mbox-small {
/* @noflip */
clear: right;
/* @noflip */
float: right;
/* @noflip */
margin: 4px 0 4px 1em;
width: 238px;
}
}
8fe3df4bb607e699eab2dbd23bd4a1a446391002
Template:Hlist/styles.css
10
318
696
663
2023-09-14T11:34:46Z
Ilovethehitgameomori
2
1 revision imported
sanitized-css
text/css
/* {{pp-protected|reason=match parent|small=yes}} */
/*
* hlist styles are defined in core and Minerva and differ in Minerva. The
* current definitions here (2023-01-01) are sufficient to override Minerva
* without use of the hlist-separated class. The most problematic styles were
* related to margin, padding, and the bullet. Check files listed at
* [[MediaWiki talk:Common.css/to do#hlist-separated]]
*/
/*
* TODO: When the majority of readership supports it (or some beautiful world
* in which grade C support is above the minimum threshold), use :is()
*/
.hlist dl,
.hlist ol,
.hlist ul {
margin: 0;
padding: 0;
}
/* Display list items inline */
.hlist dd,
.hlist dt,
.hlist li {
/*
* don't trust the note that says margin doesn't work with inline
* removing margin: 0 makes dds have margins again
* We also want to reset margin-right in Minerva
*/
margin: 0;
display: inline;
}
/* Display requested top-level lists inline */
.hlist.inline,
.hlist.inline dl,
.hlist.inline ol,
.hlist.inline ul,
/* Display nested lists inline */
.hlist dl dl,
.hlist dl ol,
.hlist dl ul,
.hlist ol dl,
.hlist ol ol,
.hlist ol ul,
.hlist ul dl,
.hlist ul ol,
.hlist ul ul {
display: inline;
}
/* Hide empty list items */
.hlist .mw-empty-li {
display: none;
}
/* TODO: :not() can maybe be used here to remove the later rule. naive test
* seems to work. more testing needed. like so:
*.hlist dt:not(:last-child)::after {
* content: ": ";
*}
*.hlist dd:not(:last-child)::after,
*.hlist li:not(:last-child)::after {
* content: " · ";
* font-weight: bold;
*}
*/
/* Generate interpuncts */
.hlist dt::after {
content: ": ";
}
.hlist dd::after,
.hlist li::after {
content: " · ";
font-weight: bold;
}
.hlist dd:last-child::after,
.hlist dt:last-child::after,
.hlist li:last-child::after {
content: none;
}
/* Add parentheses around nested lists */
.hlist dd dd:first-child::before,
.hlist dd dt:first-child::before,
.hlist dd li:first-child::before,
.hlist dt dd:first-child::before,
.hlist dt dt:first-child::before,
.hlist dt li:first-child::before,
.hlist li dd:first-child::before,
.hlist li dt:first-child::before,
.hlist li li:first-child::before {
content: " (";
font-weight: normal;
}
.hlist dd dd:last-child::after,
.hlist dd dt:last-child::after,
.hlist dd li:last-child::after,
.hlist dt dd:last-child::after,
.hlist dt dt:last-child::after,
.hlist dt li:last-child::after,
.hlist li dd:last-child::after,
.hlist li dt:last-child::after,
.hlist li li:last-child::after {
content: ")";
font-weight: normal;
}
/* Put ordinals in front of ordered list items */
.hlist ol {
counter-reset: listitem;
}
.hlist ol > li {
counter-increment: listitem;
}
.hlist ol > li::before {
content: " " counter(listitem) "\a0";
}
.hlist dd ol > li:first-child::before,
.hlist dt ol > li:first-child::before,
.hlist li ol > li:first-child::before {
content: " (" counter(listitem) "\a0";
}
8c9dd9c9c00f30eead17fe10f51d183333e81f33
Template:Hidden begin/styles.css
10
331
697
2023-09-14T11:36:57Z
Ilovethehitgameomori
2
Created page with "/* {{pp-template}} */ .hidden-begin { box-sizing: border-box; width: 100%; padding: 5px; border: none; font-size: 95%; } .hidden-title { font-weight: bold; line-height: 1.6; text-align: left; } .hidden-content { text-align: left; }"
sanitized-css
text/css
/* {{pp-template}} */
.hidden-begin {
box-sizing: border-box;
width: 100%;
padding: 5px;
border: none;
font-size: 95%;
}
.hidden-title {
font-weight: bold;
line-height: 1.6;
text-align: left;
}
.hidden-content {
text-align: left;
}
d4ab5680ca52bee10cfd2992f2adc45452c5ab37
Template:Plainlist/styles.css
10
332
698
2023-09-14T11:50:36Z
Ilovethehitgameomori
2
Created page with "/* {{pp-template|small=yes}} */ .plainlist ol, .plainlist ul { line-height: inherit; list-style: none; margin: 0; padding: 0; /* Reset Minerva default */ } .plainlist ol li, .plainlist ul li { margin-bottom: 0; }"
sanitized-css
text/css
/* {{pp-template|small=yes}} */
.plainlist ol,
.plainlist ul {
line-height: inherit;
list-style: none;
margin: 0;
padding: 0; /* Reset Minerva default */
}
.plainlist ol li,
.plainlist ul li {
margin-bottom: 0;
}
51706efa229ff8794c0d94f260a208e7c5e6ec30
Template:Infobox country/Source
10
333
699
2023-09-14T11:59:14Z
Ilovethehitgameomori
2
Created page with "{{Infobox country |conventional_long_name = Template Land |common_name = Template Land |image_flag = Image.jpg |alt_flag = Vertical tricolor (green, red, yellow) with a five-pointed gold star in the center of the red. |image_coat = Image.jpg |symbol_type = Coat of arms |official_languages = Templatian, Examplinese |demonym = Templatian |capital = [[Capital city name]] |largest_city = [[Largest city name]] |government_type = [[Ideology]] |leader_title1 = List of heads o..."
wikitext
text/x-wiki
{{Infobox country
|conventional_long_name = Template Land
|common_name = Template Land
|image_flag = Image.jpg
|alt_flag = Vertical tricolor (green, red, yellow) with a five-pointed gold star in the center of the red.
|image_coat = Image.jpg
|symbol_type = Coat of arms
|official_languages = Templatian, Examplinese
|demonym = Templatian
|capital = [[Capital city name]]
|largest_city = [[Largest city name]]
|government_type = [[Ideology]]
|leader_title1 = [[List of heads of state of Cameroon|President]]
|leader_name1 = [[John Doe]]
|area_rank = 54th <!--Demographic Yearbook 1.-->
|area_km2 = 475,442
|area_sq_mi = 183,568 <!--Do not remove per [[WP:MOSNUM]]-->
}}
9478666886ce8962b7fdb2e75952e78ec8fcd86e
Nation template
0
7
700
14
2023-09-14T12:00:57Z
Ilovethehitgameomori
2
wikitext
text/x-wiki
{{Infobox country
|conventional_long_name = Template Land
|common_name = Template Land
|image_flag = Image.jpg
|alt_flag = Vertical tricolor (green, red, yellow) with a five-pointed gold star in the center of the red.
|image_coat = Image.jpg
|symbol_type = Coat of arms
|official_languages = Templatian, Examplinese
|demonym = Templatian
|capital = [[Capital city name]]
|largest_city = [[Largest city name]]
|government_type = [[Ideology]]
|leader_title1 = [[List of heads of state of Cameroon|President]]
|leader_name1 = [[John Doe]]
|area_rank = 54th <!--Demographic Yearbook 1.-->
|area_km2 = 475,442
|area_sq_mi = 183,568 <!--Do not remove per [[WP:MOSNUM]]-->
}}
( Information about government, minimal history mention, leader info, etc. )
== Etymology ==
( The meaning of the name of your nation )
== History ==
( History of your nation )
== Politics and state organization ==
( Politics, ideology/state organization/provinces )
== Culture ==
( Description of your culture )
== Army structure ==
( Self explanatory )
e5339dae8959f94bd48a226866a6bf73532b826e
Template:See also
10
334
702
701
2023-09-14T17:35:21Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
<includeonly>{{#invoke:Labelled list hatnote|labelledList|See also}}</includeonly><noinclude>
{{documentation}}
<!-- Categories go on the /doc subpage, and interwikis go on Wikidata. -->
</noinclude>
74d2ab6a0df5605fbe2085c405925ec659be52b7
Template:Icon
10
336
704
703
2023-09-14T17:35:26Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{#invoke:Icon|main}}<noinclude>
{{documentation}}
<!-- Categories go on the /doc subpage, and interwikis go on Wikidata. -->
</noinclude>
bd5b855953c5eec9d9c48400aa39315cb4218558
Template:Navbox
10
337
706
705
2023-09-14T17:35:27Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
<includeonly>{{#invoke:Navbox|navbox}}</includeonly><noinclude>
{{Documentation}}
</noinclude>
fe9b964401f895918ee4fe078678f1722a3c41ec
Module:Icon
828
338
708
707
2023-09-14T17:35:30Z
Ilovethehitgameomori
2
1 revision imported
Scribunto
text/plain
-- This module implements [[Template:Icon]].
require("strict")
local yesNo = require("Module:Yesno")
local getArgs = require("Module:Arguments").getArgs
local getPlain = nil
local p = {}
-- Determine whether we're being called from a sandbox
local sandbox = mw.getCurrentFrame():getTitle():find('sandbox', 1, true) and '/sandbox' or ''
-- Implements [[Template:Icon]]
-- Returns the icon image corresponding to a string (like 'B')
function p._main(args, data)
local data_module = 'Module:Icon/data'..sandbox
data = data or mw.loadData(data_module)
local code = args.class or args[1]
local iconData
if code then
code = code:match('^%s*(.-)%s*$'):lower() -- trim whitespace and put in lower case
iconData = data[code]
end
if not iconData then
iconData = data._DEFAULT
end
return string.format(
'[[File:%s%s%s|%s|class=noviewer|alt=%s]]',
iconData.image,
iconData.tooltip and '|' .. iconData.tooltip or '',
iconData.link == false and '|link=' or '',
args.size or '16x16px',
iconData.alt or ''
)
end
-- Implements [[Template:Icon link]], a superset of [[Template:Icon]]
-- Returns an icon, plus a suitably formatted wikilink
function p._link(args, data)
args.size = args.size or args.iconsize
local icon = p._main(args, data)
-- If no link given in args[2], default back to [[Template:Icon]]
if not args[2] then
return icon
end
-- Strip wiki markup out of link
getPlain = getPlain or require("Module:Text").Text().getPlain
local link = getPlain(args[2])
local display = args[3] or args[2]
-- italicize display string, if requested
if yesNo(args.i) or yesNo(args.italic) or yesNo(args.italics) then
display = '<i>'..display..'</i>'
end
-- if display is link, just use standard wlink
if link == display then
return icon..' [['..link..']]'
end
return icon..' [['..link..'|'..display..']]'
end
function p.main(frame)
local args = getArgs(frame,{parentFirst=true})
return p._main(args)
end
function p.link(frame)
local args = getArgs(frame,{parentFirst=true})
return p._link(args)
end
return p
7688d9a465bd7c4caa51f7e5c02676c162d583f5
Module:Icon/data
828
339
710
709
2023-09-14T17:35:30Z
Ilovethehitgameomori
2
1 revision imported
Scribunto
text/plain
-- This module stores icon data for [[Module:Icon]].
--------------------------------------------------------------------------------
-- Icon data
--------------------------------------------------------------------------------
local data = {
fa = {
image = "Featured article star.svg",
tooltip = "Featured article",
link = true,
},
far = {
image = "Cscr-star piece.png",
tooltip = "Featured article review",
link = true,
},
farc = {
image = "Cscr-star piece.png",
tooltip = "Featured article removal candidate",
link = true,
},
ffa = {
aliases = {"dfa"},
image = "Featured article star - cross.svg",
tooltip = "Former featured article",
link = true,
},
fac = {
aliases = {"fan"},
image = "Cscr-candidate.svg",
tooltip = "Featured article candidate",
link = true,
},
ffac = {
aliases = {"nofa"},
image = "Featured article star - cross.svg",
tooltip = "Failed featured article candidate",
link = true,
},
fl = {
image = "Featured article star.svg",
tooltip = "Featured list",
link = true,
},
flrc = {
aliases = {"flr"},
image = "Cscr-star piece.png",
tooltip = "Featured list removal candidate",
link = true,
},
ffl = {
aliases = {"dfl"},
image = "Cscr-featured-strike.svg",
tooltip = "Former featured list",
link = true,
},
flc = {
aliases = {"fln"},
image = "Cscr-candidate.svg",
tooltip = "Featured list candidate",
link = true,
},
fflc = {
aliases = {"nofl"},
image = "Cscr-former.svg",
tooltip = "Failed featured list candidate",
link = true,
},
a = {
image = "Symbol a class.svg",
tooltip = "A-Class article",
link = true,
},
dac = {
aliases = {"daa"},
image = "Symbol unsupport A vote.svg",
tooltip = "Demoted A-Class article",
link = true,
},
acc = {
aliases = {"acn", "aac"},
image = "A candidate.svg",
tooltip = "A-Class article candidate",
link = true,
},
noac = {
aliases = {"faac"},
image = "Symbol unsupport A vote.svg",
tooltip = "Failed A-Class article candidate",
link = true,
},
ga = {
image = "Symbol support vote.svg",
tooltip = "Good article",
link = false,
},
gar = {
image = "GA Candidate Neutral vote(ChaosNil).svg",
tooltip = "Good article reassessment",
link = false,
},
dga = {
image = "Symbol unsupport vote.svg",
tooltip = "Delisted good article",
link = false,
},
gan = {
aliases = {"gac"},
image = "GA candidate.svg",
tooltip = "Good article nominee",
link = false,
},
ga2 = {
image = "Symbol neutral vote.svg",
tooltip = "Good article, 2nd opinion",
link = false,
},
gah = {
image = "Symbol wait.svg",
tooltip = "Good article on hold",
link = false,
},
fgan = {
aliases = {"noga", "gaf", "gf"},
image = "Symbol oppose vote.svg",
tooltip = "Failed good article nominee",
link = false,
},
fp = {
image = "Cscr-featured.svg",
tooltip = "Featured picture",
link = true,
},
fpc = {
aliases = {"fpn"},
image = "Cscr-candidate.svg",
tooltip = "Featured picture candidate",
link = true,
},
ffp = {
image = "Cscr-former.svg",
tooltip = "Former featured picture",
link = true,
},
vp = {
image = "ENWP VP Logo.svg",
tooltip = "Valued picture",
link = true,
},
vpc = {
image = "Valued pics 1.svg",
tooltip = "Valued picture candidate",
link = true,
},
fs = {
image = "Cscr-featured.svg",
tooltip = "Featured sound",
link = true,
},
ffs = {
image = "Cscr-former.svg",
tooltip = "Former featured sound",
link = true,
},
fsc = {
image = "Cscr-candidate.svg",
tooltip = "Featured sound candidate",
link = true,
},
fpo = {
image = "Linecons big-star.svg",
tooltip = "Before the featured portal process ceased in 2017, this had been designated as a featured portal.",
link = true,
},
fpor = {
image = "Cscr-star piece.png",
tooltip = "Featured portal review",
link = true,
},
ffpo = {
image = "Featured article star - cross.svg",
tooltip = "Former featured portal",
link = true,
},
fpoc = {
image = "Cscr-candidate.svg",
tooltip = "Featured portal candidate",
link = true,
},
ft = {
image = "Cscr-featuredtopic.svg",
tooltip = "Featured topic",
link = true,
},
ftrc = {
image = "Cscr-star piece.png",
tooltip = "Featured topic removal candidate",
link = true,
},
fft = {
aliases = {"dft"},
image = "DFT candidate_cluster.svg",
tooltip = "Former featured topic",
link = true,
},
ftc = {
aliases = {"ftn"},
image = "FT candidate cluster.svg",
tooltip = "Featured topic candidate",
link = false,
},
gt = {
image = "Support cluster.svg",
tooltip = "Good topic",
link = false,
},
gtrc = {
image = "Symbol unsupport vote.svg",
tooltip = "Good topic removal candidate",
link = false,
},
gtc = {
aliases = {"gtn"},
image = "GA candidate cluster.svg",
tooltip = "Good topic candidate",
link = false,
},
bplus = {
aliases = {"b+"},
image = "Symbol bplus class.svg",
tooltip = "Bplus-Class article",
link = true,
},
b = {
image = "Symbol b class.svg",
tooltip = "B-Class article",
link = true,
},
br = {
aliases = {"bcr"},
image = "Bclass-checklist.svg",
tooltip = "B-Class review",
link = true,
},
c = {
image = "Symbol c class.svg",
tooltip = "C-Class article",
link = true,
},
start = {
image = "Symbol start class.svg",
tooltip = "Start-Class article",
link = true,
},
stub = {
image = "Symbol stub class.svg",
tooltip = "Stub-Class article",
link = true,
},
list = {
aliases = {"comparison"},
image = "Symbol list class.svg",
tooltip = "List-Class article",
link = false,
},
no = {
image = "Crystal button cancel.svg",
tooltip = "Unknown-Class article",
link = true,
},
book = {
image = "Symbol book class2.svg",
tooltip = "Wikipedia book",
link = true,
},
category = {
aliases = {"cat", "categ"},
image = "Symbol category class.svg",
tooltip = "Category",
link = false,
},
disambiguation = {
aliases = {"dab", "disamb", "disambig"},
image = "Symbol dab class.svg",
tooltip = "Disambiguation page",
link = true,
},
image = {
aliases = {"file"},
image = "Symbol file class.svg",
tooltip = "File",
link = true,
},
needed = {
image = "Symbol needed class.svg",
tooltip = "Needed article",
link = false,
},
outline = {
image = "Global thinking.svg",
tooltip = "Outline",
link = false,
},
portal = {
image = "Symbol portal class.svg",
tooltip = "Portal",
link = true,
},
project = {
image = "Symbol project class.svg",
tooltip = "Project page",
link = false,
},
redirect = {
aliases = {"red", "redir"},
image = "Symbol redirect vote2.svg",
tooltip = "Redirect",
link = true,
},
template = {
aliases = {"temp", "templ"},
image = "Symbol template class.svg",
tooltip = "Template",
link = false,
},
essay = {
image = "Essay.svg",
tooltip = "Essay",
link = false,
},
na = {
image = "Symbol na class.svg",
tooltip = "Non-article page",
link = true,
},
aa = {
image = "Yes check.svg",
tooltip = "Audited article of limited subject matter",
link = false,
},
da = {
image = "Symbol oppose vote.svg",
tooltip = "Demoted article",
link = false,
},
dyk = {
image = "Symbol question.svg",
tooltip = "Did You Know?",
link = false,
},
dyk2 = {
image = "DYK questionmark icon.svg",
tooltip = "Did You Know?",
link = false,
},
pr = {
image = "Nuvola apps kedit.png",
tooltip = "Peer review",
link = true,
},
ppr = {
image = "Nuvola apps kedit.png",
tooltip = "Portal peer review",
link = true,
},
q = {
aliases = {"question"},
image = "Symbol question.svg",
tooltip = "Question",
link = false,
},
cleanup = {
image = "Edit-clear.svg",
tooltip = "Cleanup work",
link = false,
},
qi = {
image = "Quality images logo.svg",
tooltip = "Quality image on Wikimedia Commons",
link = false,
},
vi = {
image = "Valued image seal.svg",
tooltip = "Valued image on Wikimedia Commons",
link = false,
},
tfa = {
image = "Wikipedia-logo.svg",
tooltip = "Today's Featured Article",
link = true,
},
tfl = {
image = "Wikipedia-logo.svg",
tooltip = "Today's Featured List",
link = true,
},
itn = {
image = "Globe current.svg",
tooltip = "In The News",
link = true,
},
otd = {
image = "Nuvola apps date.svg",
tooltip = "On This Day",
link = true,
},
wikiproject = {
image = "People icon.svg",
tooltip = "WikiProject",
link = false,
},
goce = {
image = "Writing Magnifying.PNG",
tooltip = "Guild of Copy Editors",
link = true,
},
wikipedia = {
image = "Wikipedia-logo.svg",
tooltip = "Wikipedia page",
link = true,
},
commons = {
image = "Commons-logo.svg",
tooltip = "Commons page",
link = false,
},
wikiquote = {
image = "Wikiquote-logo.svg",
tooltip = "Wikiquote page",
link = false,
},
wikiversity = {
image = "Wikiversity logo 2017.svg",
tooltip = "Wikiversity page",
link = true,
},
wikibooks = {
image = "Wikibooks-logo.svg",
tooltip = "Wikibooks page",
link = true,
},
wikisource = {
image = "Wikisource-logo.svg",
tooltip = "Wikisource page",
link = true,
},
wiktionary = {
image = "Wiktionary-logo.svg",
tooltip = "Wiktionary page",
link = true,
},
wikinews = {
image = "Wikinews-logo.svg",
tooltip = "Wikinews page",
link = true,
},
wikispecies = {
image = "Wikispecies-logo.svg",
tooltip = "Wikispecies page",
link = true,
},
wikidata = {
image = "Wikidata-logo.svg",
tooltip = "Wikidata page",
link = false,
},
wikivoyage = {
image = "Wikivoyage-logo.svg",
tooltip = "Wikivoyage page",
link = true,
},
mediawiki = {
image = "MediaWiki-2020-icon.svg",
tooltip = "MediaWiki",
link = false,
},
phabricator = {
aliases = {"phab"},
image = "Favicon-Phabricator-WM.svg",
tooltip = "Phabricator",
link = false,
},
wikitech = {
image = "Wikitech-2021-blue-icon.svg",
tooltip = "Wikitech",
link = false,
},
meta = {
image = "Wikimedia Community Logo.svg",
tooltip = "Meta-wiki page",
link = false,
},
four = {
aliases = {"4a"},
image = "Four Award.svg",
tooltip = "Four Award",
link = false,
},
million = {
image = "Million award logo.svg",
tooltip = "Million Award",
link = true,
},
module = {
image = "Lua-logo-nolabel.svg",
tooltip = "Module",
link = false,
},
vital = {
image = "Círculos_Concéntricos.svg",
tooltip = "Vital article",
link = false,
},
potd = {
image = "Wikipedia-logo.svg",
tooltip = "Picture of the Day",
link = true,
},
_DEFAULT = {
image = "Symbol question.svg",
link = false,
}
}
--------------------------------------------------------------------------------
-- End icon data
--------------------------------------------------------------------------------
-- Make aliases work the same as normal keys, and remove the "aliases" subtables.
local ret= {}
for code, iconData in pairs(data) do
iconData.canonicalCode = code
if iconData.aliases then
for _, alias in ipairs(iconData.aliases) do
ret[alias] = iconData
end
iconData.aliases = nil
end
ret[code] = iconData
end
return ret
d8e668d4755103abdbc8325fa35964e99198c29d
Module:Labelled list hatnote
828
340
712
711
2023-09-14T17:35:31Z
Ilovethehitgameomori
2
1 revision imported
Scribunto
text/plain
--------------------------------------------------------------------------------
-- Labelled list --
-- --
-- This module does the core work of creating a hatnote composed of a list --
-- prefixed by a colon-terminated label, i.e. "LABEL: [andList of pages]", --
-- for {{see also}} and similar templates. --
--------------------------------------------------------------------------------
local mHatnote = require('Module:Hatnote')
local mHatlist = require('Module:Hatnote list')
local mArguments --initialize lazily
local yesno --initialize lazily
local p = {}
-- Defaults global to this module
local defaults = {
label = 'See also', --Final fallback for label argument
labelForm = '%s: %s',
prefixes = {'label', 'label ', 'l'},
template = 'Module:Labelled list hatnote'
}
-- Localizable message strings
local msg = {
errorSuffix = '#Errors',
noInputWarning = 'no page names specified',
noOutputWarning =
"'''[[%s]] — no output: none of the target pages exist.'''"
}
-- Helper function that pre-combines display parameters into page arguments.
-- Also compresses sparse arrays, as a desirable side-effect.
function p.preprocessDisplays (args, prefixes)
-- Prefixes specify which parameters, in order, to check for display options
-- They each have numbers auto-appended, e.g. 'label1', 'label 1', & 'l1'
prefixes = prefixes or defaults.prefixes
local indices = {}
local sparsePages = {}
for k, v in pairs(args) do
if type(k) == 'number' then
indices[#indices + 1] = k
local display
for i = 1, #prefixes do
display = args[prefixes[i] .. k]
if display then break end
end
sparsePages[k] = display and
string.format('%s|%s', string.gsub(v, '|.*$', ''), display) or v
end
end
table.sort(indices)
local pages = {}
for k, v in ipairs(indices) do pages[#pages + 1] = sparsePages[v] end
return pages
end
--Helper function to get a page target from a processed page string
--e.g. "Page|Label" → "Page" or "Target" → "Target"
local function getTarget(pagename)
local pipe = string.find(pagename, '|')
return string.sub(pagename, 0, pipe and pipe - 1 or nil)
end
-- Produces a labelled pages-list hatnote.
-- The main frame (template definition) takes 1 or 2 arguments, for a singular
-- and (optionally) plural label respectively:
-- * {{#invoke:Labelled list hatnote|labelledList|Singular label|Plural label}}
-- The resulting template takes pagename & label parameters normally.
function p.labelledList (frame)
mArguments = require('Module:Arguments')
yesno = require('Module:Yesno')
local labels = {frame.args[1] or defaults.label}
labels[2] = frame.args[2] or labels[1]
labels[3] = frame.args[3] --no defaulting
labels[4] = frame.args[4] --no defaulting
local template = frame:getParent():getTitle()
local args = mArguments.getArgs(frame, {parentOnly = true})
local pages = p.preprocessDisplays(args)
local options = {
category = yesno(args.category),
extraclasses = frame.args.extraclasses,
ifexists = yesno(frame.args.ifexists),
namespace = frame.args.namespace or args.namespace,
selfref = yesno(frame.args.selfref or args.selfref),
template = template
}
return p._labelledList(pages, labels, options)
end
function p._labelledList (pages, labels, options)
if options.ifexists then
for k = #pages, 1, -1 do --iterate backwards to allow smooth removals
local v = pages[k]
local title = mw.title.new(getTarget(v), namespace)
if (v == '') or title == nil or not title.exists then
table.remove(pages, k)
end
end
end
labels = labels or {}
label = (#pages == 1 and labels[1] or labels[2]) or defaults.label
for k, v in pairs(pages) do
if mHatnote.findNamespaceId(v) ~= 0 then
label =
(
#pages == 1 and
(labels[3] or labels[1] or defaults.label) or
(labels[4] or labels[2] or defaults.label)
) or defaults.label
end
end
if #pages == 0 then
if options.ifexists then
mw.addWarning(
string.format(
msg.noOutputWarning, options.template or defaults.template
)
)
return ''
else
return mHatnote.makeWikitextError(
msg.noInputWarning,
(options.template or defaults.template) .. msg.errorSuffix,
options.category
)
end
end
local text = string.format(
options.labelForm or defaults.labelForm,
label,
mHatlist.andList(pages, true)
)
local hnOptions = {
extraclasses = options.extraclasses,
selfref = options.selfref
}
return mHatnote._hatnote(text, hnOptions)
end
return p
b7a8ba27cf6195e6427701b94e8d2acad3c40a21
Module:Navbar/styles.css
828
320
714
665
2023-09-14T17:35:32Z
Ilovethehitgameomori
2
1 revision imported
sanitized-css
text/css
/* {{pp|small=yes}} */
.navbar {
display: inline;
font-size: 88%;
font-weight: normal;
}
.navbar-collapse {
float: left;
text-align: left;
}
.navbar-boxtext {
word-spacing: 0;
}
.navbar ul {
display: inline-block;
white-space: nowrap;
line-height: inherit;
}
.navbar-brackets::before {
margin-right: -0.125em;
content: '[ ';
}
.navbar-brackets::after {
margin-left: -0.125em;
content: ' ]';
}
.navbar li {
word-spacing: -0.125em;
}
.navbar a > span,
.navbar a > abbr {
text-decoration: inherit;
}
.navbar-mini abbr {
font-variant: small-caps;
border-bottom: none;
text-decoration: none;
cursor: inherit;
}
.navbar-ct-full {
font-size: 114%;
margin: 0 7em;
}
.navbar-ct-mini {
font-size: 114%;
margin: 0 4em;
}
9d4056f949b4f0b159e3d40dfb1a5f01e72f9571
Module:Navbox
828
341
716
715
2023-09-14T17:35:33Z
Ilovethehitgameomori
2
1 revision imported
Scribunto
text/plain
require('strict')
local p = {}
local navbar = require('Module:Navbar')._navbar
local cfg = mw.loadData('Module:Navbox/configuration')
local getArgs -- lazily initialized
local args
local format = string.format
local function striped(wikitext, border)
-- Return wikitext with markers replaced for odd/even striping.
-- Child (subgroup) navboxes are flagged with a category that is removed
-- by parent navboxes. The result is that the category shows all pages
-- where a child navbox is not contained in a parent navbox.
local orphanCat = cfg.category.orphan
if border == cfg.keyword.border_subgroup and args[cfg.arg.orphan] ~= cfg.keyword.orphan_yes then
-- No change; striping occurs in outermost navbox.
return wikitext .. orphanCat
end
local first, second = cfg.class.navbox_odd_part, cfg.class.navbox_even_part
if args[cfg.arg.evenodd] then
if args[cfg.arg.evenodd] == cfg.keyword.evenodd_swap then
first, second = second, first
else
first = args[cfg.arg.evenodd]
second = first
end
end
local changer
if first == second then
changer = first
else
local index = 0
changer = function (code)
if code == '0' then
-- Current occurrence is for a group before a nested table.
-- Set it to first as a valid although pointless class.
-- The next occurrence will be the first row after a title
-- in a subgroup and will also be first.
index = 0
return first
end
index = index + 1
return index % 2 == 1 and first or second
end
end
local regex = orphanCat:gsub('([%[%]])', '%%%1')
return (wikitext:gsub(regex, ''):gsub(cfg.marker.regex, changer)) -- () omits gsub count
end
local function processItem(item, nowrapitems)
if item:sub(1, 2) == '{|' then
-- Applying nowrap to lines in a table does not make sense.
-- Add newlines to compensate for trim of x in |parm=x in a template.
return '\n' .. item ..'\n'
end
if nowrapitems == cfg.keyword.nowrapitems_yes then
local lines = {}
for line in (item .. '\n'):gmatch('([^\n]*)\n') do
local prefix, content = line:match('^([*:;#]+)%s*(.*)')
if prefix and not content:match(cfg.pattern.nowrap) then
line = format(cfg.nowrap_item, prefix, content)
end
table.insert(lines, line)
end
item = table.concat(lines, '\n')
end
if item:match('^[*:;#]') then
return '\n' .. item ..'\n'
end
return item
end
local function has_navbar()
return args[cfg.arg.navbar] ~= cfg.keyword.navbar_off
and args[cfg.arg.navbar] ~= cfg.keyword.navbar_plain
and (
args[cfg.arg.name]
or mw.getCurrentFrame():getParent():getTitle():gsub(cfg.pattern.sandbox, '')
~= cfg.pattern.navbox
)
end
local function renderNavBar(titleCell)
if has_navbar() then
titleCell:wikitext(navbar{
[cfg.navbar.name] = args[cfg.arg.name],
[cfg.navbar.mini] = 1,
[cfg.navbar.fontstyle] = (args[cfg.arg.basestyle] or '') .. ';' ..
(args[cfg.arg.titlestyle] or '') ..
';background:none transparent;border:none;box-shadow:none;padding:0;'
})
end
end
local function renderTitleRow(tbl)
if not args[cfg.arg.title] then return end
local titleRow = tbl:tag('tr')
local titleCell = titleRow:tag('th'):attr('scope', 'col')
local titleColspan = 2
if args[cfg.arg.imageleft] then titleColspan = titleColspan + 1 end
if args[cfg.arg.image] then titleColspan = titleColspan + 1 end
titleCell
:cssText(args[cfg.arg.basestyle])
:cssText(args[cfg.arg.titlestyle])
:addClass(cfg.class.navbox_title)
:attr('colspan', titleColspan)
renderNavBar(titleCell)
titleCell
:tag('div')
-- id for aria-labelledby attribute
:attr('id', mw.uri.anchorEncode(args[cfg.arg.title]))
:addClass(args[cfg.arg.titleclass])
:css('font-size', '114%')
:css('margin', '0 4em')
:wikitext(processItem(args[cfg.arg.title]))
end
local function getAboveBelowColspan()
local ret = 2
if args[cfg.arg.imageleft] then ret = ret + 1 end
if args[cfg.arg.image] then ret = ret + 1 end
return ret
end
local function renderAboveRow(tbl)
if not args[cfg.arg.above] then return end
tbl:tag('tr')
:tag('td')
:addClass(cfg.class.navbox_abovebelow)
:addClass(args[cfg.arg.aboveclass])
:cssText(args[cfg.arg.basestyle])
:cssText(args[cfg.arg.abovestyle])
:attr('colspan', getAboveBelowColspan())
:tag('div')
-- id for aria-labelledby attribute, if no title
:attr('id', (not args[cfg.arg.title]) and mw.uri.anchorEncode(args[cfg.arg.above]) or nil)
:wikitext(processItem(args[cfg.arg.above], args[cfg.arg.nowrapitems]))
end
local function renderBelowRow(tbl)
if not args[cfg.arg.below] then return end
tbl:tag('tr')
:tag('td')
:addClass(cfg.class.navbox_abovebelow)
:addClass(args[cfg.arg.belowclass])
:cssText(args[cfg.arg.basestyle])
:cssText(args[cfg.arg.belowstyle])
:attr('colspan', getAboveBelowColspan())
:tag('div')
:wikitext(processItem(args[cfg.arg.below], args[cfg.arg.nowrapitems]))
end
local function renderListRow(tbl, index, listnum, listnums_size)
local row = tbl:tag('tr')
if index == 1 and args[cfg.arg.imageleft] then
row
:tag('td')
:addClass(cfg.class.noviewer)
:addClass(cfg.class.navbox_image)
:addClass(args[cfg.arg.imageclass])
:css('width', '1px') -- Minimize width
:css('padding', '0 2px 0 0')
:cssText(args[cfg.arg.imageleftstyle])
:attr('rowspan', listnums_size)
:tag('div')
:wikitext(processItem(args[cfg.arg.imageleft]))
end
local group_and_num = format(cfg.arg.group_and_num, listnum)
local groupstyle_and_num = format(cfg.arg.groupstyle_and_num, listnum)
if args[group_and_num] then
local groupCell = row:tag('th')
-- id for aria-labelledby attribute, if lone group with no title or above
if listnum == 1 and not (args[cfg.arg.title] or args[cfg.arg.above] or args[cfg.arg.group2]) then
groupCell
:attr('id', mw.uri.anchorEncode(args[cfg.arg.group1]))
end
groupCell
:attr('scope', 'row')
:addClass(cfg.class.navbox_group)
:addClass(args[cfg.arg.groupclass])
:cssText(args[cfg.arg.basestyle])
-- If groupwidth not specified, minimize width
:css('width', args[cfg.arg.groupwidth] or '1%')
groupCell
:cssText(args[cfg.arg.groupstyle])
:cssText(args[groupstyle_and_num])
:wikitext(args[group_and_num])
end
local listCell = row:tag('td')
if args[group_and_num] then
listCell
:addClass(cfg.class.navbox_list_with_group)
else
listCell:attr('colspan', 2)
end
if not args[cfg.arg.groupwidth] then
listCell:css('width', '100%')
end
local rowstyle -- usually nil so cssText(rowstyle) usually adds nothing
if index % 2 == 1 then
rowstyle = args[cfg.arg.oddstyle]
else
rowstyle = args[cfg.arg.evenstyle]
end
local list_and_num = format(cfg.arg.list_and_num, listnum)
local listText = args[list_and_num]
local oddEven = cfg.marker.oddeven
if listText:sub(1, 12) == '</div><table' then
-- Assume list text is for a subgroup navbox so no automatic striping for this row.
oddEven = listText:find(cfg.pattern.navbox_title) and cfg.marker.restart or cfg.class.navbox_odd_part
end
local liststyle_and_num = format(cfg.arg.liststyle_and_num, listnum)
local listclass_and_num = format(cfg.arg.listclass_and_num, listnum)
listCell
:css('padding', '0')
:cssText(args[cfg.arg.liststyle])
:cssText(rowstyle)
:cssText(args[liststyle_and_num])
:addClass(cfg.class.navbox_list)
:addClass(cfg.class.navbox_part .. oddEven)
:addClass(args[cfg.arg.listclass])
:addClass(args[listclass_and_num])
:tag('div')
:css('padding',
(index == 1 and args[cfg.arg.list1padding]) or args[cfg.arg.listpadding] or '0 0.25em'
)
:wikitext(processItem(listText, args[cfg.arg.nowrapitems]))
if index == 1 and args[cfg.arg.image] then
row
:tag('td')
:addClass(cfg.class.noviewer)
:addClass(cfg.class.navbox_image)
:addClass(args[cfg.arg.imageclass])
:css('width', '1px') -- Minimize width
:css('padding', '0 0 0 2px')
:cssText(args[cfg.arg.imagestyle])
:attr('rowspan', listnums_size)
:tag('div')
:wikitext(processItem(args[cfg.arg.image]))
end
end
local function has_list_class(htmlclass)
local patterns = {
'^' .. htmlclass .. '$',
'%s' .. htmlclass .. '$',
'^' .. htmlclass .. '%s',
'%s' .. htmlclass .. '%s'
}
for arg, _ in pairs(args) do
if type(arg) == 'string' and mw.ustring.find(arg, cfg.pattern.class) then
for _, pattern in ipairs(patterns) do
if mw.ustring.find(args[arg] or '', pattern) then
return true
end
end
end
end
return false
end
-- there are a lot of list classes in the wild, so we add their TemplateStyles
local function add_list_styles()
local frame = mw.getCurrentFrame()
local function add_list_templatestyles(htmlclass, templatestyles)
if has_list_class(htmlclass) then
return frame:extensionTag{
name = 'templatestyles', args = { src = templatestyles }
}
else
return ''
end
end
local hlist_styles = add_list_templatestyles('hlist', cfg.hlist_templatestyles)
local plainlist_styles = add_list_templatestyles('plainlist', cfg.plainlist_templatestyles)
-- a second workaround for [[phab:T303378]]
-- when that issue is fixed, we can actually use has_navbar not to emit the
-- tag here if we want
if has_navbar() and hlist_styles == '' then
hlist_styles = frame:extensionTag{
name = 'templatestyles', args = { src = cfg.hlist_templatestyles }
}
end
-- hlist -> plainlist is best-effort to preserve old Common.css ordering.
-- this ordering is not a guarantee because most navboxes will emit only
-- one of these classes [hlist_note]
return hlist_styles .. plainlist_styles
end
local function needsHorizontalLists(border)
if border == cfg.keyword.border_subgroup or args[cfg.arg.tracking] == cfg.keyword.tracking_no then
return false
end
return not has_list_class(cfg.pattern.hlist) and not has_list_class(cfg.pattern.plainlist)
end
local function hasBackgroundColors()
for _, key in ipairs({cfg.arg.titlestyle, cfg.arg.groupstyle,
cfg.arg.basestyle, cfg.arg.abovestyle, cfg.arg.belowstyle}) do
if tostring(args[key]):find('background', 1, true) then
return true
end
end
return false
end
local function hasBorders()
for _, key in ipairs({cfg.arg.groupstyle, cfg.arg.basestyle,
cfg.arg.abovestyle, cfg.arg.belowstyle}) do
if tostring(args[key]):find('border', 1, true) then
return true
end
end
return false
end
local function isIllegible()
local styleratio = require('Module:Color contrast')._styleratio
for key, style in pairs(args) do
if tostring(key):match(cfg.pattern.style) then
if styleratio{mw.text.unstripNoWiki(style)} < 4.5 then
return true
end
end
end
return false
end
local function getTrackingCategories(border)
local cats = {}
if needsHorizontalLists(border) then table.insert(cats, cfg.category.horizontal_lists) end
if hasBackgroundColors() then table.insert(cats, cfg.category.background_colors) end
if isIllegible() then table.insert(cats, cfg.category.illegible) end
if hasBorders() then table.insert(cats, cfg.category.borders) end
return cats
end
local function renderTrackingCategories(builder, border)
local title = mw.title.getCurrentTitle()
if title.namespace ~= 10 then return end -- not in template space
local subpage = title.subpageText
if subpage == cfg.keyword.subpage_doc or subpage == cfg.keyword.subpage_sandbox
or subpage == cfg.keyword.subpage_testcases then return end
for _, cat in ipairs(getTrackingCategories(border)) do
builder:wikitext('[[Category:' .. cat .. ']]')
end
end
local function renderMainTable(border, listnums)
local tbl = mw.html.create('table')
:addClass(cfg.class.nowraplinks)
:addClass(args[cfg.arg.bodyclass])
local state = args[cfg.arg.state]
if args[cfg.arg.title] and state ~= cfg.keyword.state_plain and state ~= cfg.keyword.state_off then
if state == cfg.keyword.state_collapsed then
state = cfg.class.collapsed
end
tbl
:addClass(cfg.class.collapsible)
:addClass(state or cfg.class.autocollapse)
end
tbl:css('border-spacing', 0)
if border == cfg.keyword.border_subgroup or border == cfg.keyword.border_none then
tbl
:addClass(cfg.class.navbox_subgroup)
:cssText(args[cfg.arg.bodystyle])
:cssText(args[cfg.arg.style])
else -- regular navbox - bodystyle and style will be applied to the wrapper table
tbl
:addClass(cfg.class.navbox_inner)
:css('background', 'transparent')
:css('color', 'inherit')
end
tbl:cssText(args[cfg.arg.innerstyle])
renderTitleRow(tbl)
renderAboveRow(tbl)
local listnums_size = #listnums
for i, listnum in ipairs(listnums) do
renderListRow(tbl, i, listnum, listnums_size)
end
renderBelowRow(tbl)
return tbl
end
local function add_navbox_styles(hiding_templatestyles)
local frame = mw.getCurrentFrame()
-- This is a lambda so that it doesn't need the frame as a parameter
local function add_user_styles(templatestyles)
if templatestyles and templatestyles ~= '' then
return frame:extensionTag{
name = 'templatestyles', args = { src = templatestyles }
}
end
return ''
end
-- get templatestyles. load base from config so that Lua only needs to do
-- the work once of parser tag expansion
local base_templatestyles = cfg.templatestyles
local templatestyles = add_user_styles(args[cfg.arg.templatestyles])
local child_templatestyles = add_user_styles(args[cfg.arg.child_templatestyles])
-- The 'navbox-styles' div exists to wrap the styles to work around T200206
-- more elegantly. Instead of combinatorial rules, this ends up being linear
-- number of CSS rules.
return mw.html.create('div')
:addClass(cfg.class.navbox_styles)
:wikitext(
add_list_styles() .. -- see [hlist_note] applied to 'before base_templatestyles'
base_templatestyles ..
templatestyles ..
child_templatestyles ..
table.concat(hiding_templatestyles)
)
:done()
end
-- work around [[phab:T303378]]
-- for each arg: find all the templatestyles strip markers, insert them into a
-- table. then remove all templatestyles markers from the arg
local function move_hiding_templatestyles(args)
local gfind = string.gfind
local gsub = string.gsub
local templatestyles_markers = {}
local strip_marker_pattern = '(\127[^\127]*UNIQ%-%-templatestyles%-%x+%-QINU[^\127]*\127)'
for k, arg in pairs(args) do
for marker in gfind(arg, strip_marker_pattern) do
table.insert(templatestyles_markers, marker)
end
args[k] = gsub(arg, strip_marker_pattern, '')
end
return templatestyles_markers
end
function p._navbox(navboxArgs)
args = navboxArgs
local hiding_templatestyles = move_hiding_templatestyles(args)
local listnums = {}
for k, _ in pairs(args) do
if type(k) == 'string' then
local listnum = k:match(cfg.pattern.listnum)
if listnum then table.insert(listnums, tonumber(listnum)) end
end
end
table.sort(listnums)
local border = mw.text.trim(args[cfg.arg.border] or args[1] or '')
if border == cfg.keyword.border_child then
border = cfg.keyword.border_subgroup
end
-- render the main body of the navbox
local tbl = renderMainTable(border, listnums)
local res = mw.html.create()
-- render the appropriate wrapper for the navbox, based on the border param
if border == cfg.keyword.border_none then
res:node(add_navbox_styles(hiding_templatestyles))
local nav = res:tag('div')
:attr('role', 'navigation')
:node(tbl)
-- aria-labelledby title, otherwise above, otherwise lone group
if args[cfg.arg.title] or args[cfg.arg.above] or (args[cfg.arg.group1]
and not args[cfg.arg.group2]) then
nav:attr(
'aria-labelledby',
mw.uri.anchorEncode(
args[cfg.arg.title] or args[cfg.arg.above] or args[cfg.arg.group1]
)
)
else
nav:attr('aria-label', cfg.aria_label)
end
elseif border == cfg.keyword.border_subgroup then
-- We assume that this navbox is being rendered in a list cell of a
-- parent navbox, and is therefore inside a div with padding:0em 0.25em.
-- We start with a </div> to avoid the padding being applied, and at the
-- end add a <div> to balance out the parent's </div>
res
:wikitext('</div>')
:node(tbl)
:wikitext('<div>')
else
res:node(add_navbox_styles(hiding_templatestyles))
local nav = res:tag('div')
:attr('role', 'navigation')
:addClass(cfg.class.navbox)
:addClass(args[cfg.arg.navboxclass])
:cssText(args[cfg.arg.bodystyle])
:cssText(args[cfg.arg.style])
:css('padding', '3px')
:node(tbl)
-- aria-labelledby title, otherwise above, otherwise lone group
if args[cfg.arg.title] or args[cfg.arg.above]
or (args[cfg.arg.group1] and not args[cfg.arg.group2]) then
nav:attr(
'aria-labelledby',
mw.uri.anchorEncode(args[cfg.arg.title] or args[cfg.arg.above] or args[cfg.arg.group1])
)
else
nav:attr('aria-label', cfg.aria_label)
end
end
if (args[cfg.arg.nocat] or cfg.keyword.nocat_false):lower() == cfg.keyword.nocat_false then
renderTrackingCategories(res, border)
end
return striped(tostring(res), border)
end
function p.navbox(frame)
if not getArgs then
getArgs = require('Module:Arguments').getArgs
end
args = getArgs(frame, {wrappers = {cfg.pattern.navbox}})
-- Read the arguments in the order they'll be output in, to make references
-- number in the right order.
local _
_ = args[cfg.arg.title]
_ = args[cfg.arg.above]
-- Limit this to 20 as covering 'most' cases (that's a SWAG) and because
-- iterator approach won't work here
for i = 1, 20 do
_ = args[format(cfg.arg.group_and_num, i)]
_ = args[format(cfg.arg.list_and_num, i)]
end
_ = args[cfg.arg.below]
return p._navbox(args)
end
return p
05be9a97c035ab3f0fac69423779e261949d473c
Module:Navbox/configuration
828
342
718
717
2023-09-14T17:35:33Z
Ilovethehitgameomori
2
1 revision imported
Scribunto
text/plain
return {
aria_label = 'Navbox',
nowrap_item = '%s<span class="nowrap">%s</span>',
templatestyles = mw.getCurrentFrame():extensionTag{
name = 'templatestyles', args = { src = 'Module:Navbox/styles.css' }
},
hlist_templatestyles = 'Hlist/styles.css',
plainlist_templatestyles = 'Plainlist/styles.css',
-- do not localize marker table
marker = {
oddeven = '\127_ODDEVEN_\127',
restart = '\127_ODDEVEN0_\127',
regex = '\127_ODDEVEN(%d?)_\127'
},
category = {
orphan = '[[Category:Navbox orphans]]',
horizontal_lists = 'Navigational boxes without horizontal lists',
background_colors = 'Navboxes using background colours',
illegible = 'Potentially illegible navboxes',
borders = 'Navboxes using borders',
},
keyword = {
border_subgroup = 'subgroup',
border_child = 'child',
border_none = 'none',
evenodd_swap = 'swap',
navbar_off = 'off',
navbar_plain = 'plain',
nocat_false = 'false',
nowrapitems_yes = 'yes',
orphan_yes = 'yes',
state_collapsed = 'collapsed',
state_off = 'off',
state_plain = 'plain',
subpage_doc = 'doc',
subpage_sandbox = 'sandbox',
subpage_testcases = 'testcases',
tracking_no = 'no'
},
class = {
autocollapse = 'autocollapse',
collapsible = 'mw-collapsible',
collapsed = 'mw-collapsed',
-- Warning
navbox = 'navbox', -- WMF currently hides 'navbox' from mobile,
-- so you probably shouldn't change the navbox class.
navbox_abovebelow = 'navbox-abovebelow',
navbox_group = 'navbox-group',
navbox_image = 'navbox-image',
navbox_inner = 'navbox-inner',
navbox_list = 'navbox-list',
navbox_list_with_group = 'navbox-list-with-group',
navbox_part = 'navbox-', -- do not l10n
navbox_styles = 'navbox-styles',
navbox_subgroup = 'navbox-subgroup',
navbox_title = 'navbox-title', -- l10n only if you change pattern.navbox_title below
navbox_odd_part = 'odd', -- do not l10n
navbox_even_part = 'even', -- do not l10n
nomobile = 'nomobile',
nowraplinks = 'nowraplinks',
noviewer = 'noviewer' -- used to remove images from MediaViewer
},
pattern = {
listnum = '^list(%d+)$',
class = 'class',
sandbox = '/sandbox$',
navbox = 'Template:Navbox',
nowrap = '^<span class="nowrap">',
style = 'style$',
navbox_title = '<th[^>]*"navbox%-title"',
hlist = 'hlist',
plainlist = 'plainlist',
},
arg = {
above = 'above',
aboveclass = 'aboveclass',
abovestyle = 'abovestyle',
basestyle = 'basestyle',
bodyclass = 'bodyclass',
bodystyle = 'bodystyle',
border = 'border',
below = 'below',
belowclass = 'belowclass',
belowstyle = 'belowstyle',
evenodd = 'evenodd',
evenstyle = 'evenstyle',
group1 = 'group1',
group2 = 'group2',
group_and_num = 'group%d',
groupstyle_and_num = 'group%dstyle',
groupclass = 'groupclass',
groupstyle = 'groupstyle',
groupwidth = 'groupwidth',
innerstyle = 'innerstyle',
image = 'image',
imageclass = 'imageclass',
imageleft = 'imageleft',
imageleftstyle = 'imageleftstyle',
imagesetyle = 'imagestyle',
list_and_num = 'list%d',
listclass_and_num = 'list%dclass',
liststyle_and_num = 'list%dstyle',
list1padding = 'list1padding',
listclass = 'listclass',
listpadding = 'listpadding',
liststyle = 'liststyle',
name = 'name',
navbar = 'navbar',
navboxclass = 'navboxclass',
nocat = 'nocat',
nowrapitems = 'nowrapitems',
oddstyle = 'oddstyle',
orphan = 'orphan',
state = 'state',
style = 'style',
templatestyles = 'templatestyles',
child_templatestyles = 'child templatestyles',
title = 'title',
titleclass = 'titleclass',
titlestyle = 'titlestyle',
tracking = 'tracking'
},
-- names of navbar arguments
navbar = {
name = 1,
fontstyle = 'fontstyle',
mini = 'mini'
}
}
4148736fd32a93636c0413e73ed38afaef065ec9
Module:Navbox/styles.css
828
343
720
719
2023-09-14T17:35:34Z
Ilovethehitgameomori
2
1 revision imported
sanitized-css
text/css
/* {{pp|small=y}} */
.navbox {
box-sizing: border-box;
border: 1px solid #a2a9b1;
width: 100%;
clear: both;
font-size: 88%;
text-align: center;
padding: 1px;
margin: 1em auto 0; /* Prevent preceding content from clinging to navboxes */
}
.navbox .navbox {
margin-top: 0; /* No top margin for nested navboxes */
}
.navbox + .navbox, /* TODO: remove first line after transclusions have updated */
.navbox + .navbox-styles + .navbox {
margin-top: -1px; /* Single pixel border between adjacent navboxes */
}
.navbox-inner,
.navbox-subgroup {
width: 100%;
}
.navbox-group,
.navbox-title,
.navbox-abovebelow {
padding: 0.25em 1em;
line-height: 1.5em;
text-align: center;
}
.navbox-group {
white-space: nowrap;
/* @noflip */
text-align: right;
}
.navbox,
.navbox-subgroup {
background-color: #fdfdfd;
}
.navbox-list {
line-height: 1.5em;
border-color: #fdfdfd; /* Must match background color */
}
.navbox-list-with-group {
text-align: left;
border-left-width: 2px;
border-left-style: solid;
}
/* cell spacing for navbox cells */
/* Borders above 2nd, 3rd, etc. rows */
/* TODO: figure out how to replace tr as structure;
* with div structure it should be just a matter of first-child */
tr + tr > .navbox-abovebelow,
tr + tr > .navbox-group,
tr + tr > .navbox-image,
tr + tr > .navbox-list {
border-top: 2px solid #fdfdfd; /* Must match background color */
}
.navbox-title {
background-color: #ccf; /* Level 1 color */
}
.navbox-abovebelow,
.navbox-group,
.navbox-subgroup .navbox-title {
background-color: #ddf; /* Level 2 color */
}
.navbox-subgroup .navbox-group,
.navbox-subgroup .navbox-abovebelow {
background-color: #e6e6ff; /* Level 3 color */
}
.navbox-even {
background-color: #f7f7f7;
}
.navbox-odd {
background-color: transparent;
}
/* TODO: figure out how to remove reliance on td as structure */
.navbox .hlist td dl,
.navbox .hlist td ol,
.navbox .hlist td ul,
.navbox td.hlist dl,
.navbox td.hlist ol,
.navbox td.hlist ul {
padding: 0.125em 0;
}
.navbox .navbar {
display: block;
font-size: 100%;
}
.navbox-title .navbar {
/* @noflip */
float: left;
/* @noflip */
text-align: left;
/* @noflip */
margin-right: 0.5em;
}
e80b0d7a5770e6e105dab832deb6c37a5245ebc6
Template:Further
10
344
722
721
2023-09-14T17:35:35Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
<includeonly>{{#invoke:labelled list hatnote|labelledList|Further information{{#if:{{{topic|}}}| on {{{topic|}}}}}}}</includeonly><noinclude>
{{documentation}}
<!-- Categories go on the /doc subpage, and interwikis go on Wikidata. -->
</noinclude>
dd29c6dfb3894a2dc3f20144a654b7012c9a9214
Module:Color contrast
828
345
724
723
2023-09-14T17:35:36Z
Ilovethehitgameomori
2
1 revision imported
Scribunto
text/plain
--
-- This module implements
-- {{Color contrast ratio}}
-- {{Greater color contrast ratio}}
-- {{ColorToLum}}
-- {{RGBColorToLum}}
--
local p = {}
local HTMLcolor = mw.loadData( 'Module:Color contrast/colors' )
local function sRGB (v)
if (v <= 0.03928) then
v = v / 12.92
else
v = math.pow((v+0.055)/1.055, 2.4)
end
return v
end
local function rgbdec2lum(R, G, B)
if ( 0 <= R and R < 256 and 0 <= G and G < 256 and 0 <= B and B < 256 ) then
return 0.2126 * sRGB(R/255) + 0.7152 * sRGB(G/255) + 0.0722 * sRGB(B/255)
else
return ''
end
end
local function hsl2lum(h, s, l)
if ( 0 <= h and h < 360 and 0 <= s and s <= 1 and 0 <= l and l <= 1 ) then
local c = (1 - math.abs(2*l - 1))*s
local x = c*(1 - math.abs( math.fmod(h/60, 2) - 1) )
local m = l - c/2
local r, g, b = m, m, m
if( 0 <= h and h < 60 ) then
r = r + c
g = g + x
elseif( 60 <= h and h < 120 ) then
r = r + x
g = g + c
elseif( 120 <= h and h < 180 ) then
g = g + c
b = b + x
elseif( 180 <= h and h < 240 ) then
g = g + x
b = b + c
elseif( 240 <= h and h < 300 ) then
r = r + x
b = b + c
elseif( 300 <= h and h < 360 ) then
r = r + c
b = b + x
end
return rgbdec2lum(255*r, 255*g, 255*b)
else
return ''
end
end
local function color2lum(c)
if (c == nil) then
return ''
end
-- html '#' entity
c = c:gsub("#", "#")
-- whitespace
c = c:match( '^%s*(.-)[%s;]*$' )
-- unstrip nowiki strip markers
c = mw.text.unstripNoWiki(c)
-- lowercase
c = c:lower()
-- first try to look it up
local L = HTMLcolor[c]
if (L ~= nil) then
return L
end
-- convert from hsl
if mw.ustring.match(c,'^hsl%([%s]*[0-9][0-9%.]*[%s]*,[%s]*[0-9][0-9%.]*%%[%s]*,[%s]*[0-9][0-9%.]*%%[%s]*%)$') then
local h, s, l = mw.ustring.match(c,'^hsl%([%s]*([0-9][0-9%.]*)[%s]*,[%s]*([0-9][0-9%.]*)%%[%s]*,[%s]*([0-9][0-9%.]*)%%[%s]*%)$')
return hsl2lum(tonumber(h), tonumber(s)/100, tonumber(l)/100)
end
-- convert from rgb
if mw.ustring.match(c,'^rgb%([%s]*[0-9][0-9]*[%s]*,[%s]*[0-9][0-9]*[%s]*,[%s]*[0-9][0-9]*[%s]*%)$') then
local R, G, B = mw.ustring.match(c,'^rgb%([%s]*([0-9][0-9]*)[%s]*,[%s]*([0-9][0-9]*)[%s]*,[%s]*([0-9][0-9]*)[%s]*%)$')
return rgbdec2lum(tonumber(R), tonumber(G), tonumber(B))
end
-- convert from rgb percent
if mw.ustring.match(c,'^rgb%([%s]*[0-9][0-9%.]*%%[%s]*,[%s]*[0-9][0-9%.]*%%[%s]*,[%s]*[0-9][0-9%.]*%%[%s]*%)$') then
local R, G, B = mw.ustring.match(c,'^rgb%([%s]*([0-9][0-9%.]*)%%[%s]*,[%s]*([0-9][0-9%.]*)%%[%s]*,[%s]*([0-9][0-9%.]*)%%[%s]*%)$')
return rgbdec2lum(255*tonumber(R)/100, 255*tonumber(G)/100, 255*tonumber(B)/100)
end
-- remove leading # (if there is one) and whitespace
c = mw.ustring.match(c, '^[%s#]*([a-f0-9]*)[%s]*$')
-- split into rgb
local cs = mw.text.split(c or '', '')
if( #cs == 6 ) then
local R = 16*tonumber('0x' .. cs[1]) + tonumber('0x' .. cs[2])
local G = 16*tonumber('0x' .. cs[3]) + tonumber('0x' .. cs[4])
local B = 16*tonumber('0x' .. cs[5]) + tonumber('0x' .. cs[6])
return rgbdec2lum(R, G, B)
elseif ( #cs == 3 ) then
local R = 16*tonumber('0x' .. cs[1]) + tonumber('0x' .. cs[1])
local G = 16*tonumber('0x' .. cs[2]) + tonumber('0x' .. cs[2])
local B = 16*tonumber('0x' .. cs[3]) + tonumber('0x' .. cs[3])
return rgbdec2lum(R, G, B)
end
-- failure, return blank
return ''
end
-- This exports the function for use in other modules.
-- The colour is passed as a string.
function p._lum(color)
return color2lum(color)
end
function p._greatercontrast(args)
local bias = tonumber(args['bias'] or '0') or 0
local css = (args['css'] and args['css'] ~= '') and true or false
local v1 = color2lum(args[1] or '')
local c2 = args[2] or '#FFFFFF'
local v2 = color2lum(c2)
local c3 = args[3] or '#000000'
local v3 = color2lum(c3)
local ratio1 = -1;
local ratio2 = -1;
if (type(v1) == 'number' and type(v2) == 'number') then
ratio1 = (v2 + 0.05)/(v1 + 0.05)
ratio1 = (ratio1 < 1) and 1/ratio1 or ratio1
end
if (type(v1) == 'number' and type(v3) == 'number') then
ratio2 = (v3 + 0.05)/(v1 + 0.05)
ratio2 = (ratio2 < 1) and 1/ratio2 or ratio2
end
if css then
local c1 = args[1] or ''
if mw.ustring.match(c1, '^[A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9]$') or
mw.ustring.match(c1, '^[A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9]$') then
c1 = '#' .. c1
end
if mw.ustring.match(c2, '^[A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9]$') or
mw.ustring.match(c2, '^[A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9]$') then
c2 = '#' .. c2
end
if mw.ustring.match(v3, '^[A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9]$') or
mw.ustring.match(v3, '^[A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9]$') then
c3 = '#' .. c3
end
return 'background-color:' .. c1 .. '; color:' .. ((ratio1 > 0) and (ratio2 > 0) and ((ratio1 + bias > ratio2) and c2 or c3) or '') .. ';'
end
return (ratio1 > 0) and (ratio2 > 0) and ((ratio1 + bias > ratio2) and c2 or c3) or ''
end
function p._ratio(args)
local v1 = color2lum(args[1])
local v2 = color2lum(args[2])
if (type(v1) == 'number' and type(v2) == 'number') then
-- v1 should be the brighter of the two.
if v2 > v1 then
v1, v2 = v2, v1
end
return (v1 + 0.05)/(v2 + 0.05)
else
return args['error'] or '?'
end
end
function p._styleratio(args)
local style = (args[1] or ''):lower()
local bg, fg = 'white', 'black'
local lum_bg, lum_fg = 1, 0
if args[2] then
local lum = color2lum(args[2])
if lum ~= '' then bg, lum_bg = args[2], lum end
end
if args[3] then
local lum = color2lum(args[3])
if lum ~= '' then fg, lum_fg = args[3], lum end
end
local slist = mw.text.split(mw.ustring.gsub(mw.ustring.gsub(style or '', '&#[Xx]23;', '#'), '#', '#'), ';')
for k = 1,#slist do
local s = slist[k]
local k,v = s:match( '^[%s]*([^:]-):([^:]-)[%s;]*$' )
k = k or ''
v = v or ''
if (k:match('^[%s]*(background)[%s]*$') or k:match('^[%s]*(background%-color)[%s]*$')) then
local lum = color2lum(v)
if( lum ~= '' ) then bg, lum_bg = v, lum end
elseif (k:match('^[%s]*(color)[%s]*$')) then
local lum = color2lum(v)
if( lum ~= '' ) then bg, lum_fg = v, lum end
end
end
if lum_bg > lum_fg then
return (lum_bg + 0.05)/(lum_fg + 0.05)
else
return (lum_fg + 0.05)/(lum_bg + 0.05)
end
end
--[[
Use {{#invoke:Color contrast|somecolor}} directly or
{{#invoke:Color contrast}} from a wrapper template.
Parameters:
-- |1= — required; A color to check.
--]]
function p.lum(frame)
local color = frame.args[1] or frame:getParent().args[1]
return p._lum(color)
end
function p.ratio(frame)
local args = frame.args[1] and frame.args or frame:getParent().args
return p._ratio(args)
end
function p.styleratio(frame)
local args = frame.args[1] and frame.args or frame:getParent().args
return p._styleratio(args)
end
function p.greatercontrast(frame)
local args = frame.args[1] and frame.args or frame:getParent().args
return p._greatercontrast(args)
end
return p
1e399769117591366a63f62996c9a407077cc711
Module:Color contrast/colors
828
346
726
725
2023-09-14T17:35:37Z
Ilovethehitgameomori
2
1 revision imported
Scribunto
text/plain
return {
aliceblue = 0.92880068253475,
antiquewhite = 0.84646951707754,
aqua = 0.7874,
aquamarine = 0.8078549208338,
azure = 0.97265264954166,
beige = 0.8988459998705,
bisque = 0.80732327372979,
black = 0,
blanchedalmond = 0.85084439608156,
blue = 0.0722,
blueviolet = 0.12622014321946,
brown = 0.098224287876511,
burlywood = 0.51559844533893,
cadetblue = 0.29424681085422,
chartreuse = 0.76032025902623,
chocolate = 0.23898526114557,
coral = 0.37017930872924,
cornflowerblue = 0.30318641994179,
cornsilk = 0.93562110372965,
crimson = 0.16042199953026,
cyan = 0.7874,
darkblue = 0.018640801980939,
darkcyan = 0.20329317839046,
darkgoldenrod = 0.27264703559993,
darkgray = 0.39675523072563,
darkgreen = 0.091143429047575,
darkgrey = 0.39675523072563,
darkkhaki = 0.45747326349994,
darkmagenta = 0.07353047651207,
darkolivegreen = 0.12651920884889,
darkorange = 0.40016167026524,
darkorchid = 0.13413142174857,
darkred = 0.054889674531132,
darksalmon = 0.40541471563381,
darkseagreen = 0.43789249325969,
darkslateblue = 0.065792846227988,
darkslategray = 0.067608151928044,
darkslategrey = 0.067608151928044,
darkturquoise = 0.4874606277449,
darkviolet = 0.10999048339343,
deeppink = 0.23866895828276,
deepskyblue = 0.44481603395575,
dimgray = 0.14126329114027,
dimgrey = 0.14126329114027,
dodgerblue = 0.27442536991456,
firebrick = 0.10724525535015,
floralwhite = 0.95922484825004,
forestgreen = 0.18920812076002,
fuchsia = 0.2848,
gainsboro = 0.71569350050648,
ghostwhite = 0.94311261886323,
gold = 0.69860877428159,
goldenrod = 0.41919977809569,
gray = 0.2158605001139,
green = 0.15438342968146,
greenyellow = 0.80609472611453,
grey = 0.2158605001139,
honeydew = 0.96336535554782,
hotpink = 0.34658438169715,
indianred = 0.21406134963884,
indigo = 0.03107561486337,
ivory = 0.99071270600615,
khaki = 0.77012343394121,
lavender = 0.80318750514521,
lavenderblush = 0.90172748631046,
lawngreen = 0.73905893124963,
lemonchiffon = 0.94038992245622,
lightblue = 0.63709141280807,
lightcoral = 0.35522120733135,
lightcyan = 0.94587293494829,
lightgoldenrodyellow = 0.93348351018297,
lightgray = 0.65140563741982,
lightgreen = 0.69091979956865,
lightgrey = 0.65140563741982,
lightpink = 0.58566152734898,
lightsalmon = 0.4780675225206,
lightseagreen = 0.35050145117042,
lightskyblue = 0.56195637618331,
lightslategray = 0.23830165007287,
lightslategrey = 0.23830165007287,
lightsteelblue = 0.53983888284666,
lightyellow = 0.98161818392882,
lime = 0.7152,
limegreen = 0.44571042246098,
linen = 0.88357340984379,
magenta = 0.2848,
maroon = 0.045891942324215,
mediumaquamarine = 0.49389703310801,
mediumblue = 0.044077780212328,
mediumorchid = 0.21639251153773,
mediumpurple = 0.22905858091648,
mediumseagreen = 0.34393112338131,
mediumslateblue = 0.20284629471622,
mediumspringgreen = 0.70704308194184,
mediumturquoise = 0.5133827926448,
mediumvioletred = 0.14371899849357,
midnightblue = 0.02071786635086,
mintcream = 0.97834604947588,
mistyrose = 0.82183047859185,
moccasin = 0.80083000991567,
navajowhite = 0.76519682342785,
navy = 0.015585128108224,
oldlace = 0.91900633405549,
olive = 0.20027537200568,
olivedrab = 0.22593150951929,
orange = 0.4817026703631,
orangered = 0.25516243753416,
orchid = 0.31348806761439,
palegoldenrod = 0.78792647887614,
palegreen = 0.77936759006353,
paleturquoise = 0.76436077921714,
palevioletred = 0.28754994117889,
papayawhip = 0.87797100199835,
peachpuff = 0.74905589878251,
peru = 0.30113074877936,
pink = 0.63271070702466,
plum = 0.45734221587969,
powderblue = 0.68254586500605,
purple = 0.061477070432439,
rebeccapurple = 0.07492341159447,
red = 0.2126,
rosybrown = 0.32319457649407,
royalblue = 0.16663210743188,
saddlebrown = 0.097922285020521,
salmon = 0.36977241527596,
sandybrown = 0.46628543696283,
seagreen = 0.19734199706275,
seashell = 0.92737862206922,
sienna = 0.13697631337098,
silver = 0.52711512570581,
skyblue = 0.55291668518184,
slateblue = 0.14784278062136,
slategray = 0.20896704076536,
slategrey = 0.20896704076536,
snow = 0.96533341834849,
springgreen = 0.73052306068529,
steelblue = 0.20562642207625,
tan = 0.48237604163921,
teal = 0.16996855778968,
thistle = 0.56818401093733,
tomato = 0.30638612719415,
turquoise = 0.5895536427578,
violet = 0.40315452986676,
wheat = 0.74909702820482,
white = 1,
whitesmoke = 0.91309865179342,
yellow = 0.9278,
yellowgreen = 0.50762957208707,
}
6ae47fdb24de4eed5ec26d203faf5341a388987b
Template:See
10
347
728
727
2023-09-14T17:35:37Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
#REDIRECT [[Template:Further]]
5d02b5a16045ac62c67ba614e550dec3a5661db7
Template:T
10
348
730
729
2023-09-14T17:35:39Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
#REDIRECT [[Template:Template link]]
{{Rcat shell|
{{R from template shortcut}}
}}
<!-- Used as Template:tl throughout English Wikipedia; demo template referenced only on meta -->
bb10dbc83695404528dbc095ea267429142c7f05
Template:Hatnote templates
10
349
732
731
2023-09-14T17:35:43Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{Navbox
| name = Hatnote templates
| state = {{{state|<includeonly>autocollapse</includeonly>}}}
| bodyclass = hlist
| belowclass = hlist
| title = [[WP:Hatnote#Hatnote templates|Hatnote templates]]
| above =
*[[Wikipedia:Hatnote]]
*[[Wikipedia:Disambiguation]]
*[[Wikipedia:Redirect]]
| group1 = Generic
| list1 =
*{{tl|Hatnote}}
*{{tl|Self-reference}}
| group2 = For and about
| list2 =
*{{tl|For}}
*{{tl|For-text}} (for custom text)
*{{tl|For-multi}} (for multiple uses)
*{{tl|About}}
*Variations: {{tl|Other uses}}
*{{tl|Other uses of}}
*{{tl|Redirect-distinguish-for}}
*{{tl|About-distinguish}}
*{{tl|About-distinguish-text}}
| group3 = Other topics
| list3 =
*{{tl|Other people}}
*{{tl|About other people}} (adds "about" description)
*{{tl|Similar names}}
*{{tl|Other storms}}
*{{tl|Other places}}
*{{tl|Other ships}}
| group4 = Redirect
| list4 =
*{{tl|Redirect}}
*{{tl|Redirect2}} (for two redirects)
*{{tl|Redirect-multi}} (for multiple redirects)
*{{tl|Redirect-several}} (for several redirects, without listing each)
*{{tl|Redirect-synonym}}
*{{tl|Redirect-distinguish}}
*{{tl|Redirect-distinguish-text}}
*{{tl|Redirect-distinguish-for}}
*{{tl|Technical reasons}}
| group5 = Distinguish
| list5 =
*{{tl|Distinguish}} (supports custom text)
*{{tl|About-distinguish}}
*{{tl|About-distinguish-text}} (for custom text)
*{{tl|Redirect-distinguish}}
*{{tl|Redirect-distinguish-text}} (for custom text)
*{{tl|Redirect-distinguish-for}}
| group6 = For use in sections
| list6 =
*{{tl|Main}}
*{{tl|Main if exists}}
*{{tl|Main list}}
*{{tl|Further}}
*{{tl|Further-text}} (for custom text)
*{{tl|Further interlanguage link}}
*{{tl|See also}}
*{{tl|See also if exists}}
*{{tl|See also-text}} (for custom text)
*{{tl|For outline}}
*{{tl|For timeline}}
| group7 = Special
| list7 =
*{{tl|Broader}}
*{{tl|For introduction}}
*{{tl|See Wiktionary}}
*{{tl|Transcluding article}}
*{{tl|Transcluded section}}
| group8 = Subject specific
| list8 =
* {{tl|About year}}
* {{tl|Highway detail hatnote}}
* {{tl|For LMST}}
* {{tl|WikiIPA}}
| below =
*{{Icon|cat}} [[:Category:Hatnote templates]]
**[[:Category:Hatnote modules|modules]]
**[[:Category:Hatnote templates for names|for [family] names]]
**[[:Category:Hatnote templates for lists|for lists]]
*[[Template:Category hatnote templates|hatnote templates for category pages]]
}}<noinclude>
{{Documentation}}
</noinclude>
5ea17ab2381b3c2002e4846f08d462d2574b6015
Module:Transclusion count/data/S
828
350
734
733
2023-09-14T17:35:44Z
Ilovethehitgameomori
2
1 revision imported
Scribunto
text/plain
return {
["S"] = 3500,
["S-aca"] = 6400,
["S-ach"] = 16000,
["S-aft"] = 218000,
["S-aft/check"] = 218000,
["S-aft/filter"] = 218000,
["S-bef"] = 223000,
["S-bef/check"] = 223000,
["S-bef/filter"] = 223000,
["S-break"] = 5000,
["S-civ"] = 2600,
["S-dip"] = 5300,
["S-end"] = 246000,
["S-gov"] = 7900,
["S-hon"] = 3800,
["S-hou"] = 9500,
["S-inc"] = 13000,
["S-legal"] = 9300,
["S-mil"] = 12000,
["S-new"] = 16000,
["S-non"] = 9900,
["S-npo"] = 4000,
["S-off"] = 41000,
["S-par"] = 50000,
["S-par/en"] = 3200,
["S-par/gb"] = 3300,
["S-par/uk"] = 12000,
["S-par/us-hs"] = 11000,
["S-par/us-sen"] = 2000,
["S-ppo"] = 13000,
["S-prec"] = 3200,
["S-rail"] = 6400,
["S-rail-start"] = 6200,
["S-rail/lines"] = 6400,
["S-reg"] = 20000,
["S-rel"] = 18000,
["S-roy"] = 2700,
["S-s"] = 3600,
["S-sports"] = 10000,
["S-start"] = 239000,
["S-ttl"] = 229000,
["S-ttl/check"] = 229000,
["S-vac"] = 6500,
["SCO"] = 3700,
["SDcat"] = 5430000,
["SECOND"] = 2300,
["SGP"] = 2600,
["SIA"] = 2600,
["SIPA"] = 2600,
["SLO"] = 4200,
["SMS"] = 7200,
["SMU"] = 2100,
["SPI_archive_notice"] = 71000,
["SPIarchive_notice"] = 70000,
["SPIcat"] = 3800,
["SPIclose"] = 3300,
["SPIpriorcases"] = 65000,
["SR/Olympics_profile"] = 3100,
["SRB"] = 3700,
["SS"] = 20000,
["SSPa"] = 2600,
["STN"] = 13000,
["SUBJECTSPACE_formatted"] = 42000,
["SUI"] = 8400,
["SVG"] = 3200,
["SVG-Logo"] = 17000,
["SVG-Res"] = 15000,
["SVG-logo"] = 2900,
["SVG_logo"] = 2000,
["SVK"] = 5900,
["SVN"] = 5200,
["SWE"] = 12000,
["Sandbox_other"] = 232000,
["Saturday"] = 2700,
["Saved_book"] = 52000,
["Sc"] = 3200,
["Scholia"] = 2700,
["School_block"] = 13000,
["School_disambiguation"] = 3400,
["Schoolblock"] = 6700,
["Schooldis"] = 2700,
["Schoolip"] = 10000,
["Scientist_icon"] = 15000,
["Scientist_icon2"] = 15000,
["Sclass"] = 31000,
["Sclass2"] = 10000,
["Screen_reader-only"] = 43000,
["Screen_reader-only/styles.css"] = 43000,
["Script"] = 5800,
["Script/Arabic"] = 2200,
["Script/Hebrew"] = 4700,
["Script/Nastaliq"] = 14000,
["Script/doc/id-unk"] = 3000,
["Script/doc/id-unk/core"] = 3000,
["Script/doc/id-unk/is-iso-alpha4"] = 2800,
["Script/doc/id-unk/name-to-alpha4"] = 3000,
["Script/styles.css"] = 3100,
["Script/styles_arabic.css"] = 2200,
["Script/styles_hebrew.css"] = 4700,
["Sdash"] = 3100,
["Search_box"] = 51000,
["Search_link"] = 9900,
["Section_link"] = 54000,
["Section_sizes"] = 2400,
["See"] = 10000,
["See_also"] = 183000,
["Seealso"] = 6700,
["Select_skin"] = 4300,
["Selected_article"] = 2700,
["Selected_picture"] = 2500,
["Self"] = 48000,
["Self-published_inline"] = 3900,
["Self-published_source"] = 6600,
["Self-reference"] = 2700,
["Self-reference_tool"] = 5200,
["Self/migration"] = 33000,
["Self2"] = 2100,
["Sent_off"] = 13000,
["Sentoff"] = 4300,
["Separated_entries"] = 178000,
["Sequence"] = 3700,
["Serial_killer_opentask"] = 3600,
["Series_overview"] = 7700,
["Serif"] = 2800,
["Set_category"] = 35000,
["Set_index_article"] = 5700,
["Sets_taxobox_colour"] = 92000,
["Sfn"] = 154000,
["SfnRef"] = 133000,
["Sfnm"] = 3600,
["Sfnp"] = 17000,
["Sfnref"] = 11000,
["Sfrac"] = 4200,
["Sfrac/styles.css"] = 4200,
["SharedIPEDU"] = 3200,
["Shared_IP"] = 11000,
["Shared_IP_advice"] = 16000,
["Shared_IP_corp"] = 5100,
["Shared_IP_edu"] = 129000,
["Shared_IP_gov"] = 3000,
["Sharedip"] = 3300,
["Sharedipedu"] = 3600,
["Sherdog"] = 2600,
["Ship"] = 85000,
["Ship/maintenancecategory"] = 85000,
["Ship_index"] = 7000,
["Shipboxflag"] = 20000,
["Shipboxflag/core"] = 20000,
["Shipwrecks_navbox_footer"] = 10000,
["Shipwrecks_navbox_footer/link"] = 10000,
["Short_description"] = 5540000,
["Short_description/lowercasecheck"] = 5540000,
["Short_pages_monitor"] = 10000,
["Short_pages_monitor/maximum_length"] = 10000,
["Shortcut"] = 20000,
["Should_be_SVG"] = 9100,
["Show_button"] = 2140000,
["Sic"] = 32000,
["Sica"] = 3000,
["Side_box"] = 1120000,
["Sidebar"] = 256000,
["Sidebar_games_events"] = 36000,
["Sidebar_person"] = 2300,
["Sidebar_person/styles.css"] = 2300,
["Sidebar_with_collapsible_lists"] = 93000,
["Sigfig"] = 3700,
["Significant_figures"] = 5000,
["Significant_figures/rnd"] = 4600,
["Signpost-subscription"] = 2100,
["Sildb_prim"] = 2000,
["Silver02"] = 16000,
["Silver2"] = 48000,
["Silver_medal"] = 5500,
["Similar_names"] = 2200,
["Single+double"] = 6800,
["Single+space"] = 14000,
["Single-innings_cricket_match"] = 3200,
["Single_chart"] = 37000,
["Single_chart/chartnote"] = 37000,
["Single_namespace"] = 201000,
["Singlechart"] = 20000,
["Singles"] = 41000,
["Sister-inline"] = 188000,
["Sister_project"] = 1040000,
["Sister_project_links"] = 11000,
["Sisterlinks"] = 2800,
["Skip_to_talk"] = 12000,
["Skip_to_talk/styles.css"] = 12000,
["Sky"] = 2700,
["Sky/styles.css"] = 2700,
["Slink"] = 13000,
["Small"] = 599000,
["Small_Solar_System_bodies"] = 3600,
["Smallcaps"] = 18000,
["Smallcaps/styles.css"] = 18000,
["Smallcaps_all"] = 3300,
["Smalldiv"] = 22000,
["Smaller"] = 73000,
["Smallsup"] = 21000,
["Smiley"] = 44000,
["Snd"] = 163000,
["Snds"] = 6300,
["Soccer_icon"] = 130000,
["Soccer_icon2"] = 130000,
["Soccer_icon4"] = 5100,
["Soccerbase"] = 13000,
["Soccerbase_season"] = 6700,
["Soccerway"] = 75000,
["Sock"] = 47000,
["Sock_list"] = 4200,
["Sockcat"] = 2000,
["Sockmaster"] = 9400,
["Sockpuppet"] = 238000,
["Sockpuppet/altmaster"] = 2100,
["Sockpuppet/categorise"] = 238000,
["SockpuppetCheckuser"] = 5500,
["Sockpuppet_category"] = 45000,
["Sockpuppet_category/confirmed"] = 23000,
["Sockpuppet_category/suspected"] = 22000,
["Sockpuppetcheckuser"] = 3600,
["Sockpuppeteer"] = 25000,
["Soft_redirect"] = 6100,
["Soft_redirect_protection"] = 8200,
["Softredirect"] = 3200,
["Solar_luminosity"] = 4400,
["Solar_mass"] = 5200,
["Solar_radius"] = 4300,
["Soldier_icon"] = 3900,
["Soldier_icon2"] = 3900,
["Song"] = 8300,
["Songs"] = 19000,
["Songs_category"] = 8400,
["Songs_category/core"] = 8400,
["Sort"] = 117000,
["Sortname"] = 52000,
["Source-attribution"] = 28000,
["Source_check"] = 964000,
["Sourcecheck"] = 964000,
["Sources"] = 2500,
["South_America_topic"] = 2500,
["Sp"] = 248000,
["Space"] = 55000,
["Space+double"] = 18000,
["Space+single"] = 13000,
["Spaced_en_dash"] = 195000,
["Spaced_en_dash_space"] = 6400,
["Spaced_ndash"] = 23000,
["Spaces"] = 2700000,
["Spain_metadata_Wikidata"] = 7500,
["Spamlink"] = 13000,
["Species_Latin_name_abbreviation_disambiguation"] = 2200,
["Species_list"] = 15000,
["Speciesbox"] = 289000,
["Speciesbox/getGenus"] = 289000,
["Speciesbox/getSpecies"] = 289000,
["Speciesbox/name"] = 289000,
["Speciesbox/parameterCheck"] = 289000,
["Speciesbox/trim"] = 289000,
["Specieslist"] = 5400,
["Split_article"] = 3600,
["Spnd"] = 4100,
["Spoken_Wikipedia"] = 2100,
["Sport_icon"] = 14000,
["Sport_icon2"] = 15000,
["SportsYearCatUSstate"] = 6500,
["SportsYearCatUSstate/core"] = 6500,
["Sports_links"] = 65000,
["Sports_reference"] = 7200,
["Squad_maintenance"] = 3500,
["Sronly"] = 41000,
["Srt"] = 5200,
["Stack"] = 25000,
["Stack/styles.css"] = 34000,
["Stack_begin"] = 9000,
["Stack_end"] = 9000,
["StaleIP"] = 3200,
["Standings_table_end"] = 54000,
["Standings_table_entry"] = 54000,
["Standings_table_entry/record"] = 54000,
["Standings_table_start"] = 54000,
["Standings_table_start/colheader"] = 54000,
["Standings_table_start/colspan"] = 54000,
["Standings_table_start/styles.css"] = 54000,
["Starbox_astrometry"] = 5100,
["Starbox_begin"] = 5300,
["Starbox_catalog"] = 5200,
["Starbox_character"] = 5100,
["Starbox_detail"] = 5000,
["Starbox_end"] = 5300,
["Starbox_image"] = 2900,
["Starbox_observe"] = 5100,
["Starbox_reference"] = 5200,
["Start-Class"] = 18000,
["Start-date"] = 3800,
["Start_and_end_dates"] = 3800,
["Start_box"] = 8000,
["Start_date"] = 435000,
["Start_date_and_age"] = 139000,
["Start_date_and_years_ago"] = 6500,
["Start_of_course_timeline"] = 6100,
["Start_of_course_week"] = 6300,
["Start_tab"] = 4900,
["Startflatlist"] = 144000,
["Static_IP"] = 5900,
["Station"] = 7700,
["Station_link"] = 16000,
["Stdinchicite"] = 11000,
["Steady"] = 14000,
["Stl"] = 14000,
["Stn"] = 7300,
["Stn_art_lnk"] = 2000,
["Stnlnk"] = 30000,
["Storm_colour"] = 5100,
["Storm_path"] = 2100,
["StoryTeleplay"] = 3500,
["Str_endswith"] = 200000,
["Str_find"] = 115000,
["Str_index"] = 13000,
["Str_left"] = 949000,
["Str_len"] = 18000,
["Str_letter"] = 175000,
["Str_letter/trim"] = 20000,
["Str_number"] = 8000,
["Str_number/trim"] = 169000,
["Str_rep"] = 312000,
["Str_right"] = 44000,
["Str_trim"] = 5300,
["Str_≠_len"] = 34000,
["Str_≥_len"] = 72000,
["Strfind_short"] = 224000,
["Strikethrough"] = 16000,
["String_split"] = 2800,
["Strip_tags"] = 38000,
["Strong"] = 858000,
["Structurae"] = 2100,
["Stub-Class"] = 17000,
["Stub_Category"] = 13000,
["Stub_category"] = 18000,
["Stub_documentation"] = 36000,
["Student_editor"] = 27000,
["Student_sandbox"] = 4500,
["Student_table_row"] = 5300,
["Students_table"] = 5300,
["Su"] = 9700,
["Su-census1989"] = 4500,
["Sub"] = 4100,
["Subinfobox_bodystyle"] = 35000,
["Subject_bar"] = 18000,
["Suboff"] = 6200,
["Subon"] = 6300,
["Subpage_other"] = 288000,
["Subscription"] = 4300,
["Subscription_required"] = 34000,
["Subsidebar_bodystyle"] = 6800,
["Subst_only"] = 4600,
["Substituted_comment"] = 19000,
["Succession_box"] = 118000,
["Succession_box/check"] = 118000,
["Succession_links"] = 163000,
["Summer_Olympics_by_year_category_navigation"] = 2400,
["Summer_Olympics_by_year_category_navigation/core"] = 2400,
["Sunday"] = 2700,
["Sup"] = 59000,
["Suppress_categories"] = 5300,
["Surname"] = 66000,
["Swiss_populations"] = 2400,
["Swiss_populations_NC"] = 3000,
["Swiss_populations_YM"] = 2300,
["Swiss_populations_ref"] = 2400,
["Switcher"] = 2900,
["Module:SDcat"] = 5430000,
["Module:SPI_archive_notice"] = 32000,
["Module:Science_redirect"] = 254000,
["Module:Science_redirect/conf"] = 254000,
["Module:Section_link"] = 54000,
["Module:Section_sizes"] = 3500,
["Module:See_also_if_exists"] = 73000,
["Module:Separated_entries"] = 2280000,
["Module:Series_overview"] = 7800,
["Module:Settlement_short_description"] = 710000,
["Module:Shortcut"] = 24000,
["Module:Shortcut/config"] = 23000,
["Module:Shortcut/styles.css"] = 23000,
["Module:Side_box"] = 1160000,
["Module:Side_box/styles.css"] = 1150000,
["Module:Sidebar"] = 338000,
["Module:Sidebar/configuration"] = 338000,
["Module:Sidebar/styles.css"] = 344000,
["Module:Sidebar_games_events"] = 36000,
["Module:Sidebar_games_events/styles.css"] = 36000,
["Module:Singles"] = 41000,
["Module:Sister_project_links"] = 14000,
["Module:Sister_project_links/bar/styles.css"] = 3400,
["Module:Sister_project_links/styles.css"] = 11000,
["Module:Sock_list"] = 4200,
["Module:Sort_title"] = 18000,
["Module:Sortkey"] = 198000,
["Module:Split_article"] = 3600,
["Module:Spoken_Wikipedia"] = 2100,
["Module:Spoken_Wikipedia/configuration"] = 2100,
["Module:Spoken_Wikipedia/styles.css"] = 2100,
["Module:Sports_career"] = 19000,
["Module:Sports_color"] = 68000,
["Module:Sports_color/baseball"] = 34000,
["Module:Sports_color/basketball"] = 22000,
["Module:Sports_color/ice_hockey"] = 3100,
["Module:Sports_rbr_table"] = 11000,
["Module:Sports_rbr_table/styles.css"] = 11000,
["Module:Sports_reference"] = 7200,
["Module:Sports_results"] = 14000,
["Module:Sports_results/styles.css"] = 9500,
["Module:Sports_table"] = 58000,
["Module:Sports_table/WDL"] = 51000,
["Module:Sports_table/WDL_OT"] = 2700,
["Module:Sports_table/WL"] = 3900,
["Module:Sports_table/argcheck"] = 58000,
["Module:Sports_table/styles.css"] = 58000,
["Module:Sports_table/sub"] = 58000,
["Module:Sports_table/totalscheck"] = 42000,
["Module:Stock_tickers/NYSE"] = 2100,
["Module:Storm_categories"] = 5200,
["Module:Storm_categories/categories"] = 5200,
["Module:Storm_categories/colors"] = 5200,
["Module:Storm_categories/icons"] = 5200,
["Module:String"] = 11300000,
["Module:String2"] = 2280000,
["Module:Su"] = 12000,
["Module:Subject_bar"] = 18000,
["Module:Suppress_categories"] = 5300,
}
29f3f05e956c904ac0299fb29b70ac2b1f93c9bd
Template:See also/doc
10
351
736
735
2023-09-14T17:35:45Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{documentation subpage}}
{{used in system|in [[MediaWiki:wantedpages-summary]]}}
{{lua|Module:Labelled list hatnote}}
This template is used to create '''[[WP:Hatnotes|hatnotes]] to point to a small number of other related titles''' at the '''top of article ''[[Help:Section|sections]]''''' (excluding the [[WP:LEAD|lead]]). It looks like this:
{{See also|Article}}
Do not use this template on top of a page, where hatnotes are for disambiguation and not for related topics (according to [[WP:RELATED]]). Do not use this template inside [[Wikipedia:Manual of Style/Layout#"See also" section|the ''"See also" section'']] at the end of an article, or for links to other articles or subsections of the same article within regular article text. Where subsections are linked to, [[Template:Section link]] may be suitable instead. For use on category pages, the corresponding template is [[Template:Category see also]].
Refer to the examples below to see how the template handles link targets containing section links and commas.
==Usage==
{{see|WP:SUMMARYHATNOTE}}
; Basic usage:
{{See also|''page1''|''page2''|''page3''|...}}
; All parameters:
{{See also|''page1''|''page2''|''page3''| ...
|label 1 = ''label 1''|label 2 = ''label2''|label 3 = ''label3''| ...
|l1 = ''label1''|l2 = ''label2''|l3 = ''label3''| ...
|selfref = ''yes''|category = ''no''}}
==Parameters==
This template accepts the following parameters:
* <code>1</code>, <code>2</code>, <code>3</code>, ... – the pages to link to. At least one page name is required. Categories and files are automatically escaped with the [[Help:Colon trick|colon trick]], and links to sections are automatically formatted as ''page § section'', rather than the MediaWiki default of ''page#section''.
* <code>label 1</code>, <code>label 2</code>, <code>label 3</code>, ...; or <code>l1</code>, <code>l2</code>, <code>l3</code>, ...; optional labels for each of the pages to link to.
* <code>selfref</code> – if set to "yes", "y", "true" or "1", adds the CSS class "selfref". This is used to denote self-references to Wikipedia. See [[Template:Selfref]] for more information.
* <code>category</code> – if set to "no", "n", "false", or "0", suppresses the error tracking category ([[:Category:Hatnote templates with errors]]). This only has an effect if the first positional parameter (the page to link to) is omitted.
== Examples ==
* <code><nowiki>{{See also|Article}}</nowiki></code> → {{See also|Article}}
* <code><nowiki>{{See also|Article#Section}}</nowiki></code> → {{See also|Article#Section}}
* <code><nowiki>{{See also|Article#Section|label 1=Custom section label}}</nowiki></code> → {{See also|Article#Section|label 1=Custom section label}}
* <code><nowiki>{{See also|Article1|Article2|Article3}}</nowiki></code> → {{See also|Article1|Article2|Article3}}
* <code><nowiki>{{See also|Article1|Article,2|Article3}}</nowiki></code> → {{See also|Article1|Article,2|Article3}}
* <code><nowiki>{{See also|Article1|l1=Custom label 1|Article2|l2=Custom label 2}}</nowiki></code> → {{See also|Article1|l1=Custom label 1|Article2|l2=Custom label 2}}
* <code><nowiki>{{See also|Veni, vidi, vici|Julius Caesar}}</nowiki></code> → {{See also|Veni, vidi, vici|Julius Caesar}}
* <code><nowiki>{{See also|Veni, vidi, vici|Julius Caesar#Civil war}}</nowiki></code> → {{See also|Veni, vidi, vici|Julius Caesar#Civil war}}
* <code><nowiki>{{See also|Julius Caesar#Civil war|Veni, vidi, vici}}</nowiki></code> → {{See also|Julius Caesar#Civil war|Veni, vidi, vici}}
* <code><nowiki>{{See also|Julius Caesar#Civil war|Crossing the Rubicon}}</nowiki></code> → {{See also|Julius Caesar#Civil war|Crossing the Rubicon}}
==Errors==
If no page names are supplied, the template outputs the following message with the (help) wikilink pointing to the "Errors" section of this page:
*{{See also|category=no}}
If you see this error message, it is for one of three reasons:
# No parameters were specified (the template code was <code><nowiki>{{See also}}</nowiki></code> with no pipe character nor page to link to). Please use <code><nowiki>{{See also|</nowiki>''page''<nowiki>}}</nowiki></code> instead.
# Some parameters were specified, but no page names were included. For example, the template text <code><nowiki>{{See also|selfref=yes}}</nowiki></code> will produce this error. Please use (for example) <code><nowiki>{{See also|</nowiki>''page''<nowiki>|selfref=yes}}</nowiki></code> instead.
# A page name was specified, but it contains an equals sign ("="). The equals sign has a special meaning in template code, and because of this it cannot be used in template parameters that do not specify a parameter name. For example, the template code <code><nowiki>{{See also|1+1=2|2+2=4}}</nowiki></code> will produce this error. To work around this, you can specify the parameter name explicitly by using <code>1=</code>, <code>2</code>, etc., before the page name, like this: <code><nowiki>{{See also|1=1+1=2|2=2+2=4}}</nowiki></code>.
If you see this error message and are unsure of what to do, please post a message on [[WP:HD|the help desk (WP:HD)]], and someone should be able to help you.
To see a list of wikilinks to articles that contain this error message, see the [[Wikipedia:Maintenance|maintenance category]]: [[:Category:Hatnote templates with errors]].
==TemplateData==
{{Collapse top|[[Wikipedia:TemplateData|TemplateData]] documentation used by [[Wikipedia:VisualEditor|VisualEditor]] and other tools}}
{{TemplateData header|noheader=1}}
<templatedata>
{
"description": "This template creates a hatnote to point to a small number of related pages. It is placed at the top of a section, directly underneath the section heading.",
"params": {
"1": {
"label": "Page 1",
"description": "The name of the first page that you want to link to.",
"type": "wiki-page-name",
"required": true,
"example": "Article name"
},
"2": {
"label": "Page 2",
"description": "The name of the second page that you want to link to.",
"type": "wiki-page-name",
"required": false
},
"3": {
"label": "Page 3",
"description": "The name of the third page that you want to link to. More pages can be added using the parameters \"4\", \"5\", \"6\", etc.",
"type": "wiki-page-name",
"required": false
},
"label 1": {
"label": "Label 1",
"type": "string",
"description": "What the first linked article is to be displayed as. ",
"aliases": [
"l1"
]
},
"label 2": {
"label": "Label 2",
"type": "string",
"description": "What the second linked article is to be displayed as.",
"aliases": [
"l2"
]
},
"label 3": {
"aliases": [
"l3"
],
"type": "string",
"label": "Label 3",
"description": "What the third linked article is to be displayed as. Other labels can be added by using increasing numbers (starting with \"label 4\" or \"l4\" for page 4) as parameter names."
},
"selfref": {
"type": "boolean",
"label": "Self reference",
"description": "Set to \"yes\" if the template is a self-reference to Wikipedia that would not make sense on mirrors or forks of the Wikipedia site.",
"example": "yes",
"default": "no"
},
"category": {
"label": "Category",
"description": "Set to \"no\", \"n\", \"false\", or \"0\" to suppresses the error tracking category (Category:Hatnote templates with errors). This only has an effect if no page names are specified.",
"type": "boolean",
"default": "yes",
"example": "no"
}
},
"format": "inline"
}
</templatedata>
{{Collapse bottom}}
==See also==
*{{tl|For}}
*{{tl|See also if exists}}
*{{t|Further}}
*{{tl|Template see also}}
*{{tl|Category see also}}
*{{tl|Main}}
*{{tl|See}} (redirect to {{tl|Further}})
*{{tl|Hatnote}}
{{Hatnote templates}}
<includeonly>{{Sandbox other||
<!-- Categories go here and interwikis go in Wikidata. -->
[[Category:Hatnote templates]]
[[Category:Related-topic templates]]
[[Category:Wikipedia page-section templates]]
[[Category:Wikipedia see also]]
}}</includeonly>
8e7cb32ca0af3f18a7bc8a6a67105914d660c533
Khaganate of Tibet
0
5
1483
24
2023-09-14T19:25:50Z
Ilovethehitgameomori
2
wikitext
text/x-wiki
{{Infobox country
|conventional_long_name = '''Khaganate of Tibet'''
|common_name = Tibet
|image_flag = Tibet empire.jpeg
|alt_flag = Vertical tricolor (green, red, yellow) with a five-pointed gold star in the center of the red.
|official_languages = Tibetan
|demonym = Tibetan
|capital = [[Lhasa]]
|largest_city = [[Lhasa]]
|government_type = [[Absolute monarchy]]
|leader_title1 = Khaganate
|leader_name1 = Jaden the Great
|area_rank = 2nd <!--Demographic Yearbook 1.-->
|area_km2 = 2,500,000
|area_sq_mi = 970,000 <!--Do not remove per [[WP:MOSNUM]]-->
}}
The '''Khaganate of Tibet''' (Tibetan: ཁགནཏེཨོཕ༹་ཏིབེཏ), or simply '''Tibet''', is a country located in East Asia, and modern-day Western China.
It was founded in 621 AD, tracing its roots to the Yarlung dynasty’s expansion, forming the Khaganate. After a harsh period of decline in the nation, and after Langdarma died, it left for a state of Interregnum, which Jaden the Great, sometimes known by his nickname Rgyalmi-dmangs (Tibetan: Person-king). Following his ascent to the throne, this halted the decline of the nation and gradually brought Tibet to a stable and prosperous nation.
To this day, it has global ties with many nations and is in the Imperial Alliance alongside the [[Spartan Empire]].
== History ==
==== Formation ====
Following the expansion of the Yarlung dynasty, the Khaganate formed. Around 838, there was a period of decline in the Khaganate. A couple years later, Langdarma took the throne, however died a year after his ascent to the throne of the nation. Because of this, there was a period of brief interregnum, before the eventual ascent to the throne of Jaden, or Rgyalmi-dmangs.
His idea was to make alliances with growing states, which allowed the Khaganate to grow with trade and improve its declining economy and state.
==== Alliances ====
Because of the decline, Tibet was able to rescue itself by becoming allies with local nations in the region, such as the [[Binbowien Empire]] and the [[Sundanese Empire]], aswell as maintaining good relations with the [[Spartan Empire]] before forming the Imperial Alliance.
==== War period (Present) ====
{{see also|Indo-Tibetan War}}
Following a top secret plan after a meeting with the leader of the Binbowien Empire and the Sundanese Empire, the Indo-Tibetan war was declared on the reasoning that the [[Indian Empire]] is a threat to the national security of Asia. Since then, there have been no changes to the current borders of all nations involved.
== References ==
28616c7bae10ad368abe864b877e36e58c1d17a9
Template:Infobox character
10
1009
2063
2062
2023-09-14T20:56:08Z
Ilovethehitgameomori
2
1 revision imported from [[:dev:Template:Infobox_character]]
wikitext
text/x-wiki
{{Infobox
| bodystyle = border-spacing: 2px 5px;
| above = {{If empty |{{{name|}}} |<includeonly>{{PAGENAMEBASE}}</includeonly> }}
| abovestyle = background: {{If empty |{{{color|}}} |{{{colour|}}} |#DEDEE2 }}; {{#if: {{{color|}}}{{{colour|}}} | color: {{Greater color contrast ratio|{{If empty |{{{color|}}} |{{{colour|}}} }}|black|white }}; }}
| subheader = {{#if: {{{series|}}}{{{franchise|}}} | {{#if: {{{series|}}} | ''{{{series|}}}'' | {{{franchise|}}} }} character{{#if: {{{multiple|}}} | s }} }}
| image = {{{image|}}}|
| caption = {{{caption|}}}
| headerstyle = background: {{If empty |{{{color|}}} |{{{colour|}}} |#DEDEE2 }}; {{#if: {{{color|}}}{{{colour|}}} |color: {{Greater color contrast ratio|{{If empty |{{{color|}}} |{{{colour|}}} }}|black|white }}; }}
| label1 = First appearance
| data1 = {{#if: {{{first|}}} | {{{first|}}} | {{#invoke:Formatted appearance|getFormattedAppearance|major_work={{{first_major|}}} |minor_work={{{first_minor|}}} |issue={{{first_issue|}}} |date={{{first_date|}}} }} }}
| label2 = First game
| data2 = {{{firstgame|}}}
| label3 = Last appearance
| data3 = {{#if: {{{last|}}} | {{{last|}}} | {{#invoke:Formatted appearance|getFormattedAppearance|major_work={{{last_major|}}} |minor_work={{{last_minor|}}} |issue={{{last_issue|}}} |date={{{last_date|}}} }} }}
| label4 = Created by
| data4 = {{{creator|}}}
| label5 = Based on
| data5 = {{{based_on|}}}
| label6 = Adapted by
| data6 = {{{adapted_by|}}}
| label7 = Designed by
| data7 = {{{designer|}}}
| label8 = Portrayed by
| data8 = {{{portrayer|}}}
| label9 = Voiced by
| data9 = {{{voice|}}}
| label10 = Motion capture
| data10 = {{{motion_actor|}}}
| label11 = {{{lbl1|}}}
| data11 = {{{data1|}}}
| label12 = {{{lbl2|}}}
| data12 = {{{data2|}}}
| label13 = {{{lbl3|}}}
| data13 = {{{data3|}}}
| label14 = {{{lbl4|}}}
| data14 = {{{data4|}}}
| label15 = {{{lbl5|}}}
| data15 = {{{data5|}}}
| header20 = {{#if: {{{noinfo|}}} || {{#if: {{{full_name|}}} {{{alias|}}} {{{aliases|}}} {{{nickname|}}} {{{nicknames|}}} {{{race|}}} {{{species|}}} {{{gender|}}} {{{title|}}} {{{occupation|}}} {{{position|}}} {{{class|}}} {{{affiliation|}}} {{{alignment|}}} {{{fighting_style|}}} {{{weapon|}}} {{{family|}}} {{{spouse|}}} {{{spouses|}}} {{{significant_other|}}} {{{significant_others|}}} {{{children|}}} {{{relatives|}}} {{{religion|}}} {{{origin|}}} {{{home|}}} {{{nationality|}}} {{{data21|}}} {{{data22|}}} {{{data23|}}} {{{data24|}}} {{{data25|}}} | {{If empty |{{{info-hdr|}}} |In-universe information }} }} }}
| label21 = Full name
| data21 = {{{full_name|}}}
| label22 = {{#if: {{{alias|}}} | Alias | Aliases }}
| data22 = {{If empty |{{{alias|}}} |{{{aliases|}}} }}
| label23 = {{#if: {{{nickname|}}} | Nickname | Nicknames }}
| data23 = {{If empty |{{{nickname|}}} |{{{nicknames|}}} }}
| label24 = {{#if: {{{race|}}} | Race | Species }}
| data24 = {{If empty |{{{race|}}} |{{{species|}}} }}
| label25 = Gender
| data25 = {{{gender|}}}
| label26 = Title
| data26 = {{{title|}}}
| label27 = {{#if: {{{occupation|}}} | Occupation | {{#if: {{{position|}}} | Position | Class }} }}
| data27 = {{If empty |{{{occupation|}}} |{{{position|}}} |{{{class|}}} }}
| label28 = {{#if: {{{affiliation|}}} | Affiliation | Alignment }}
| data28 = {{If empty |{{{affiliation|}}} |{{{alignment|}}} }}
| label29 = Fighting style
| data29 = {{{fighting_style|}}}
| label30 = Weapon
| data30 = {{{weapon|}}}
| label31 = Family
| data31 = {{{family|}}}
| label32 = {{#if: {{{spouse|}}} | Spouse | Spouses }}
| data32 = {{If empty |{{{spouse|}}} |{{{spouses|}}} }}
| label33 = {{#if: {{{significant_other|}}} | Significant other | Significant others }}
| data33 = {{If empty |{{{significant_other|}}} |{{{significant_others|}}} }}
| label34 = Children
| data34 = {{{children|}}}
| label35 = Relatives
| data35 = {{{relatives|}}}
| label36 = Religion
| data36 = {{{religion|}}}
| label37 = {{#if: {{{origin|}}} | Origin | Home }}
| data37 = {{If empty |{{{origin|}}} |{{{home|}}} }}
| label38 = Nationality
| data38 = {{{nationality|}}}
| label39 = {{{lbl21|}}}
| data39 = {{{data21|}}}
| label40 = {{{lbl22|}}}
| data40 = {{{data22|}}}
| label41 = {{{lbl23|}}}
| data41 = {{{data23|}}}
| label42 = {{{lbl24|}}}
| data42 = {{{data24|}}}
| label43 = {{{lbl25|}}}
| data43 = {{{data25|}}}
| header50 = {{#if: {{{data31|}}} {{{data32|}}} {{{data33|}}} {{{data34|}}} {{{data35|}}} | {{{extra-hdr|}}} }}
| label51 = {{{lbl31|}}}
| data51 = {{{data31|}}}
| label52 = {{{lbl32|}}}
| data52 = {{{data32|}}}
| label53 = {{{lbl33|}}}
| data53 = {{{data33|}}}
| label54 = {{{lbl34|}}}
| data54 = {{{data34|}}}
| label55 = {{{lbl35|}}}
| data55 = {{{data35|}}}
}}<noinclude>
{{Documentation}}
<!-- Add categories to the /doc subpage, not here! -->
</noinclude>
3ce93cfa3dfb9b4b9608b850f3d4e6ac282b3bc9
Template:Para
10
57
2067
119
2023-09-14T20:56:11Z
Ilovethehitgameomori
2
1 revision imported from [[:dev:Template:Para]]
wikitext
text/x-wiki
<code class="tpl-para" style="word-break:break-word;{{SAFESUBST:<noinclude />#if:{{{plain|}}}|border: none; background-color: inherit;}} {{SAFESUBST:<noinclude />#if:{{{plain|}}}{{{mxt|}}}{{{green|}}}{{{!mxt|}}}{{{red|}}}|color: {{SAFESUBST:<noinclude />#if:{{{mxt|}}}{{{green|}}}|#006400|{{SAFESUBST:<noinclude />#if:{{{!mxt|}}}{{{red|}}}|#8B0000|inherit}}}};}} {{SAFESUBST:<noinclude />#if:{{{style|}}}|{{{style}}}}}">|{{SAFESUBST:<noinclude />#if:{{{1|}}}|{{{1}}}=}}{{{2|}}}</code><noinclude>
{{Documentation}}
<!--Categories and interwikis go near the bottom of the /doc subpage.-->
</noinclude>
06006deea2ed5d552aab61b4332321ab749ae7e8
Template:If empty
10
201
2069
409
2023-09-14T20:56:11Z
Ilovethehitgameomori
2
1 revision imported from [[:dev:Template:If_empty]]
wikitext
text/x-wiki
{{<includeonly>safesubst:</includeonly>#invoke:If empty|main}}<noinclude>{{Documentation}}</noinclude>
745940b7bdde8a1585c887ee4ee5ce81d98461a4
Module:Formatted appearance
828
1010
2071
2070
2023-09-14T20:56:12Z
Ilovethehitgameomori
2
1 revision imported from [[:dev:Module:Formatted_appearance]]
Scribunto
text/plain
-- This module requires the use of Module:List.
local p = {}
-- Local function which is used to get a correctly formatted entry.
-- Function checks if the array had a value added by checking the counter,
-- and returns the relevant result.
local function getFormattedEntry(args, counter)
if (counter == 1) then -- Check if the counter stayed the same.
return "" -- Nothing was added to array; Return empty string.
elseif (counter == 2) then -- Check if only one value was added to the array.
return args[1] -- Only one value was added to array; Return that value.
else -- The array had more than one value added.
return table.concat(args, "<br/>") -- Retrieve the formatted plainlist.
end
end
--[[
Local function which is used to format an appearance for a comic book,
in the style of:
Line 1: <comic book title> #<issue number> (with comic book title in italics)
Line 2: <release date>
For other usages, see createGenericEntry().
The function works with the following combinations:
-- Only comic book title (example: "The Incredible Hulk").
-- Title and issue number (example: "The Incredible Hulk" and "181").
-- Title and release date (example: "The Incredible Hulk and "November 1974").
-- Title, issue number and release date (example: "The Incredible Hulk", "181" and "November 1974").
-- Only release date (example: "November 1974").
--]]
local function createComicEntry(appearanceMajor, appearanceMinor, appearanceDate)
local fullString = {} -- Variable to save the array.
local counter = 1 -- Variable to save the array counter.
if (appearanceMajor ~= nil) then -- Check if a comic book title was entered.
if (appearanceMinor == nil) then -- A comic book title was entered; Check if a issue number was entered.
fullString[counter] = appearanceMajor -- A issue was not entered; Add only the comic book title to the array.
counter = counter + 1 -- Increment counter by one.
else
fullString[counter] = appearanceMajor .. " " .. appearanceMinor -- A issue was entered; Add both to the array.
counter = counter + 1 -- Increment counter by one.
end
end
if (appearanceDate ~= nil) then -- Check if a release date was entered.
fullString[counter] = appearanceDate -- A release date was entered; Add it to the array.
counter = counter + 1 -- Increment counter by one.
end
return getFormattedEntry(fullString, counter) -- Call getFormattedEntry() to get a correctly formatted entry.
end
--[[
Local function which is used to format an appearance for most usages,
including television, film, books, songs and games, in the style of:
Line 1: <minor work title> (in quotes) (Minor works include: TV episodes, chapters, songs and game missions)
Line 2: <major work title> (in italics) (Major works include: TV series, films, books, albums and games)
Line 3: <release date>
For comic book usages, see createComicEntry().
The function works with the following combinations:
-- Only minor work title (example: "Live Together, Die Alone").
-- Minor work title and major work title (example: "Live Together, Die Alone" and "Lost").
-- Minor work title and release date (example: "Live Together, Die Alone" and "May 24, 2006").
-- Minor work title, major work title and release date (example: "Live Together, Die Alone", "Lost" and "May 24, 2006").
-- Only major work title (example: "Lost").
-- major work title and release date (example: "Lost" and "May 24, 2006").
-- Only release date (example: "May 24, 2006").
--]]
local function createGenericEntry(appearanceMajor, appearanceMinor, appearanceDate)
local fullString = {} -- Variable to save the array.
local counter = 1 -- Variable to save the array counter.
if (appearanceMinor ~= nil) then -- Check if a minor appearance was entered.
fullString[counter] = appearanceMinor -- A minor appearance was entered; Add it to the array.
counter = counter + 1 -- Increment counter by one.
end
if (appearanceMajor ~= nil) then -- Check if a major appearance was entered.
fullString[counter] = appearanceMajor -- A major appearance was entered; Add it to the array.
counter = counter + 1 -- Increment counter by one.
end
if (appearanceDate ~= nil) then -- Check if a release date was entered.
fullString[counter] = appearanceDate -- A release date was entered; Add it to the array.
counter = counter + 1 -- Increment counter by one.
end
return getFormattedEntry(fullString, counter) -- Call getFormattedEntry() to get a correctly formatted entry.
end
-- Local function which is used to format with a hash symbol comic book issues.
-- For other minor works, see getFormattedGenericMinorWork().
local function getFormattedComicMinorWorkTitle(issue)
if (issue ~= nil) then -- Check if the issue is not nil.
if (string.find(issue, "#")) then -- Check if the issue already has a hash symbol.
return issue -- Hash symbol already present; Return issue.
else
local formattedString = string.gsub(issue, "%d+", "#%1") -- Hash symbol not found; Add the symbol before the issue number.
return formattedString -- Return issue.
end
else
return nil -- issue is nil; Return nil.
end
end
-- Local function which is used to format with quotes a minor work title of most types.
-- For comic book issues, see getFormattedComicMinorWork() (see [MOS:MINORWORK]).
local function getFormattedGenericMinorWorkTitle(title)
if (title ~= nil) then -- Check if the title is not nil.
return "\"" .. title .. "\"" -- Title is not nil; Add quotes to the title.
else
return nil -- Title is nil; Return nil.
end
end
-- Local function which is used to format with italics a major work title (see [MOS:MAJORWORK]).
local function getFormattedMajorWorkTitle(title)
if (title ~= nil) then -- Check if the title is not nil.
return "''" .. title .. "''" -- Title is not nil; Add italics to the title.
else
return nil -- Title is nil; Return nil.
end
end
-- Local function which does the actual main process.
local function _getFormattedAppearance(args)
local appearanceMajor = args['major_work'] -- Get the title of the major work.
local appearanceMinor = args['minor_work'] -- Get the title of the minor work.
local isComic = false -- Variable to save the status of wether the appearence is from a comic book.
if (args['issue'] ~= nil) then -- Check if the comic specific issue is not nil.
appearanceMinor = args['issue'] -- Issue is not nil; Get the issue number.
isComic = true -- Set isComic to true.
end
local appearanceDate = args['date'] -- Get the release date of the minor work.
local formattedAppearanceMajor = getFormattedMajorWorkTitle(appearanceMajor) -- Call getFormattedMajorWorkTitle() to get a formatted major work title.
if (isComic == false) then -- Check if the appearance is a comic book appearance.
-- The appearance is not a comic book appearance;
local formattedAppearanceMinor = getFormattedGenericMinorWorkTitle(appearanceMinor) -- Call getFormattedGenericMinorWorkTitle() to get a formatted minor work title.
return createGenericEntry(formattedAppearanceMajor, formattedAppearanceMinor, appearanceDate) -- Call createGenericEntry() to create an appearance entry.
else
-- The appearance is a comic book appearance.
local formattedAppearanceMinor = getFormattedComicMinorWorkTitle(appearanceMinor) -- Call getFormattedComicMinorWorkTitle() to get a formatted minor work title.
return createComicEntry(formattedAppearanceMajor, formattedAppearanceMinor, appearanceDate) -- Call createComicEntry() to create a comic book appearance entry.
end
end
--[[
Public function which is used to format the |first_appeared= and |last_appeared= fields.
The usage of this module allows for correct title formatting (see [MOS:MAJORWORK] and [MOS:MINORWORK]),
and correct line breaks based on guidelines (see [WP:UBLIST]).
Parameters:
-- |major_work= — optional; The title of the major work the fictional element appeared in.
Major works include TV series, films, books, albums and games.
-- |minor_work= — optional; The title of the minor work the fictional element appeared in.
Minor works include TV episodes, chapters, songs and game missions.
-- |issue= — optional; The number of the comic book issue the fictional element appeared in.
-- |date= — optional; The date of the publication/release of the minor work where the fictional element appeared in.
--]]
function p.getFormattedAppearance(frame)
local getArgs = require('Module:Arguments').getArgs -- Use Module:Arguments to access module arguments.
local args = getArgs(frame) -- Get the arguments sent via the template.
return _getFormattedAppearance(args) -- Call _getFormattedAppearance() to perform the actual process.
end
return p
801fe2d9de9c3eb00e60fd962b6450e0ab1adc0f
Template:Infobox character/doc
10
1011
2073
2072
2023-09-14T20:56:13Z
Ilovethehitgameomori
2
1 revision imported from [[:dev:Template:Infobox_character/doc]]
wikitext
text/x-wiki
{{Documentation subpage}}
'''Infobox character''' is used to create an infobox for a fictional character of any type.
== Usage ==
The blank form immediately below shows the most commonly used fields, and complete instructions are listed further down the page.
{{Infobox character
| name = {{{name}}}
| series = {{{series}}}
| image = {{{image}}}
| alt = {{{alt}}}
| caption = {{{caption}}}
| first_major = {{{first_major}}}
| first_minor = {{{first_minor}}}
| first_date = {{{first_date}}}
| last_major = {{{last_major}}}
| last_minor = {{{last_minor}}}
| last_date = {{{last_date}}}
| creator = {{{creator}}}
| based_on = {{{based_on}}}
| adapted_by = {{{adapted_by}}}
| designer = {{{designer}}}
| portrayer = {{{portrayer}}}
| voice = {{{voice}}}
| motion_actor = {{{motion_actor}}}
| full_name = {{{full_name}}}
| nickname = {{{nickname}}}
| alias = {{{alias}}}
| species = {{{species}}}
| gender = {{{gender}}}
| title = {{{title}}}
| occupation = {{{occupation}}}
| affiliation = {{{affiliation}}}
| fighting_style = {{{fighting_style}}}
| weapon = {{{weapon}}}
| family = {{{family}}}
| spouse = {{{spouse}}}
| significant_other = {{{significant_other}}}
| children = {{{children}}}
| relatives = {{{relatives}}}
| religion = {{{religion}}}
| origin = {{{origin}}}
| nationality = {{{nationality}}}
}}
<syntaxhighlight lang="html" style="overflow:auto">{{Infobox character
| color = <!-- headers background color; the foreground color is automatically computed -->
| name =
| series = <!-- or |franchise=; use without the italic on the outside -->
| image =
| alt =
| caption =
| first_major = <!-- per [[MOS:MAJORWORK]] - major works include TV series, films, books, albums and games -->
| first_minor = <!-- or |first_issue=; Per [[MOS:MINORWORK]] - minor works include TV episodes, chapters, songs and game missions -->
| first_date =
| first = <!-- Use instead of first_major= etc. when custom or complex formatting is needed. -->
| last_major =
| last_minor = <!-- or |last_issue= -->
| last_date =
| last = <!-- Use instead of last_major= etc. when custom or complex formatting is needed. -->
| creator = <!-- only the credited creators; use adapted_by= for adaptations -->
| based_on = <!-- if not an original creation, use {{based on|character|author}} -->
| adapted_by = <!-- for character adaption articles -->
| designer =
| portrayer =
| voice =
| motion_actor =
| full_name =
| nickname = <!-- or |nicknames= -->
| alias = <!-- or |aliases= -->
| species = <!-- or |race=; for non-humans only -->
| gender = <!-- if not obvious -->
| title =
| occupation = <!-- or |position= or |class= -->
| affiliation = <!-- or |alignment= -->
| fighting_style =
| weapon =
| family =
| spouse = <!-- or |spouses= -->
| significant_other = <!-- or |significant_others= -->
| children =
| relatives =
| religion =
| origin = <!-- or |home= -->
| nationality =
}}</syntaxhighlight>
== Parameters ==
All parameters are optional.
{| class="wikitable"
|-
! scope="col" | Parameter
! scope="col" | Notes
|-
! scope="row" | color
| Background color for header bars (default = #DEDEE2). The text color is automatically determined. Must meet AAA compliance standards outlines on [[WP:COLOR]].
|-
! scope="row" | name
| Character name to display in top header (default = PAGENAME).
|-
! scope="row" | series
| Name of the series in which the character appears.
|-
! scope="row" | franchise
| Name of the fictional world or story in which the character appears. Does not italicize title.
|-
! scope="row" | multiple
| Set to yes if the infobox describes more than one character.
|-
! scope="row" | image
| Image of the character. "File:" and wikilinking is not required. i.e. use {{para|image|Example.png}}.
|-
! scope="row" | image_upright
| The image size defaults to frameless (220px). The size should not be set to a value that would result in an image width greater than 270px.
|-
! scope="row" | alt
| Alt text for image
|-
! scope="row" | caption
| A caption explaining the image.
|-
! scope="row" | first_major
| The title of the major work the fictional element first appeared in. Major works include TV series, films, books, albums and games.
|-
! scope="row" | first_minor
| The title of the minor work the fictional element first appeared in. Minor works include TV episodes, chapters, songs and game missions.
|-
! scope="row" | first_issue
| The number of the comic book issue the fictional element first appeared in.
|-
! scope="row" | first_date
| The date of the publication/release of the minor work where the fictional element first appeared in.
|-
! scope="row" | last_major
| The title of the major work the fictional element last appeared in. Major works include TV series, films, books, albums and games.
|-
! scope="row" | last_minor
| The title of the minor work the fictional element last appeared in. Minor works include TV episodes, chapters, songs and game missions.
|-
! scope="row" | last_issue
| The number of the comic book issue the fictional element last appeared in.
|-
! scope="row" | last_date
| The date of the publication/release of the minor work where the fictional element last appeared in.
|-
! scope="row" | first
| First appearance of the character.
|-
! scope="row" | firstgame
| First appearance in a game of the character.
|-
! scope="row" | last
| Last appearance of the character.
|-
! scope="row" | creator
| Name of the individuals who are credited with the creation of the character.
|-
! scope="row" | based_on
| Name of the original character the adaptation is based on. Use this field in conjunction with {{para|adapted_by}}.
|-
! scope="row" | adapted_by
| Name of the individuals who adapted the character into a new medium. Use this field if the character in a medium is based on a character from a different medium, such as a character on television based on a comic book character.
|-
! scope="row" | designer
| Name of the individuals who designed the character.
|-
! scope="row" | portrayer
| Name of the individuals who portrayed the character.
|-
! scope="row" | voice
| Name of the individuals who voiced the character. Should be omitted if the same as "portrayer".
|-
! scope="row" | motion_actor
| Name of the individuals who portrayed the character in motion capture.
|-
! scope="row" | noinfo
| Disable the first "In-universe information" header.
|-
! scope="row" | info-hdr
| Text for display in second header (default = Information).
|-
! scope="row" | full_name
| The character's full name.
|-
! scope="row" | nickname/nicknames
| Any nicknames used by the character.
|-
! scope="row" | alias/aliases
| Any aliases used by the character.
|-
! scope="row" | species/race
| The species or race of the character. Use for non-human characters only.
|-
! scope="row" | gender
| The gender of the character. Use only if not obvious.
|-
! scope="row" | title
| Titles the character was known by.
|-
! scope="row" | occupation/position
| The character's job or role.
|-
! scope="row" | class
| The character class for RPG characters.
|-
! scope="row" | affiliation
| The groups or teams the character belongs to.
|-
! scope="row" | alignment
| The character's Dungeons & Dragons alignment.
|-
! scope="row" | fighting_style
| The primary fighting styles used by the character.
|-
! scope="row" | weapon
| The types of weapons the character uses.
|-
! scope="row" | family
| The character's family members.
|-
! scope="row" | spouse/spouses
| The character's spouses.
|-
! scope="row" | significant_other/significant_others
| The character's significant others.
|-
! scope="row" | children
| The characters's children.
|-
! scope="row" | relatives
| The characters's relatives.
|-
! scope="row" | religion
| The character's religion.
|-
! scope="row" | origin/home
| The character's place of origin.
|-
! scope="row" | nationality
| The character's nationality.
|-
! scope="row" | extra-hdr
| Text for display in third header (default = No third header).
|-
! scope="row" | lbl#
| Label to display in left column where "#" is 1-5, 21-25, or 31-35 for custom fields under the 1st, 2nd, or 3rd headers respectively.
|-
! scope="row" | data#
| Text to display in the right column corresponding to the appropriate "lbl#".
|}
===TemplateData===
<templatedata>
{
"description": "Creates an infobox for a fictional character of any type.",
"params": {
"color": {
"label": "Color",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Background color for header bars (default = #DEDEE2). The text color is automatically computed. Must meet AAA compliance standards outlines on [[WP:COLOR]].",
"aliases": [
"colour"
]
},
"name": {
"label": "Name",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Character name to display in top header (default = PAGENAME)."
},
"series": {
"label": "Series",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Name of the series in which the character appears."
},
"franchise": {
"label": "Franchise",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Name of the fictional world or story in which the character appears. Does not italicize title."
},
"multiple": {
"label": "Multiple",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Set to yes if the infobox describes more than one character."
},
"image": {
"label": "Image",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Image of the character. \"File:\" and wikilinking is not required. i.e. use {{para|image|Example.png}}."
},
"image_upright": {
"label": "Image upright",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The image size defaults to frameless (220px). The size should not be set to a value that would result in an image width greater than 270px."
},
"alt": {
"label": "Alt",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Alt text for image per [[WP:MOSALT]]."
},
"caption": {
"label": "Caption",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "A caption explaining the image."
},
"first_major": {
"label": "First appearance major",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The title of the major work the fictional element first appeared in. Major works include TV series, films, books, albums and games."
},
"first_minor": {
"label": "First appearance minor",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The title of the minor work the fictional element first appeared in. Minor works include TV episodes, chapters, songs and game missions."
},
"first_issue": {
"label": "First appearance issue",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The number of the comic book issue the fictional element first appeared in."
},
"first_date": {
"label": "First appearance date",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The date of the publication/release of the minor work where the fictional element first appeared in."
},
"last_major": {
"label": "Last appearance major",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The title of the major work the fictional element last appeared in. Major works include TV series, films, books, albums and games."
},
"last_minor": {
"label": "Last appearance minor",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The title of the minor work the fictional element last appeared in. Minor works include TV episodes, chapters, songs and game missions."
},
"last_issue": {
"label": "Last appearance issue",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The number of the comic book issue the fictional element last appeared in."
},
"last_date": {
"label": "Last appearance date",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The date of the publication/release of the minor work where the fictional element last appeared in."
},
"first": {
"label": "First appearance",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "First appearance of the character."
},
"firstgame": {
"label": "First game",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "First appearance in a game of the character."
},
"last": {
"label": "Last appearance",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Last appearance of the character."
},
"creator": {
"label": "Creator",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Name of the individuals who are credited with the creation of the character."
},
"based_on": {
"label": "Based on",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Name of the original character the adaptation is based on. Use {{based on}} to add the title of original character and the names of the original creators. Use this field in conjunction with {{para|adapted_by}}."
},
"adapted_by": {
"label": "Adapted by",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Name of the individuals who adapted the character into a new medium. Use this field if the character in a medium is based on a character from a different medium, such as a character on television based on a comic book character."
},
"designer": {
"label": "Designer",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Name of the individuals who designed the character."
},
"portrayer": {
"label": "Portrayer",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Name of the individuals who portrayed the character."
},
"voice": {
"label": "Voice actor",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Name of the individuals who voiced the character (if different from portrayer or there is no portrayer)"
},
"motion_actor": {
"label": "Motion actor",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Name of the individuals who portrayed the character in motion capture."
},
"lbl1": {
"label": "Label 1",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Label to display in left column for custom fields under the 1st header."
},
"data1": {
"label": "Data 1",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Text to display in the right column corresponding to lbl1."
},
"lbl2": {
"label": "Label 2",
"inherits": "lbl1"
},
"data2": {
"label": "Data 2",
"description": "Text to display in the right column corresponding to lbl2.",
"inherits": "data1"
},
"lbl3": {
"label": "Label 3",
"inherits": "lbl1"
},
"data3": {
"label": "Data 3",
"description": "Text to display in the right column corresponding to lbl3.",
"inherits": "data1"
},
"lbl4": {
"label": "Label 4",
"inherits": "lbl1"
},
"data4": {
"label": "Data 4",
"description": "Text to display in the right column corresponding to lbl4.",
"inherits": "data1"
},
"lbl5": {
"label": "Label 5",
"inherits": "lbl1"
},
"data5": {
"label": "Data 5",
"description": "Text to display in the right column corresponding to lbl5.",
"inherits": "data1"
},
"noinfo": {
"label": "Disable second header",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Disable the first \"In-universe information\" header."
},
"info-hdr": {
"label": "Second header text",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Text for display in second header (default = Information)."
},
"full_name": {
"label": "Full name",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The character's full name."
},
"nickname": {
"label": "Nickname",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "A nickname used by the character. If there is more than one nickname, use {{para|nicknames}}."
},
"nicknames": {
"label": "Nicknames",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Any nicknames used by the character. If there is only one nickname, use {{para|nickname}}."
},
"alias": {
"label": "Alias",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "An alias used by the character. If there is more than one alias, use {{para|aliases}}."
},
"aliases": {
"label": "Alias",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Any aliases used by the character. If there is only one alias, use {{para|alias}}."
},
"species": {
"label": "Species",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The species of the character. Use for non-human characters only."
},
"race": {
"label": "Race",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The race of the character. Use for non-human characters only."
},
"gender": {
"label": "Gender",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The gender of the character. Use only if not obvious."
},
"title": {
"label": "Title",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Titles the character was known by."
},
"occupation": {
"label": "Occupation",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The character's job or role."
},
"position": {
"label": "Position",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The character's job or role."
},
"class": {
"label": "Class",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The character class for RPG characters."
},
"affiliation": {
"label": "Affiliation",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The groups or teams the character belongs to."
},
"alignment": {
"label": "Alignment",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The character's Dungeons & Dragons alignment."
},
"fighting_style": {
"label": "Fighting style",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The primary fighting styles used by the character."
},
"weapon": {
"label": "Weapon",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The types of weapons the character uses."
},
"family": {
"label": "Family",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The character's family members."
},
"spouse": {
"label": "Spouse",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The character's spouses."
},
"spouses": {
"label": "Spouses",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The character's spouses."
},
"significant_other": {
"label": "Significant other",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The character's significant others. If there is more than one significant_other, use {{para|significant_others}}."
},
"significant_others": {
"label": "Significant others",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The character's significant others. If there is only one significant_other, use {{para|significant_other}}."
},
"children": {
"label": "Children",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The characters's children"
},
"relatives": {
"label": "Relatives",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The characters's relatives"
},
"religion": {
"label": "Religion",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The character's religion"
},
"origin": {
"label": "Origin",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The character's place of origin."
},
"home": {
"label": "Home",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The character's place of origin."
},
"nationality": {
"label": "Nationality",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The character's nationality."
},
"lbl21": {
"label": "Label 21",
"description": "Label to display in left column for custom fields under the 2nd header.",
"inherits": "lbl1"
},
"data21": {
"label": "Data 21",
"description": "Text to display in the right column corresponding to lbl21.",
"inherits": "data1"
},
"lbl22": {
"label": "Label 22",
"inherits": "lbl21"
},
"data22": {
"label": "Data 22",
"description": "Text to display in the right column corresponding to lbl22.",
"inherits": "data1"
},
"lbl23": {
"label": "Label 23",
"inherits": "lbl21"
},
"data23": {
"label": "Data 23",
"description": "Text to display in the right column corresponding to lbl23.",
"inherits": "data1"
},
"lbl24": {
"label": "Label 24",
"inherits": "lbl21"
},
"data24": {
"label": "Data 24",
"description": "Text to display in the right column corresponding to lbl24.",
"inherits": "data1"
},
"lbl25": {
"label": "Label 25",
"inherits": "lbl21"
},
"data25": {
"label": "Data 25",
"description": "Text to display in the right column corresponding to lbl25.",
"inherits": "data1"
},
"extra-hdr": {
"label": "Third header text",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Text for display in third header (default = No third header)."
},
"lbl31": {
"label": "Label 31",
"description": "Label to display in left column for custom fields under the 3rd header.",
"inherits": "lbl22"
},
"data31": {
"label": "Data 31",
"description": "Text to display in the right column corresponding to lbl31.",
"inherits": "data1"
},
"lbl32": {
"label": "Label 32",
"inherits": "lbl31"
},
"data32": {
"label": "Data 32",
"description": "Text to display in the right column corresponding to lbl32.",
"inherits": "data1"
},
"lbl33": {
"label": "Label 33",
"inherits": "lbl31"
},
"data33": {
"label": "Data 33",
"description": "Text to display in the right column corresponding to lbl33.",
"inherits": "data1"
},
"lbl34": {
"label": "Label 34",
"inherits": "lbl31"
},
"data34": {
"label": "Data 34",
"description": "Text to display in the right column corresponding to lbl34.",
"inherits": "data1"
},
"lbl35": {
"label": "Label 35",
"inherits": "lbl31"
},
"data35": {
"label": "Data 35",
"description": "Text to display in the right column corresponding to lbl35.",
"inherits": "data1"
}
},
"format": "block"
}
</templatedata>
=== All parameters (not for general use) ===
<pre>{{Infobox character
| color = <!-- headers background colour; the foreground colour is automatically computed -->
| name =
| series = <!-- or |franchise=; use without the italic on the outside -->
| multiple =
| image =
| image_upright =
| alt =
| caption =
| first_major = <!-- per [[MOS:MAJORWORK]] - major works include TV series, films, books, albums and games -->
| first_minor = <!-- or |first_issue=; Per [[MOS:MINORWORK]] - minor works include TV episodes, chapters, songs and game missions -->
| first_date =
| last_major =
| last_minor = <!-- or |last_issue= -->
| last_date =
| first =
| firstgame =
| last =
| creator = <!-- only the credited creators; use adapted_by= for adaptations -->
| based_on = <!-- if not an original creation, use {{based on|character|author}} -->
| adapted_by = <!-- for character adaption articles -->
| designer =
| portrayer =
| voice =
| motion_actor =
| lbl1 =
| data1 =
| lbl2 =
| data2 =
| lbl3 =
| data3 =
| lbl4 =
| data4 =
| lbl5 =
| data5 =
| noinfo =
| info-hdr =
| full_name =
| nickname = <!-- or |nicknames= -->
| alias = <!-- or |aliases= -->
| species = <!-- or |race=; for non-humans only -->
| gender = <!-- if not obvious -->
| title =
| occupation = <!-- or |position= or |class= -->
| affiliation = <!-- or |alignment= -->
| fighting_style =
| weapon =
| family =
| spouse = <!-- or |spouses= -->
| significant_other = <!-- or |significant_others= -->
| children =
| relatives =
| religion =
| origin = <!-- or |home= -->
| nationality =
| lbl21 =
| data21 =
| lbl22 =
| data22 =
| lbl23 =
| data23 =
| lbl24 =
| data24 =
| lbl25 =
| data25 =
| extra-hdr =
| lbl31 =
| data31 =
| lbl32 =
| data32 =
| lbl33 =
| data33 =
| lbl34 =
| data34 =
| lbl35 =
| data35 =
}}</pre>
== Example ==
{{Infobox character
| name = John Doe
| series = [[Criminal Minds]]
| image =
| caption =
| first_major = Criminal Minds
| first_minor = Pilot
| first_date = 2005
| last_major = Criminal Minds
| last_minor = Last One
| last_date = 2018
| creator = [[Agnes Nixon]]
| portrayer = [[Soupy Sales]]
| nickname = Doeboy
| alias = Jack Dew
| gender = Male
| title = Detective
| occupation = Law enforcement
| family = Doe
| spouse = Jane Doe
| significant_other =
| children = John Doe, Jr.
| relatives = Phil Doe (father), Nancy Doe (mother)
| religion = [[Christianity|Christian]]
| nationality = American
}}
<syntaxhighlight lang="moin">
{{Infobox character
| name = John Doe
| series = [[Criminal Minds]]
| image =
| caption =
| first_major = Criminal Minds
| first_minor = Pilot
| first_date = 2005
| last_major = Criminal Minds
| last_minor = Last One
| last_date = 2018
| creator = [[Agnes Nixon]]
| portrayer = [[Soupy Sales]]
| nickname = Doeboy
| alias = Jack Dew
| gender = Male
| title = Detective
| occupation = Law enforcement
| family = Doe
| spouse = Jane Doe
| significant_other =
| children = John Doe, Jr.
| relatives = Phil Doe (father), Nancy Doe (mother)
| religion = [[Christianity|Christian]]
| nationality = American
}}
</syntaxhighlight>
<includeonly>
[[Category:Templates]]
</includeonly>
c3b5673c7b9ea096939919c0cf7da9d3440d78e7
2074
2073
2023-09-14T20:58:19Z
Ilovethehitgameomori
2
wikitext
text/x-wiki
{{Documentation subpage}}
'''Infobox character''' is used to create an infobox for a fictional character of any type.
== Usage ==
The blank form immediately below shows the most commonly used fields, and complete instructions are listed further down the page.
{{Infobox character
| name = {{{name}}}
| series = {{{series}}}
| image = {{{image}}}
| alt = {{{alt}}}
| caption = {{{caption}}}
| first_major = {{{first_major}}}
| first_minor = {{{first_minor}}}
| first_date = {{{first_date}}}
| last_major = {{{last_major}}}
| last_minor = {{{last_minor}}}
| last_date = {{{last_date}}}
| creator = {{{creator}}}
| full_name = {{{full_name}}}
| alias = {{{alias}}}
| species = {{{species}}}
| gender = {{{gender}}}
| title = {{{title}}}
| occupation = {{{occupation}}}
| affiliation = {{{affiliation}}}
| fighting_style = {{{fighting_style}}}
| weapon = {{{weapon}}}
| family = {{{family}}}
| spouse = {{{spouse}}}
| significant_other = {{{significant_other}}}
| children = {{{children}}}
| relatives = {{{relatives}}}
| religion = {{{religion}}}
| nationality = {{{nationality}}}
}}
<syntaxhighlight lang="html" style="overflow:auto">{{Infobox character
| color = <!-- headers background color; the foreground color is automatically computed -->
| name =
| series = <!-- or |franchise=; use without the italic on the outside -->
| image =
| alt =
| caption =
| first_major = <!-- per [[MOS:MAJORWORK]] - major works include TV series, films, books, albums and games -->
| first_minor = <!-- or |first_issue=; Per [[MOS:MINORWORK]] - minor works include TV episodes, chapters, songs and game missions -->
| first_date =
| first = <!-- Use instead of first_major= etc. when custom or complex formatting is needed. -->
| last_major =
| last_minor = <!-- or |last_issue= -->
| last_date =
| last = <!-- Use instead of last_major= etc. when custom or complex formatting is needed. -->
| creator = <!-- only the credited creators; use adapted_by= for adaptations -->
| based_on = <!-- if not an original creation, use {{based on|character|author}} -->
| adapted_by = <!-- for character adaption articles -->
| designer =
| portrayer =
| voice =
| motion_actor =
| full_name =
| nickname = <!-- or |nicknames= -->
| alias = <!-- or |aliases= -->
| species = <!-- or |race=; for non-humans only -->
| gender = <!-- if not obvious -->
| title =
| occupation = <!-- or |position= or |class= -->
| affiliation = <!-- or |alignment= -->
| fighting_style =
| weapon =
| family =
| spouse = <!-- or |spouses= -->
| significant_other = <!-- or |significant_others= -->
| children =
| relatives =
| religion =
| origin = <!-- or |home= -->
| nationality =
}}</syntaxhighlight>
== Parameters ==
All parameters are optional.
{| class="wikitable"
|-
! scope="col" | Parameter
! scope="col" | Notes
|-
! scope="row" | color
| Background color for header bars (default = #DEDEE2). The text color is automatically determined. Must meet AAA compliance standards outlines on [[WP:COLOR]].
|-
! scope="row" | name
| Character name to display in top header (default = PAGENAME).
|-
! scope="row" | series
| Name of the series in which the character appears.
|-
! scope="row" | franchise
| Name of the fictional world or story in which the character appears. Does not italicize title.
|-
! scope="row" | multiple
| Set to yes if the infobox describes more than one character.
|-
! scope="row" | image
| Image of the character. "File:" and wikilinking is not required. i.e. use {{para|image|Example.png}}.
|-
! scope="row" | image_upright
| The image size defaults to frameless (220px). The size should not be set to a value that would result in an image width greater than 270px.
|-
! scope="row" | alt
| Alt text for image
|-
! scope="row" | caption
| A caption explaining the image.
|-
! scope="row" | first_major
| The title of the major work the fictional element first appeared in. Major works include TV series, films, books, albums and games.
|-
! scope="row" | first_minor
| The title of the minor work the fictional element first appeared in. Minor works include TV episodes, chapters, songs and game missions.
|-
! scope="row" | first_issue
| The number of the comic book issue the fictional element first appeared in.
|-
! scope="row" | first_date
| The date of the publication/release of the minor work where the fictional element first appeared in.
|-
! scope="row" | last_major
| The title of the major work the fictional element last appeared in. Major works include TV series, films, books, albums and games.
|-
! scope="row" | last_minor
| The title of the minor work the fictional element last appeared in. Minor works include TV episodes, chapters, songs and game missions.
|-
! scope="row" | last_issue
| The number of the comic book issue the fictional element last appeared in.
|-
! scope="row" | last_date
| The date of the publication/release of the minor work where the fictional element last appeared in.
|-
! scope="row" | first
| First appearance of the character.
|-
! scope="row" | firstgame
| First appearance in a game of the character.
|-
! scope="row" | last
| Last appearance of the character.
|-
! scope="row" | creator
| Name of the individuals who are credited with the creation of the character.
|-
! scope="row" | based_on
| Name of the original character the adaptation is based on. Use this field in conjunction with {{para|adapted_by}}.
|-
! scope="row" | adapted_by
| Name of the individuals who adapted the character into a new medium. Use this field if the character in a medium is based on a character from a different medium, such as a character on television based on a comic book character.
|-
! scope="row" | designer
| Name of the individuals who designed the character.
|-
! scope="row" | portrayer
| Name of the individuals who portrayed the character.
|-
! scope="row" | voice
| Name of the individuals who voiced the character. Should be omitted if the same as "portrayer".
|-
! scope="row" | motion_actor
| Name of the individuals who portrayed the character in motion capture.
|-
! scope="row" | noinfo
| Disable the first "In-universe information" header.
|-
! scope="row" | info-hdr
| Text for display in second header (default = Information).
|-
! scope="row" | full_name
| The character's full name.
|-
! scope="row" | nickname/nicknames
| Any nicknames used by the character.
|-
! scope="row" | alias/aliases
| Any aliases used by the character.
|-
! scope="row" | species/race
| The species or race of the character. Use for non-human characters only.
|-
! scope="row" | gender
| The gender of the character. Use only if not obvious.
|-
! scope="row" | title
| Titles the character was known by.
|-
! scope="row" | occupation/position
| The character's job or role.
|-
! scope="row" | class
| The character class for RPG characters.
|-
! scope="row" | affiliation
| The groups or teams the character belongs to.
|-
! scope="row" | alignment
| The character's Dungeons & Dragons alignment.
|-
! scope="row" | fighting_style
| The primary fighting styles used by the character.
|-
! scope="row" | weapon
| The types of weapons the character uses.
|-
! scope="row" | family
| The character's family members.
|-
! scope="row" | spouse/spouses
| The character's spouses.
|-
! scope="row" | significant_other/significant_others
| The character's significant others.
|-
! scope="row" | children
| The characters's children.
|-
! scope="row" | relatives
| The characters's relatives.
|-
! scope="row" | religion
| The character's religion.
|-
! scope="row" | origin/home
| The character's place of origin.
|-
! scope="row" | nationality
| The character's nationality.
|-
! scope="row" | extra-hdr
| Text for display in third header (default = No third header).
|-
! scope="row" | lbl#
| Label to display in left column where "#" is 1-5, 21-25, or 31-35 for custom fields under the 1st, 2nd, or 3rd headers respectively.
|-
! scope="row" | data#
| Text to display in the right column corresponding to the appropriate "lbl#".
|}
===TemplateData===
<templatedata>
{
"description": "Creates an infobox for a fictional character of any type.",
"params": {
"color": {
"label": "Color",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Background color for header bars (default = #DEDEE2). The text color is automatically computed. Must meet AAA compliance standards outlines on [[WP:COLOR]].",
"aliases": [
"colour"
]
},
"name": {
"label": "Name",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Character name to display in top header (default = PAGENAME)."
},
"series": {
"label": "Series",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Name of the series in which the character appears."
},
"franchise": {
"label": "Franchise",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Name of the fictional world or story in which the character appears. Does not italicize title."
},
"multiple": {
"label": "Multiple",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Set to yes if the infobox describes more than one character."
},
"image": {
"label": "Image",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Image of the character. \"File:\" and wikilinking is not required. i.e. use {{para|image|Example.png}}."
},
"image_upright": {
"label": "Image upright",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The image size defaults to frameless (220px). The size should not be set to a value that would result in an image width greater than 270px."
},
"alt": {
"label": "Alt",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Alt text for image per [[WP:MOSALT]]."
},
"caption": {
"label": "Caption",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "A caption explaining the image."
},
"first_major": {
"label": "First appearance major",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The title of the major work the fictional element first appeared in. Major works include TV series, films, books, albums and games."
},
"first_minor": {
"label": "First appearance minor",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The title of the minor work the fictional element first appeared in. Minor works include TV episodes, chapters, songs and game missions."
},
"first_issue": {
"label": "First appearance issue",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The number of the comic book issue the fictional element first appeared in."
},
"first_date": {
"label": "First appearance date",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The date of the publication/release of the minor work where the fictional element first appeared in."
},
"last_major": {
"label": "Last appearance major",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The title of the major work the fictional element last appeared in. Major works include TV series, films, books, albums and games."
},
"last_minor": {
"label": "Last appearance minor",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The title of the minor work the fictional element last appeared in. Minor works include TV episodes, chapters, songs and game missions."
},
"last_issue": {
"label": "Last appearance issue",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The number of the comic book issue the fictional element last appeared in."
},
"last_date": {
"label": "Last appearance date",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The date of the publication/release of the minor work where the fictional element last appeared in."
},
"first": {
"label": "First appearance",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "First appearance of the character."
},
"firstgame": {
"label": "First game",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "First appearance in a game of the character."
},
"last": {
"label": "Last appearance",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Last appearance of the character."
},
"creator": {
"label": "Creator",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Name of the individuals who are credited with the creation of the character."
},
"based_on": {
"label": "Based on",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Name of the original character the adaptation is based on. Use {{based on}} to add the title of original character and the names of the original creators. Use this field in conjunction with {{para|adapted_by}}."
},
"adapted_by": {
"label": "Adapted by",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Name of the individuals who adapted the character into a new medium. Use this field if the character in a medium is based on a character from a different medium, such as a character on television based on a comic book character."
},
"designer": {
"label": "Designer",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Name of the individuals who designed the character."
},
"portrayer": {
"label": "Portrayer",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Name of the individuals who portrayed the character."
},
"voice": {
"label": "Voice actor",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Name of the individuals who voiced the character (if different from portrayer or there is no portrayer)"
},
"motion_actor": {
"label": "Motion actor",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Name of the individuals who portrayed the character in motion capture."
},
"lbl1": {
"label": "Label 1",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Label to display in left column for custom fields under the 1st header."
},
"data1": {
"label": "Data 1",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Text to display in the right column corresponding to lbl1."
},
"lbl2": {
"label": "Label 2",
"inherits": "lbl1"
},
"data2": {
"label": "Data 2",
"description": "Text to display in the right column corresponding to lbl2.",
"inherits": "data1"
},
"lbl3": {
"label": "Label 3",
"inherits": "lbl1"
},
"data3": {
"label": "Data 3",
"description": "Text to display in the right column corresponding to lbl3.",
"inherits": "data1"
},
"lbl4": {
"label": "Label 4",
"inherits": "lbl1"
},
"data4": {
"label": "Data 4",
"description": "Text to display in the right column corresponding to lbl4.",
"inherits": "data1"
},
"lbl5": {
"label": "Label 5",
"inherits": "lbl1"
},
"data5": {
"label": "Data 5",
"description": "Text to display in the right column corresponding to lbl5.",
"inherits": "data1"
},
"noinfo": {
"label": "Disable second header",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Disable the first \"In-universe information\" header."
},
"info-hdr": {
"label": "Second header text",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Text for display in second header (default = Information)."
},
"full_name": {
"label": "Full name",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The character's full name."
},
"nickname": {
"label": "Nickname",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "A nickname used by the character. If there is more than one nickname, use {{para|nicknames}}."
},
"nicknames": {
"label": "Nicknames",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Any nicknames used by the character. If there is only one nickname, use {{para|nickname}}."
},
"alias": {
"label": "Alias",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "An alias used by the character. If there is more than one alias, use {{para|aliases}}."
},
"aliases": {
"label": "Alias",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Any aliases used by the character. If there is only one alias, use {{para|alias}}."
},
"species": {
"label": "Species",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The species of the character. Use for non-human characters only."
},
"race": {
"label": "Race",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The race of the character. Use for non-human characters only."
},
"gender": {
"label": "Gender",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The gender of the character. Use only if not obvious."
},
"title": {
"label": "Title",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Titles the character was known by."
},
"occupation": {
"label": "Occupation",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The character's job or role."
},
"position": {
"label": "Position",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The character's job or role."
},
"class": {
"label": "Class",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The character class for RPG characters."
},
"affiliation": {
"label": "Affiliation",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The groups or teams the character belongs to."
},
"alignment": {
"label": "Alignment",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The character's Dungeons & Dragons alignment."
},
"fighting_style": {
"label": "Fighting style",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The primary fighting styles used by the character."
},
"weapon": {
"label": "Weapon",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The types of weapons the character uses."
},
"family": {
"label": "Family",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The character's family members."
},
"spouse": {
"label": "Spouse",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The character's spouses."
},
"spouses": {
"label": "Spouses",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The character's spouses."
},
"significant_other": {
"label": "Significant other",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The character's significant others. If there is more than one significant_other, use {{para|significant_others}}."
},
"significant_others": {
"label": "Significant others",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The character's significant others. If there is only one significant_other, use {{para|significant_other}}."
},
"children": {
"label": "Children",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The characters's children"
},
"relatives": {
"label": "Relatives",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The characters's relatives"
},
"religion": {
"label": "Religion",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The character's religion"
},
"origin": {
"label": "Origin",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The character's place of origin."
},
"home": {
"label": "Home",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The character's place of origin."
},
"nationality": {
"label": "Nationality",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The character's nationality."
},
"lbl21": {
"label": "Label 21",
"description": "Label to display in left column for custom fields under the 2nd header.",
"inherits": "lbl1"
},
"data21": {
"label": "Data 21",
"description": "Text to display in the right column corresponding to lbl21.",
"inherits": "data1"
},
"lbl22": {
"label": "Label 22",
"inherits": "lbl21"
},
"data22": {
"label": "Data 22",
"description": "Text to display in the right column corresponding to lbl22.",
"inherits": "data1"
},
"lbl23": {
"label": "Label 23",
"inherits": "lbl21"
},
"data23": {
"label": "Data 23",
"description": "Text to display in the right column corresponding to lbl23.",
"inherits": "data1"
},
"lbl24": {
"label": "Label 24",
"inherits": "lbl21"
},
"data24": {
"label": "Data 24",
"description": "Text to display in the right column corresponding to lbl24.",
"inherits": "data1"
},
"lbl25": {
"label": "Label 25",
"inherits": "lbl21"
},
"data25": {
"label": "Data 25",
"description": "Text to display in the right column corresponding to lbl25.",
"inherits": "data1"
},
"extra-hdr": {
"label": "Third header text",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Text for display in third header (default = No third header)."
},
"lbl31": {
"label": "Label 31",
"description": "Label to display in left column for custom fields under the 3rd header.",
"inherits": "lbl22"
},
"data31": {
"label": "Data 31",
"description": "Text to display in the right column corresponding to lbl31.",
"inherits": "data1"
},
"lbl32": {
"label": "Label 32",
"inherits": "lbl31"
},
"data32": {
"label": "Data 32",
"description": "Text to display in the right column corresponding to lbl32.",
"inherits": "data1"
},
"lbl33": {
"label": "Label 33",
"inherits": "lbl31"
},
"data33": {
"label": "Data 33",
"description": "Text to display in the right column corresponding to lbl33.",
"inherits": "data1"
},
"lbl34": {
"label": "Label 34",
"inherits": "lbl31"
},
"data34": {
"label": "Data 34",
"description": "Text to display in the right column corresponding to lbl34.",
"inherits": "data1"
},
"lbl35": {
"label": "Label 35",
"inherits": "lbl31"
},
"data35": {
"label": "Data 35",
"description": "Text to display in the right column corresponding to lbl35.",
"inherits": "data1"
}
},
"format": "block"
}
</templatedata>
=== All parameters (not for general use) ===
<pre>{{Infobox character
| color = <!-- headers background colour; the foreground colour is automatically computed -->
| name =
| series = <!-- or |franchise=; use without the italic on the outside -->
| multiple =
| image =
| image_upright =
| alt =
| caption =
| first_major = <!-- per [[MOS:MAJORWORK]] - major works include TV series, films, books, albums and games -->
| first_minor = <!-- or |first_issue=; Per [[MOS:MINORWORK]] - minor works include TV episodes, chapters, songs and game missions -->
| first_date =
| last_major =
| last_minor = <!-- or |last_issue= -->
| last_date =
| first =
| firstgame =
| last =
| creator = <!-- only the credited creators; use adapted_by= for adaptations -->
| based_on = <!-- if not an original creation, use {{based on|character|author}} -->
| adapted_by = <!-- for character adaption articles -->
| designer =
| portrayer =
| voice =
| motion_actor =
| lbl1 =
| data1 =
| lbl2 =
| data2 =
| lbl3 =
| data3 =
| lbl4 =
| data4 =
| lbl5 =
| data5 =
| noinfo =
| info-hdr =
| full_name =
| nickname = <!-- or |nicknames= -->
| alias = <!-- or |aliases= -->
| species = <!-- or |race=; for non-humans only -->
| gender = <!-- if not obvious -->
| title =
| occupation = <!-- or |position= or |class= -->
| affiliation = <!-- or |alignment= -->
| fighting_style =
| weapon =
| family =
| spouse = <!-- or |spouses= -->
| significant_other = <!-- or |significant_others= -->
| children =
| relatives =
| religion =
| origin = <!-- or |home= -->
| nationality =
| lbl21 =
| data21 =
| lbl22 =
| data22 =
| lbl23 =
| data23 =
| lbl24 =
| data24 =
| lbl25 =
| data25 =
| extra-hdr =
| lbl31 =
| data31 =
| lbl32 =
| data32 =
| lbl33 =
| data33 =
| lbl34 =
| data34 =
| lbl35 =
| data35 =
}}</pre>
== Example ==
{{Infobox character
| name = John Doe
| series = [[Criminal Minds]]
| image =
| caption =
| first_major = Criminal Minds
| first_minor = Pilot
| first_date = 2005
| last_major = Criminal Minds
| last_minor = Last One
| last_date = 2018
| creator = [[Agnes Nixon]]
| portrayer = [[Soupy Sales]]
| nickname = Doeboy
| alias = Jack Dew
| gender = Male
| title = Detective
| occupation = Law enforcement
| family = Doe
| spouse = Jane Doe
| significant_other =
| children = John Doe, Jr.
| relatives = Phil Doe (father), Nancy Doe (mother)
| religion = [[Christianity|Christian]]
| nationality = American
}}
<syntaxhighlight lang="moin">
{{Infobox character
| name = John Doe
| series = [[Criminal Minds]]
| image =
| caption =
| first_major = Criminal Minds
| first_minor = Pilot
| first_date = 2005
| last_major = Criminal Minds
| last_minor = Last One
| last_date = 2018
| creator = [[Agnes Nixon]]
| portrayer = [[Soupy Sales]]
| nickname = Doeboy
| alias = Jack Dew
| gender = Male
| title = Detective
| occupation = Law enforcement
| family = Doe
| spouse = Jane Doe
| significant_other =
| children = John Doe, Jr.
| relatives = Phil Doe (father), Nancy Doe (mother)
| religion = [[Christianity|Christian]]
| nationality = American
}}
</syntaxhighlight>
<includeonly>
[[Category:Templates]]
</includeonly>
33f1700feb508ed33d5bab654d3e90cd7ed21aec
2075
2074
2023-09-14T20:58:37Z
Ilovethehitgameomori
2
wikitext
text/x-wiki
{{Documentation subpage}}
'''Infobox character''' is used to create an infobox for a fictional character of any type.
== Usage ==
The blank form immediately below shows the most commonly used fields, and complete instructions are listed further down the page.
{{Infobox character
| name = {{{name}}}
| image = {{{image}}}
| alt = {{{alt}}}
| caption = {{{caption}}}
| first_major = {{{first_major}}}
| first_minor = {{{first_minor}}}
| first_date = {{{first_date}}}
| last_major = {{{last_major}}}
| last_minor = {{{last_minor}}}
| last_date = {{{last_date}}}
| creator = {{{creator}}}
| full_name = {{{full_name}}}
| alias = {{{alias}}}
| species = {{{species}}}
| gender = {{{gender}}}
| title = {{{title}}}
| occupation = {{{occupation}}}
| affiliation = {{{affiliation}}}
| fighting_style = {{{fighting_style}}}
| weapon = {{{weapon}}}
| family = {{{family}}}
| spouse = {{{spouse}}}
| significant_other = {{{significant_other}}}
| children = {{{children}}}
| relatives = {{{relatives}}}
| religion = {{{religion}}}
| nationality = {{{nationality}}}
}}
<syntaxhighlight lang="html" style="overflow:auto">{{Infobox character
| color = <!-- headers background color; the foreground color is automatically computed -->
| name =
| series = <!-- or |franchise=; use without the italic on the outside -->
| image =
| alt =
| caption =
| first_major = <!-- per [[MOS:MAJORWORK]] - major works include TV series, films, books, albums and games -->
| first_minor = <!-- or |first_issue=; Per [[MOS:MINORWORK]] - minor works include TV episodes, chapters, songs and game missions -->
| first_date =
| first = <!-- Use instead of first_major= etc. when custom or complex formatting is needed. -->
| last_major =
| last_minor = <!-- or |last_issue= -->
| last_date =
| last = <!-- Use instead of last_major= etc. when custom or complex formatting is needed. -->
| creator = <!-- only the credited creators; use adapted_by= for adaptations -->
| based_on = <!-- if not an original creation, use {{based on|character|author}} -->
| adapted_by = <!-- for character adaption articles -->
| designer =
| portrayer =
| voice =
| motion_actor =
| full_name =
| nickname = <!-- or |nicknames= -->
| alias = <!-- or |aliases= -->
| species = <!-- or |race=; for non-humans only -->
| gender = <!-- if not obvious -->
| title =
| occupation = <!-- or |position= or |class= -->
| affiliation = <!-- or |alignment= -->
| fighting_style =
| weapon =
| family =
| spouse = <!-- or |spouses= -->
| significant_other = <!-- or |significant_others= -->
| children =
| relatives =
| religion =
| origin = <!-- or |home= -->
| nationality =
}}</syntaxhighlight>
== Parameters ==
All parameters are optional.
{| class="wikitable"
|-
! scope="col" | Parameter
! scope="col" | Notes
|-
! scope="row" | color
| Background color for header bars (default = #DEDEE2). The text color is automatically determined. Must meet AAA compliance standards outlines on [[WP:COLOR]].
|-
! scope="row" | name
| Character name to display in top header (default = PAGENAME).
|-
! scope="row" | series
| Name of the series in which the character appears.
|-
! scope="row" | franchise
| Name of the fictional world or story in which the character appears. Does not italicize title.
|-
! scope="row" | multiple
| Set to yes if the infobox describes more than one character.
|-
! scope="row" | image
| Image of the character. "File:" and wikilinking is not required. i.e. use {{para|image|Example.png}}.
|-
! scope="row" | image_upright
| The image size defaults to frameless (220px). The size should not be set to a value that would result in an image width greater than 270px.
|-
! scope="row" | alt
| Alt text for image
|-
! scope="row" | caption
| A caption explaining the image.
|-
! scope="row" | first_major
| The title of the major work the fictional element first appeared in. Major works include TV series, films, books, albums and games.
|-
! scope="row" | first_minor
| The title of the minor work the fictional element first appeared in. Minor works include TV episodes, chapters, songs and game missions.
|-
! scope="row" | first_issue
| The number of the comic book issue the fictional element first appeared in.
|-
! scope="row" | first_date
| The date of the publication/release of the minor work where the fictional element first appeared in.
|-
! scope="row" | last_major
| The title of the major work the fictional element last appeared in. Major works include TV series, films, books, albums and games.
|-
! scope="row" | last_minor
| The title of the minor work the fictional element last appeared in. Minor works include TV episodes, chapters, songs and game missions.
|-
! scope="row" | last_issue
| The number of the comic book issue the fictional element last appeared in.
|-
! scope="row" | last_date
| The date of the publication/release of the minor work where the fictional element last appeared in.
|-
! scope="row" | first
| First appearance of the character.
|-
! scope="row" | firstgame
| First appearance in a game of the character.
|-
! scope="row" | last
| Last appearance of the character.
|-
! scope="row" | creator
| Name of the individuals who are credited with the creation of the character.
|-
! scope="row" | based_on
| Name of the original character the adaptation is based on. Use this field in conjunction with {{para|adapted_by}}.
|-
! scope="row" | adapted_by
| Name of the individuals who adapted the character into a new medium. Use this field if the character in a medium is based on a character from a different medium, such as a character on television based on a comic book character.
|-
! scope="row" | designer
| Name of the individuals who designed the character.
|-
! scope="row" | portrayer
| Name of the individuals who portrayed the character.
|-
! scope="row" | voice
| Name of the individuals who voiced the character. Should be omitted if the same as "portrayer".
|-
! scope="row" | motion_actor
| Name of the individuals who portrayed the character in motion capture.
|-
! scope="row" | noinfo
| Disable the first "In-universe information" header.
|-
! scope="row" | info-hdr
| Text for display in second header (default = Information).
|-
! scope="row" | full_name
| The character's full name.
|-
! scope="row" | nickname/nicknames
| Any nicknames used by the character.
|-
! scope="row" | alias/aliases
| Any aliases used by the character.
|-
! scope="row" | species/race
| The species or race of the character. Use for non-human characters only.
|-
! scope="row" | gender
| The gender of the character. Use only if not obvious.
|-
! scope="row" | title
| Titles the character was known by.
|-
! scope="row" | occupation/position
| The character's job or role.
|-
! scope="row" | class
| The character class for RPG characters.
|-
! scope="row" | affiliation
| The groups or teams the character belongs to.
|-
! scope="row" | alignment
| The character's Dungeons & Dragons alignment.
|-
! scope="row" | fighting_style
| The primary fighting styles used by the character.
|-
! scope="row" | weapon
| The types of weapons the character uses.
|-
! scope="row" | family
| The character's family members.
|-
! scope="row" | spouse/spouses
| The character's spouses.
|-
! scope="row" | significant_other/significant_others
| The character's significant others.
|-
! scope="row" | children
| The characters's children.
|-
! scope="row" | relatives
| The characters's relatives.
|-
! scope="row" | religion
| The character's religion.
|-
! scope="row" | origin/home
| The character's place of origin.
|-
! scope="row" | nationality
| The character's nationality.
|-
! scope="row" | extra-hdr
| Text for display in third header (default = No third header).
|-
! scope="row" | lbl#
| Label to display in left column where "#" is 1-5, 21-25, or 31-35 for custom fields under the 1st, 2nd, or 3rd headers respectively.
|-
! scope="row" | data#
| Text to display in the right column corresponding to the appropriate "lbl#".
|}
===TemplateData===
<templatedata>
{
"description": "Creates an infobox for a fictional character of any type.",
"params": {
"color": {
"label": "Color",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Background color for header bars (default = #DEDEE2). The text color is automatically computed. Must meet AAA compliance standards outlines on [[WP:COLOR]].",
"aliases": [
"colour"
]
},
"name": {
"label": "Name",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Character name to display in top header (default = PAGENAME)."
},
"series": {
"label": "Series",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Name of the series in which the character appears."
},
"franchise": {
"label": "Franchise",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Name of the fictional world or story in which the character appears. Does not italicize title."
},
"multiple": {
"label": "Multiple",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Set to yes if the infobox describes more than one character."
},
"image": {
"label": "Image",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Image of the character. \"File:\" and wikilinking is not required. i.e. use {{para|image|Example.png}}."
},
"image_upright": {
"label": "Image upright",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The image size defaults to frameless (220px). The size should not be set to a value that would result in an image width greater than 270px."
},
"alt": {
"label": "Alt",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Alt text for image per [[WP:MOSALT]]."
},
"caption": {
"label": "Caption",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "A caption explaining the image."
},
"first_major": {
"label": "First appearance major",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The title of the major work the fictional element first appeared in. Major works include TV series, films, books, albums and games."
},
"first_minor": {
"label": "First appearance minor",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The title of the minor work the fictional element first appeared in. Minor works include TV episodes, chapters, songs and game missions."
},
"first_issue": {
"label": "First appearance issue",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The number of the comic book issue the fictional element first appeared in."
},
"first_date": {
"label": "First appearance date",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The date of the publication/release of the minor work where the fictional element first appeared in."
},
"last_major": {
"label": "Last appearance major",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The title of the major work the fictional element last appeared in. Major works include TV series, films, books, albums and games."
},
"last_minor": {
"label": "Last appearance minor",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The title of the minor work the fictional element last appeared in. Minor works include TV episodes, chapters, songs and game missions."
},
"last_issue": {
"label": "Last appearance issue",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The number of the comic book issue the fictional element last appeared in."
},
"last_date": {
"label": "Last appearance date",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The date of the publication/release of the minor work where the fictional element last appeared in."
},
"first": {
"label": "First appearance",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "First appearance of the character."
},
"firstgame": {
"label": "First game",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "First appearance in a game of the character."
},
"last": {
"label": "Last appearance",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Last appearance of the character."
},
"creator": {
"label": "Creator",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Name of the individuals who are credited with the creation of the character."
},
"based_on": {
"label": "Based on",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Name of the original character the adaptation is based on. Use {{based on}} to add the title of original character and the names of the original creators. Use this field in conjunction with {{para|adapted_by}}."
},
"adapted_by": {
"label": "Adapted by",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Name of the individuals who adapted the character into a new medium. Use this field if the character in a medium is based on a character from a different medium, such as a character on television based on a comic book character."
},
"designer": {
"label": "Designer",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Name of the individuals who designed the character."
},
"portrayer": {
"label": "Portrayer",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Name of the individuals who portrayed the character."
},
"voice": {
"label": "Voice actor",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Name of the individuals who voiced the character (if different from portrayer or there is no portrayer)"
},
"motion_actor": {
"label": "Motion actor",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Name of the individuals who portrayed the character in motion capture."
},
"lbl1": {
"label": "Label 1",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Label to display in left column for custom fields under the 1st header."
},
"data1": {
"label": "Data 1",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Text to display in the right column corresponding to lbl1."
},
"lbl2": {
"label": "Label 2",
"inherits": "lbl1"
},
"data2": {
"label": "Data 2",
"description": "Text to display in the right column corresponding to lbl2.",
"inherits": "data1"
},
"lbl3": {
"label": "Label 3",
"inherits": "lbl1"
},
"data3": {
"label": "Data 3",
"description": "Text to display in the right column corresponding to lbl3.",
"inherits": "data1"
},
"lbl4": {
"label": "Label 4",
"inherits": "lbl1"
},
"data4": {
"label": "Data 4",
"description": "Text to display in the right column corresponding to lbl4.",
"inherits": "data1"
},
"lbl5": {
"label": "Label 5",
"inherits": "lbl1"
},
"data5": {
"label": "Data 5",
"description": "Text to display in the right column corresponding to lbl5.",
"inherits": "data1"
},
"noinfo": {
"label": "Disable second header",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Disable the first \"In-universe information\" header."
},
"info-hdr": {
"label": "Second header text",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Text for display in second header (default = Information)."
},
"full_name": {
"label": "Full name",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The character's full name."
},
"nickname": {
"label": "Nickname",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "A nickname used by the character. If there is more than one nickname, use {{para|nicknames}}."
},
"nicknames": {
"label": "Nicknames",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Any nicknames used by the character. If there is only one nickname, use {{para|nickname}}."
},
"alias": {
"label": "Alias",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "An alias used by the character. If there is more than one alias, use {{para|aliases}}."
},
"aliases": {
"label": "Alias",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Any aliases used by the character. If there is only one alias, use {{para|alias}}."
},
"species": {
"label": "Species",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The species of the character. Use for non-human characters only."
},
"race": {
"label": "Race",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The race of the character. Use for non-human characters only."
},
"gender": {
"label": "Gender",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The gender of the character. Use only if not obvious."
},
"title": {
"label": "Title",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Titles the character was known by."
},
"occupation": {
"label": "Occupation",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The character's job or role."
},
"position": {
"label": "Position",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The character's job or role."
},
"class": {
"label": "Class",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The character class for RPG characters."
},
"affiliation": {
"label": "Affiliation",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The groups or teams the character belongs to."
},
"alignment": {
"label": "Alignment",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The character's Dungeons & Dragons alignment."
},
"fighting_style": {
"label": "Fighting style",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The primary fighting styles used by the character."
},
"weapon": {
"label": "Weapon",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The types of weapons the character uses."
},
"family": {
"label": "Family",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The character's family members."
},
"spouse": {
"label": "Spouse",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The character's spouses."
},
"spouses": {
"label": "Spouses",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The character's spouses."
},
"significant_other": {
"label": "Significant other",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The character's significant others. If there is more than one significant_other, use {{para|significant_others}}."
},
"significant_others": {
"label": "Significant others",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The character's significant others. If there is only one significant_other, use {{para|significant_other}}."
},
"children": {
"label": "Children",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The characters's children"
},
"relatives": {
"label": "Relatives",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The characters's relatives"
},
"religion": {
"label": "Religion",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The character's religion"
},
"origin": {
"label": "Origin",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The character's place of origin."
},
"home": {
"label": "Home",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The character's place of origin."
},
"nationality": {
"label": "Nationality",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "The character's nationality."
},
"lbl21": {
"label": "Label 21",
"description": "Label to display in left column for custom fields under the 2nd header.",
"inherits": "lbl1"
},
"data21": {
"label": "Data 21",
"description": "Text to display in the right column corresponding to lbl21.",
"inherits": "data1"
},
"lbl22": {
"label": "Label 22",
"inherits": "lbl21"
},
"data22": {
"label": "Data 22",
"description": "Text to display in the right column corresponding to lbl22.",
"inherits": "data1"
},
"lbl23": {
"label": "Label 23",
"inherits": "lbl21"
},
"data23": {
"label": "Data 23",
"description": "Text to display in the right column corresponding to lbl23.",
"inherits": "data1"
},
"lbl24": {
"label": "Label 24",
"inherits": "lbl21"
},
"data24": {
"label": "Data 24",
"description": "Text to display in the right column corresponding to lbl24.",
"inherits": "data1"
},
"lbl25": {
"label": "Label 25",
"inherits": "lbl21"
},
"data25": {
"label": "Data 25",
"description": "Text to display in the right column corresponding to lbl25.",
"inherits": "data1"
},
"extra-hdr": {
"label": "Third header text",
"type": "string",
"required": false,
"suggested": false,
"deprecated": false,
"description": "Text for display in third header (default = No third header)."
},
"lbl31": {
"label": "Label 31",
"description": "Label to display in left column for custom fields under the 3rd header.",
"inherits": "lbl22"
},
"data31": {
"label": "Data 31",
"description": "Text to display in the right column corresponding to lbl31.",
"inherits": "data1"
},
"lbl32": {
"label": "Label 32",
"inherits": "lbl31"
},
"data32": {
"label": "Data 32",
"description": "Text to display in the right column corresponding to lbl32.",
"inherits": "data1"
},
"lbl33": {
"label": "Label 33",
"inherits": "lbl31"
},
"data33": {
"label": "Data 33",
"description": "Text to display in the right column corresponding to lbl33.",
"inherits": "data1"
},
"lbl34": {
"label": "Label 34",
"inherits": "lbl31"
},
"data34": {
"label": "Data 34",
"description": "Text to display in the right column corresponding to lbl34.",
"inherits": "data1"
},
"lbl35": {
"label": "Label 35",
"inherits": "lbl31"
},
"data35": {
"label": "Data 35",
"description": "Text to display in the right column corresponding to lbl35.",
"inherits": "data1"
}
},
"format": "block"
}
</templatedata>
=== All parameters (not for general use) ===
<pre>{{Infobox character
| color = <!-- headers background colour; the foreground colour is automatically computed -->
| name =
| series = <!-- or |franchise=; use without the italic on the outside -->
| multiple =
| image =
| image_upright =
| alt =
| caption =
| first_major = <!-- per [[MOS:MAJORWORK]] - major works include TV series, films, books, albums and games -->
| first_minor = <!-- or |first_issue=; Per [[MOS:MINORWORK]] - minor works include TV episodes, chapters, songs and game missions -->
| first_date =
| last_major =
| last_minor = <!-- or |last_issue= -->
| last_date =
| first =
| firstgame =
| last =
| creator = <!-- only the credited creators; use adapted_by= for adaptations -->
| based_on = <!-- if not an original creation, use {{based on|character|author}} -->
| adapted_by = <!-- for character adaption articles -->
| designer =
| portrayer =
| voice =
| motion_actor =
| lbl1 =
| data1 =
| lbl2 =
| data2 =
| lbl3 =
| data3 =
| lbl4 =
| data4 =
| lbl5 =
| data5 =
| noinfo =
| info-hdr =
| full_name =
| nickname = <!-- or |nicknames= -->
| alias = <!-- or |aliases= -->
| species = <!-- or |race=; for non-humans only -->
| gender = <!-- if not obvious -->
| title =
| occupation = <!-- or |position= or |class= -->
| affiliation = <!-- or |alignment= -->
| fighting_style =
| weapon =
| family =
| spouse = <!-- or |spouses= -->
| significant_other = <!-- or |significant_others= -->
| children =
| relatives =
| religion =
| origin = <!-- or |home= -->
| nationality =
| lbl21 =
| data21 =
| lbl22 =
| data22 =
| lbl23 =
| data23 =
| lbl24 =
| data24 =
| lbl25 =
| data25 =
| extra-hdr =
| lbl31 =
| data31 =
| lbl32 =
| data32 =
| lbl33 =
| data33 =
| lbl34 =
| data34 =
| lbl35 =
| data35 =
}}</pre>
== Example ==
{{Infobox character
| name = John Doe
| series = [[Criminal Minds]]
| image =
| caption =
| first_major = Criminal Minds
| first_minor = Pilot
| first_date = 2005
| last_major = Criminal Minds
| last_minor = Last One
| last_date = 2018
| creator = [[Agnes Nixon]]
| portrayer = [[Soupy Sales]]
| nickname = Doeboy
| alias = Jack Dew
| gender = Male
| title = Detective
| occupation = Law enforcement
| family = Doe
| spouse = Jane Doe
| significant_other =
| children = John Doe, Jr.
| relatives = Phil Doe (father), Nancy Doe (mother)
| religion = [[Christianity|Christian]]
| nationality = American
}}
<syntaxhighlight lang="moin">
{{Infobox character
| name = John Doe
| series = [[Criminal Minds]]
| image =
| caption =
| first_major = Criminal Minds
| first_minor = Pilot
| first_date = 2005
| last_major = Criminal Minds
| last_minor = Last One
| last_date = 2018
| creator = [[Agnes Nixon]]
| portrayer = [[Soupy Sales]]
| nickname = Doeboy
| alias = Jack Dew
| gender = Male
| title = Detective
| occupation = Law enforcement
| family = Doe
| spouse = Jane Doe
| significant_other =
| children = John Doe, Jr.
| relatives = Phil Doe (father), Nancy Doe (mother)
| religion = [[Christianity|Christian]]
| nationality = American
}}
</syntaxhighlight>
<includeonly>
[[Category:Templates]]
</includeonly>
79e0254594461b49dcbbe29a0a9f02d5cae75b4b
Main Page
0
1
2076
23
2023-09-14T21:00:28Z
Ilovethehitgameomori
2
/* Welcome to {{SITENAME}}! */
wikitext
text/x-wiki
__NOTOC__
== Welcome to {{SITENAME}}! ==
Welcome to ''Class Leads Nations I''! This is a site providing information for the map game’s first season.
* Confused on how to make a page? First, search the article you want to make - obviously, it will not exist. Press the redlink. It will allow you to make the page. Now, go to the pages [[Template:Infobox country]] or [[Template:Infobox character]] (alternatively, use [[Nation template]] to work faster) and paste the source-code into the source editing feature. Add additional text under the template about your country.</small>
<h2 id="mp-otd-h2" style="clear:both; margin:0.5em; background:#cedff2; font-family:inherit; font-size:120%; font-weight:italic; border:1px solid #a3b0bf; color:#000; padding:0.2em 0.4em;">In the CLN News</h2>
<div id="mp-otd" style="padding:0.1em 0.6em 0.5em;"></div>
* The [[Tibetan Empire|Khaganate of Tibet]] has declared war on the Indian Empire, led by Emperor Ivan Sprout. The Sundanese Empire and Binbowien Empire also are participating in this war.</div>
== Comments ==
This is a test for the WikiForum. <br />-- [[User:Ilovethehitgameomori|Ilovethehitgameomori]] ([[User talk:Ilovethehitgameomori|talk]]) 23:05, 13 September 2023 (UTC)
4ddf25938f986cb148f6c363b0d24203b490684a
Template:Sidebar with collapsible lists
10
1012
2078
2077
2023-09-14T21:04:45Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{#invoke: Sidebar | collapsible }}<noinclude>
{{documentation}}
<!-- Add categories to the /doc subpage, interwikis to Wikidata, not here -->
</noinclude>
4bd1f39f9101790ed6e315752e377a8ac7a95869
Module:Sidebar/styles.css
828
322
2080
667
2023-09-14T21:04:54Z
Ilovethehitgameomori
2
1 revision imported
sanitized-css
text/css
/* {{pp-template}} */
/* TODO: Invert width design to be "mobile first" */
.sidebar {
/* TODO: Ask if we should have max-width 22em instead */
width: 22em;
/* @noflip */
float: right;
/* @noflip */
clear: right;
/* @noflip */
margin: 0.5em 0 1em 1em;
background: #f8f9fa;
border: 1px solid #aaa;
padding: 0.2em;
text-align: center;
line-height: 1.4em;
font-size: 88%;
border-collapse: collapse;
/* Timeless has display: none on .nomobile at mobile resolutions, so we
* unhide it with display: table and let precedence and proximity win.
*/
display: table;
}
/* Unfortunately, so does Minerva desktop, except Minerva drops an
* !important on the declaration. So we have to be mean for Minerva users.
* Mobile removes the element entirely with `wgMFRemovableClasses` in
* https://github.com/wikimedia/operations-mediawiki-config/blob/master/
wmf-config/InitialiseSettings.php#L16992
* which is why displaying it categorically with display: table works.
* We don't really want to expose the generic user in the wild on mobile to have
* to deal with sidebars. (Maybe the ones with collapsible lists, so that
* might be an improvement. That is blocked on [[:phab:T111565]].)
*/
body.skin-minerva .sidebar {
display: table !important;
/* also, minerva is way too aggressive about other stylings on tables.
* TODO remove when this template gets moved to a div. plans on talk page.
* We always float right on Minerva because that's a lot of extra CSS
* otherwise. */
float: right !important;
margin: 0.5em 0 1em 1em !important;
}
.sidebar-subgroup {
width: 100%;
margin: 0;
border-spacing: 0;
}
.sidebar-left {
/* @noflip */
float: left;
/* @noflip */
clear: left;
/* @noflip */
margin: 0.5em 1em 1em 0;
}
.sidebar-none {
float: none;
clear: both;
/* @noflip */
margin: 0.5em 1em 1em 0;
}
.sidebar-outer-title {
padding: 0 0.4em 0.2em;
font-size: 125%;
line-height: 1.2em;
font-weight: bold;
}
.sidebar-top-image {
padding: 0.4em;
}
.sidebar-top-caption,
.sidebar-pretitle-with-top-image,
.sidebar-caption {
padding: 0.2em 0.4em 0;
line-height: 1.2em;
}
.sidebar-pretitle {
padding: 0.4em 0.4em 0;
line-height: 1.2em;
}
.sidebar-title,
.sidebar-title-with-pretitle {
padding: 0.2em 0.8em;
font-size: 145%;
line-height: 1.2em;
}
.sidebar-title-with-pretitle {
padding: 0.1em 0.4em;
}
.sidebar-image {
padding: 0.2em 0.4em 0.4em;
}
.sidebar-heading {
padding: 0.1em 0.4em;
}
.sidebar-content {
padding: 0 0.5em 0.4em;
}
.sidebar-content-with-subgroup {
padding: 0.1em 0.4em 0.2em;
}
.sidebar-above,
.sidebar-below {
padding: 0.3em 0.8em;
font-weight: bold;
}
.sidebar-collapse .sidebar-above,
.sidebar-collapse .sidebar-below {
border-top: 1px solid #aaa;
border-bottom: 1px solid #aaa;
}
.sidebar-navbar {
text-align: right;
font-size: 115%;
padding: 0 0.4em 0.4em;
}
.sidebar-list-title {
padding: 0 0.4em;
text-align: left;
font-weight: bold;
line-height: 1.6em;
font-size: 105%;
}
/* centered text with mw-collapsible headers is finicky */
.sidebar-list-title-c {
padding: 0 0.4em;
text-align: center;
margin: 0 3.3em;
}
@media (max-width: 720px) {
/* users have wide latitude to set arbitrary width and margin :(
"Super-specific" selector to prevent overriding this appearance by
lower level sidebars too */
body.mediawiki .sidebar {
width: 100% !important;
clear: both;
float: none !important; /* Remove when we div based; Minerva is dumb */
margin-left: 0 !important;
margin-right: 0 !important;
}
/* TODO: We might consider making all links wrap at small resolutions and then
* only introduce nowrap at higher resolutions. Do when we invert the media
* query.
*/
}
7d621b35a37807a103b59075851fe36201204ceb
Template:Trim
10
1013
2082
2081
2023-09-14T21:04:54Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
<includeonly>{{safesubst:#if:1|{{{1|}}}}}</includeonly><noinclude>
{{Documentation}}
</noinclude>
3d29fbfff9683523147db6e1f55c0e17ed30863b
Template:Diff
10
1014
2084
2083
2023-09-14T21:04:55Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
<span class="plainlinks">[{{#if:{{{title|{{{page|{{{1|}}}}}}}}}
|{{fullurl:{{{title|{{{page|{{{1}}}}}}}}}|{{#if:{{{diff|{{{2|}}}}}}
|diff={{trim|{{{diff|{{{2}}}}}}}}&
}}oldid={{trim|{{{oldid|{{{3|}}}}}}}}}}
|{{SERVER}}{{SCRIPTPATH}}/index.php?title={{#if:{{{diff|{{{2|}}}}}}
|&diff={{trim|{{{diff|{{{2}}}}}}}}
}}&oldid={{trim|{{{oldid|{{{3|}}}}}}}}
}}{{#ifeq:{{{diffonly|}}}|yes|&diffonly=1}} {{{label|{{{4|}}}}}}]</span><noinclude>
{{documentation}}
</noinclude>
32a6320b7d9c2652396a60306875ca9c97d3273e
Template:Italics correction
10
1015
2086
2085
2023-09-14T21:04:57Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
<span style="padding-right:0.15em;">{{{1}}}</span><noinclude>
{{Documentation}}
<!-- PLEASE ADD CATEGORIES AND INTERWIKI LINK ON THE DOCUMENTATION PAGE. -->
</noinclude>
e03ce33da89b58bc1b12b6ecfe93700d98be1ab5
Template:Template display
10
1016
2088
2087
2023-09-14T21:04:59Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
<includeonly>{{#invoke:Message box|ombox|type=notice
|image={{#switch:{{{1}}}|adaptive=[[File:Different devices simple.svg|65x65px|link=|alt=]]|nomobile=[[File:Handheld devices no.svg|55px|link=|alt=]]|nodesktop=[[File:Desktop devices no.svg|55px|link=|alt=]]}}
|text={{#switch:{{{1}}}
| adaptive = This template is [[Adaptive web design|responsive]] and <strong>displays differently in mobile and desktop view</strong>. Read the documentation for an explanation of the differences and why they exist.
| nomobile = This template does ''not'' display in the mobile view of Wikipedia; it is <strong>desktop only</strong>. Read the documentation for an explanation.
| nodesktop = This template does ''not'' display in the desktop view of Wikipedia; it is <strong>mobile only</strong>. Read the documentation for an explanation.
| nomobilesidebar = This template does ''not'' display in the mobile view of Wikipedia; it is <strong>desktop only</strong>. Read the [[Template:Sidebar/doc|parent documentation]] for an explanation.
| vector2022 = This template does not work properly in the [[Wikipedia:Vector 2022|Vector 2022]] skin. Read the documentation for an explanation.
| #default = {{{1}}}
}}}}</includeonly><noinclude>
{{Documentation}}
</noinclude>
47cc41eacc2d2dec246f01b81111b280cec901a3
Template:Generic template demo
10
1017
2090
2089
2023-09-14T21:05:00Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
#REDIRECT [[Template:Parameter names example]]
{{R semiprotected}}
[[Category:Wikipedia utility templates]]
[[Category:Template namespace templates]]
[[Category:Documentation assistance templates]]
22f645541f749cfd0eeffdee734b51b284103400
Template:Sidebar with collapsible lists/doc
10
1018
2092
2091
2023-09-14T21:05:02Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{Documentation subpage}}
<!-- Categories go where indicated at the bottom of this page, please; interwikis go to Wikidata (see also: [[Wikipedia:Wikidata]]). -->
{{High-use| 64996 }}
{{Template display|nomobile}}
{{Lua|Module:Sidebar}}
{{tl|Sidebar with collapsible lists}} is a version of {{tl|Sidebar}} which offers [[Help:Collapsing|collapsible]] lists in addition to Sidebar's ''content'' parameters.
== Usage ==
{{Generic template demo
|name={{PAGENAME}} |pretitle |title |image |above |heading1 |list1title |list1 |list2title |list2
|heading3={{{heading{{italics correction|''N''}}}}} |list3title={{{list{{italics correction|''N''}}title}}} |list3={{{list{{italics correction|''N''}}}}} |content4={{{content{{italics correction|''N''}}}}}
|below
}}
Parameters with infrequent use omitted.
<syntaxhighlight lang="wikitext">
{{Sidebar with collapsible lists
| name = {{subst:PAGENAME}}
| pretitle =
| title =
| image =
| templatestyles =
| expanded = {{{expanded|}}}
| heading1 =
| list1name =
| list1title =
| list1 =
| heading2 =
| list2name =
| list2title =
| list2 =
<!-- ...... -->
| headingN = <!-- Template:Sidebar's "headingN" and/or "contentN" parameters (where -->
| contentN = <!-- N is a number) may be used to include uncollapsible lists/content -->
<!-- ...... -->
| below =
}}
</syntaxhighlight>
== Parameters ==
{{further|Template:Sidebar#Parameters}}
This template takes all {{tl|sidebar}} parameters. In addition:
; {{para|list<sub>n</sub>title}}
: The displayed title of the collapsible list<sub>n</sub>.
; {{para|list<sub>n</sub>}}
: The contents of the collapsible list<sub>n</sub>.
; {{para|list<sub>n</sub>class}}
: A class can be added to target a specific list either with TemplateStyles or microformats. See [[Template:Sidebar#Classes]].
: In the context of TemplateStyles, specific list contents can be targeted like so: <code>.templateclass .listnclass .sidebar-list-title</code> for a specific list title and <code>.templateclass .listnclass .sidebar-list</code> for a specific list.
; {{para|expanded}} {{nobold|and}} {{para|list<sub>n</sub>name}}
: {{para|expanded}} is used to indicate which (if any) list named {{para|list<sub>n</sub>name}} is shown expanded when the template is first displayed; see {{tl|Collapsible lists option}}.
; {{para|centered list titles}}
: Set to anything (though {{para|centered list titles|y}} or {{para|centered list titles|yes}} are idiomatic) to make the sidebar list titles centered. This works around some not-great behavior in how centered text interacts with the collapsible toggle.
{{Sidebar with collapsible lists |list1={{{list1}}} without {{{list1title}}} |navbar=off}}
A {{para|list<sub>n</sub>}} without a {{para|list<sub>n</sub>title}} displays the default title ("List").
== Handling long links ==
{{further|Template:Sidebar#Handling long links}}
See [[Template:Sidebar#Handling long links]].
== TemplateStyles ==
The classes available for styling, besides those listed in [[Template:Sidebar#TemplateStyles]], are:
; <code>.sidebar-collapse</code>
: The top-level {{tl|sidebar with collapsible lists}} class.
; <code>.sidebar-list</code>
: The class is a container when either {{para|list<sub>n</sub>title}} or {{para|list<sub>n</sub>}} is provided in {{tl|sidebar with collapsible lists}}.
; <code>.sidebar-list-title</code>
: The class associated with a {{para|list<sub>n</sub>title}}. Every list title will have this class. Use the {{para|centered list titles}} to center text instead of adding CSS here.
; <code>.sidebar-list-content</code>
: The class associated with a {{para|list<sub>n</sub>}}. Every list content will have this class.
== Deprecated parameters ==
{{further|Template:Sidebar#Deprecated parameters}}
These parameters are deprecated for the same reason as the style parameters in {{t|Sidebar}} template.
; ''listtitlestyle'' {{nobold|and}} ''liststyle''
: These are the equivalent of, respectively, {{tl|Collapsible list}}'s ''titlestyle'' and ''liststyle'' parameters.
; ''listframestyle''
: Sets the framestyle (see {{tl|Collapsible list}}) for the lists.
; ''listNframestyle''
: Sets the framestyle for ''listN'', overriding ''listframestyle''.
; ''listNtitlestyle''
: Sets the titlestyle for ''listN'', overriding ''listtitlestyle'' above.
; ''listNstyle''
: Sets the liststyle for ''listN'', overriding ''liststyle'' above.
== See also ==
* {{diff|Template:Sidebar with collapsible lists|next|544062416|Last pre-Lua version}}
* {{tl|Collapsible list}}
* {{tl|Collapsible lists option}}
* {{tl|Navbox with collapsible groups}}
* {{tl|Sidebar}}
* [[Wikipedia:UBLIST]], for help in using unbulleted lists in fields.
<includeonly>{{#ifeq:{{PAGENAME}}|Sidebar with collapsible lists|
<!-- Categories go below this line, please; interwikis go to Wikidata, thank you! -->
[[Category:Sidebar meta-templates]]
[[Category:Collapse templates]]
}}</includeonly>
ad3358062eab0432c04637e90478fb08b0f09bd8
Template:Region history sidebar title
10
1019
2094
2093
2023-09-14T21:17:03Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
<includeonly><div class="sidebar-pretitle" style="margin: -0.2em 0; font-size:69%; font-weight:normal; {{{pretitlestyle|}}}">Part of [[:Category:{{{category|History of {{#if:{{{series|}}}|{{{series}}}|{{{region|{{{country}}}}}}}}}}}|a series]] on the</div></th>
</tr><tr>
<th class="sidebar-title-with-pretitle {{{titleclass|{{{aboveclass|}}}}}}" style="background: none; {{{titlestyle|{{{abovestyle|}}}}}}">{{#if:{{{linkoverride|}}} |{{{linkoverride}}} |[[History of {{{region|{{{country}}}}}}|History of <span class="fn org label">{{{region|{{{country}}}}}}</span>]]}}</th>
</tr>{{#if:{{{image|}}}
|<tr><td style="padding-bottom: 0.4em; border-bottom: {{{separator-width|1}}}px solid #ccc;{{{imagestyle|}}}">{{{image|}}}</td></tr>
}}</includeonly><noinclude>
{{Documentation}}
</noinclude>
082fbde850ef1f258f3cb44ed2b040e04c52d394
Template:Region history sidebar title/doc
10
1020
2096
2095
2023-09-14T21:17:08Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{Documentation subpage}}
<!-- Please place categories where indicated at the bottom of this page and interwikis at Wikidata (see [[Wikipedia:Wikidata]]) -->
This template is used to generate the above/title section in a region history sidebar. Place it in the {{para|title}} parameter of a template that uses {{tl|Sidebar}}.
== Example syntax ==
<pre style="overflow:auto;">
{{Sidebar with collapsible lists
| name = {{subst:PAGENAME}}
| bodyclass = vcard <!--plainlist / hlist-->
| wraplinks = true
| title = {{Region history sidebar title |country= <!-- or: |region= --> |image=[[File:(filename)|frameless]]}}
| expanded = {{{expanded|{{{1|}}}}}}
| list1name =
| list1title =
| list1 =
| list2name =
| list2title =
| list2 =
<!-- (etc) -->
| below = {{portal-inline|''region or country''|size=tiny}}
}}
</pre>
== Parameters ==
; country: The name of the country, which should be the same as the name used in the article about the history of the country.
: Example: {{para|country|the Netherlands}} to link to [[History of the Netherlands]].
; image : Filename of a representative image.
: Example: {{para|image|<nowiki>[[File:Albania state emblem.svg|75px|State emblem of Albania]]</nowiki>}}
===For regions that are not countries===
; region: The name of the region, which should correspond with the title of the article about the region.
: Example: {{para|region|North Dakota}}
===Modifying links===
; linkoverride: Optional parameter to override the default <code>History of region</code> link
; series: Optional parameter to override the default <code>Category:History of region</code> category link
===Removing the separator===
; separator-width: By default, the horizontal rule at the bottom of the box has width 1px, to remove the separator, set {{para|separator-width|0}}.
== See also ==
* {{tl|Politics sidebar title}}
* {{tl|Politics sidebar below}}
* {{tl|Sidebar}}
* {{tl|Sidebar with collapsible lists}}
<includeonly>{{Sandbox other|
| <!-- Categories below this line, please; interwikis at Wikidata -->
[[Category:History sidebar templates by country| ]]
[[Category:History of religion templates]]
[[Category:Sidebar meta-templates]]
}}</includeonly>
dbf0185003f8acf5c3d7a18151abae36b406d33c
Template:History of Tibet
10
1021
2097
2023-09-14T21:24:50Z
Ilovethehitgameomori
2
Created page with "{{sidebar with collapsible lists | name = History of Tibet | wraplinks = true | listtitlestyle = border:none;background:gainsboro;text-align:center; | class = plainlist | title = {{region history sidebar title | country = Tibet }} | image = {{#invoke:InfoboxImage|InfoboxImage |image={{{image|Tibet empire.jpeg}}} |size= {{{imagesize|220px}}}}} | captionstyle = padding-bottom:0.3em; | caption = {{{caption|}}} }} ----"
wikitext
text/x-wiki
{{sidebar with collapsible lists
| name = History of Tibet
| wraplinks = true
| listtitlestyle = border:none;background:gainsboro;text-align:center;
| class = plainlist
| title = {{region history sidebar title
| country = Tibet
}}
| image = {{#invoke:InfoboxImage|InfoboxImage |image={{{image|Tibet empire.jpeg}}} |size= {{{imagesize|220px}}}}}
| captionstyle = padding-bottom:0.3em;
| caption = {{{caption|}}}
}}
----
ca95d627d2456d81ef9b14946e8f346af535b644
Template:Sidebar with collapsible lists/doc
10
1018
2098
2092
2023-09-14T21:26:05Z
Ilovethehitgameomori
2
/* Usage */
wikitext
text/x-wiki
{{Documentation subpage}}
<!-- Categories go where indicated at the bottom of this page, please; interwikis go to Wikidata (see also: [[Wikipedia:Wikidata]]). -->
{{High-use| 64996 }}
{{Template display|nomobile}}
{{Lua|Module:Sidebar}}
{{tl|Sidebar with collapsible lists}} is a version of {{tl|Sidebar}} which offers [[Help:Collapsing|collapsible]] lists in addition to Sidebar's ''content'' parameters.
== Usage ==
{{Generic template demo
|name={{PAGENAME}} |pretitle |title |image |above |heading1 |list1title |list1 |list2title |list2
|heading3={{{heading{{italics correction|''N''}}}}} |list3title={{{list{{italics correction|''N''}}title}}} |list3={{{list{{italics correction|''N''}}}}} |content4={{{content{{italics correction|''N''}}}}}
|below
}}
Parameters with infrequent use omitted.
<syntaxhighlight lang="wikitext">
{{sidebar with collapsible lists
| name = History of Templatia
| wraplinks = true
| listtitlestyle = border:none;background:gainsboro;text-align:center;
| class = plainlist
| title = {{region history sidebar title
| country = Templatia
}}
| image = {{#invoke:InfoboxImage|InfoboxImage |image={{{image|Image.jpeg}}} |size= {{{imagesize|220px}}}}}
| captionstyle = padding-bottom:0.3em;
| caption = {{{caption|}}}
}}
----
</syntaxhighlight>
== Parameters ==
{{further|Template:Sidebar#Parameters}}
This template takes all {{tl|sidebar}} parameters. In addition:
; {{para|list<sub>n</sub>title}}
: The displayed title of the collapsible list<sub>n</sub>.
; {{para|list<sub>n</sub>}}
: The contents of the collapsible list<sub>n</sub>.
; {{para|list<sub>n</sub>class}}
: A class can be added to target a specific list either with TemplateStyles or microformats. See [[Template:Sidebar#Classes]].
: In the context of TemplateStyles, specific list contents can be targeted like so: <code>.templateclass .listnclass .sidebar-list-title</code> for a specific list title and <code>.templateclass .listnclass .sidebar-list</code> for a specific list.
; {{para|expanded}} {{nobold|and}} {{para|list<sub>n</sub>name}}
: {{para|expanded}} is used to indicate which (if any) list named {{para|list<sub>n</sub>name}} is shown expanded when the template is first displayed; see {{tl|Collapsible lists option}}.
; {{para|centered list titles}}
: Set to anything (though {{para|centered list titles|y}} or {{para|centered list titles|yes}} are idiomatic) to make the sidebar list titles centered. This works around some not-great behavior in how centered text interacts with the collapsible toggle.
{{Sidebar with collapsible lists |list1={{{list1}}} without {{{list1title}}} |navbar=off}}
A {{para|list<sub>n</sub>}} without a {{para|list<sub>n</sub>title}} displays the default title ("List").
== Handling long links ==
{{further|Template:Sidebar#Handling long links}}
See [[Template:Sidebar#Handling long links]].
== TemplateStyles ==
The classes available for styling, besides those listed in [[Template:Sidebar#TemplateStyles]], are:
; <code>.sidebar-collapse</code>
: The top-level {{tl|sidebar with collapsible lists}} class.
; <code>.sidebar-list</code>
: The class is a container when either {{para|list<sub>n</sub>title}} or {{para|list<sub>n</sub>}} is provided in {{tl|sidebar with collapsible lists}}.
; <code>.sidebar-list-title</code>
: The class associated with a {{para|list<sub>n</sub>title}}. Every list title will have this class. Use the {{para|centered list titles}} to center text instead of adding CSS here.
; <code>.sidebar-list-content</code>
: The class associated with a {{para|list<sub>n</sub>}}. Every list content will have this class.
== Deprecated parameters ==
{{further|Template:Sidebar#Deprecated parameters}}
These parameters are deprecated for the same reason as the style parameters in {{t|Sidebar}} template.
; ''listtitlestyle'' {{nobold|and}} ''liststyle''
: These are the equivalent of, respectively, {{tl|Collapsible list}}'s ''titlestyle'' and ''liststyle'' parameters.
; ''listframestyle''
: Sets the framestyle (see {{tl|Collapsible list}}) for the lists.
; ''listNframestyle''
: Sets the framestyle for ''listN'', overriding ''listframestyle''.
; ''listNtitlestyle''
: Sets the titlestyle for ''listN'', overriding ''listtitlestyle'' above.
; ''listNstyle''
: Sets the liststyle for ''listN'', overriding ''liststyle'' above.
== See also ==
* {{diff|Template:Sidebar with collapsible lists|next|544062416|Last pre-Lua version}}
* {{tl|Collapsible list}}
* {{tl|Collapsible lists option}}
* {{tl|Navbox with collapsible groups}}
* {{tl|Sidebar}}
* [[Wikipedia:UBLIST]], for help in using unbulleted lists in fields.
<includeonly>{{#ifeq:{{PAGENAME}}|Sidebar with collapsible lists|
<!-- Categories go below this line, please; interwikis go to Wikidata, thank you! -->
[[Category:Sidebar meta-templates]]
[[Category:Collapse templates]]
}}</includeonly>
d7d0ca47445374f6325d5efc2a24b296e9f81a14
2099
2098
2023-09-14T21:28:19Z
Ilovethehitgameomori
2
/* Usage */
wikitext
text/x-wiki
{{Documentation subpage}}
<!-- Categories go where indicated at the bottom of this page, please; interwikis go to Wikidata (see also: [[Wikipedia:Wikidata]]). -->
{{High-use| 64996 }}
{{Template display|nomobile}}
{{Lua|Module:Sidebar}}
{{tl|Sidebar with collapsible lists}} is a version of {{tl|Sidebar}} which offers [[Help:Collapsing|collapsible]] lists in addition to Sidebar's ''content'' parameters.
== Usage ==
{{sidebar with collapsible lists
| name = History of Templatia
| wraplinks = true
| listtitlestyle = border:none;background:gainsboro;text-align:center;
| class = plainlist
| title = {{region history sidebar title
| country = Templatia
}}
| image = {{#invoke:InfoboxImage|InfoboxImage |image={{{image|Image.jpg}}} |size= {{{imagesize|220px}}}}}
| captionstyle = padding-bottom:0.3em;
| caption = {{{caption|}}}
}}
Parameters with infrequent use omitted.
<syntaxhighlight lang="wikitext">
{{sidebar with collapsible lists
| name = History of Templatia
| wraplinks = true
| listtitlestyle = border:none;background:gainsboro;text-align:center;
| class = plainlist
| title = {{region history sidebar title
| country = Templatia
}}
| image = {{#invoke:InfoboxImage|InfoboxImage |image={{{image|Image.jpeg}}} |size= {{{imagesize|220px}}}}}
| captionstyle = padding-bottom:0.3em;
| caption = {{{caption|}}}
}}
----
</syntaxhighlight>
== Parameters ==
{{further|Template:Sidebar#Parameters}}
This template takes all {{tl|sidebar}} parameters. In addition:
; {{para|list<sub>n</sub>title}}
: The displayed title of the collapsible list<sub>n</sub>.
; {{para|list<sub>n</sub>}}
: The contents of the collapsible list<sub>n</sub>.
; {{para|list<sub>n</sub>class}}
: A class can be added to target a specific list either with TemplateStyles or microformats. See [[Template:Sidebar#Classes]].
: In the context of TemplateStyles, specific list contents can be targeted like so: <code>.templateclass .listnclass .sidebar-list-title</code> for a specific list title and <code>.templateclass .listnclass .sidebar-list</code> for a specific list.
; {{para|expanded}} {{nobold|and}} {{para|list<sub>n</sub>name}}
: {{para|expanded}} is used to indicate which (if any) list named {{para|list<sub>n</sub>name}} is shown expanded when the template is first displayed; see {{tl|Collapsible lists option}}.
; {{para|centered list titles}}
: Set to anything (though {{para|centered list titles|y}} or {{para|centered list titles|yes}} are idiomatic) to make the sidebar list titles centered. This works around some not-great behavior in how centered text interacts with the collapsible toggle.
{{Sidebar with collapsible lists |list1={{{list1}}} without {{{list1title}}} |navbar=off}}
A {{para|list<sub>n</sub>}} without a {{para|list<sub>n</sub>title}} displays the default title ("List").
== Handling long links ==
{{further|Template:Sidebar#Handling long links}}
See [[Template:Sidebar#Handling long links]].
== TemplateStyles ==
The classes available for styling, besides those listed in [[Template:Sidebar#TemplateStyles]], are:
; <code>.sidebar-collapse</code>
: The top-level {{tl|sidebar with collapsible lists}} class.
; <code>.sidebar-list</code>
: The class is a container when either {{para|list<sub>n</sub>title}} or {{para|list<sub>n</sub>}} is provided in {{tl|sidebar with collapsible lists}}.
; <code>.sidebar-list-title</code>
: The class associated with a {{para|list<sub>n</sub>title}}. Every list title will have this class. Use the {{para|centered list titles}} to center text instead of adding CSS here.
; <code>.sidebar-list-content</code>
: The class associated with a {{para|list<sub>n</sub>}}. Every list content will have this class.
== Deprecated parameters ==
{{further|Template:Sidebar#Deprecated parameters}}
These parameters are deprecated for the same reason as the style parameters in {{t|Sidebar}} template.
; ''listtitlestyle'' {{nobold|and}} ''liststyle''
: These are the equivalent of, respectively, {{tl|Collapsible list}}'s ''titlestyle'' and ''liststyle'' parameters.
; ''listframestyle''
: Sets the framestyle (see {{tl|Collapsible list}}) for the lists.
; ''listNframestyle''
: Sets the framestyle for ''listN'', overriding ''listframestyle''.
; ''listNtitlestyle''
: Sets the titlestyle for ''listN'', overriding ''listtitlestyle'' above.
; ''listNstyle''
: Sets the liststyle for ''listN'', overriding ''liststyle'' above.
== See also ==
* {{diff|Template:Sidebar with collapsible lists|next|544062416|Last pre-Lua version}}
* {{tl|Collapsible list}}
* {{tl|Collapsible lists option}}
* {{tl|Navbox with collapsible groups}}
* {{tl|Sidebar}}
* [[Wikipedia:UBLIST]], for help in using unbulleted lists in fields.
<includeonly>{{#ifeq:{{PAGENAME}}|Sidebar with collapsible lists|
<!-- Categories go below this line, please; interwikis go to Wikidata, thank you! -->
[[Category:Sidebar meta-templates]]
[[Category:Collapse templates]]
}}</includeonly>
ec61b491cb7a2864f70628c7d8524f65cc00cb1d
Main Page
0
1
2100
2076
2023-09-14T21:28:58Z
Ilovethehitgameomori
2
/* Welcome to {{SITENAME}}! */
wikitext
text/x-wiki
__NOTOC__
== Welcome to {{SITENAME}}! ==
Welcome to ''Class Leads Nations I''! This is a site providing information for the map game’s first season.
* Confused on how to make a page? First, search the article you want to make - obviously, it will not exist. Press the redlink. It will allow you to make the page. Now, go to the pages [[Template:Infobox country/Source]] or [[Template:Infobox character]] (alternatively, use [[Nation template]] to work faster) and paste the source-code into the source editing feature. Add additional text under the template about your country.</small>
<h2 id="mp-otd-h2" style="clear:both; margin:0.5em; background:#cedff2; font-family:inherit; font-size:120%; font-weight:italic; border:1px solid #a3b0bf; color:#000; padding:0.2em 0.4em;">In the CLN News</h2>
<div id="mp-otd" style="padding:0.1em 0.6em 0.5em;"></div>
* The [[Tibetan Empire|Khaganate of Tibet]] has declared war on the Indian Empire, led by Emperor Ivan Sprout. The Sundanese Empire and Binbowien Empire also are participating in this war.</div>
== Comments ==
This is a test for the WikiForum. <br />-- [[User:Ilovethehitgameomori|Ilovethehitgameomori]] ([[User talk:Ilovethehitgameomori|talk]]) 23:05, 13 September 2023 (UTC)
f01f39fecdbd00826cf690865a0829c3c0ac9efc
2113
2100
2023-09-14T21:40:15Z
Ilovethehitgameomori
2
/* Welcome to {{SITENAME}}! */
wikitext
text/x-wiki
__NOTOC__
== Welcome to {{SITENAME}}! ==
Welcome to ''Class Leads Nations I''! This is a site providing information for the map game’s first season.
* Confused on how to make a page? First, search the article you want to make - obviously, it will not exist. Press the redlink. It will allow you to make the page. Now, go to the pages [[Template:Infobox country/Source]] or [[Template:Infobox character]] (alternatively, use [[Nation template]] to work faster) and paste the source-code into the source editing feature. Add additional text under the template about your country.</small>
* Q: Why doesn’t the template show up when I paste from the pages you linked?
Answer: You need to fill it out. Remove what you don’t need!
<h2 id="mp-otd-h2" style="clear:both; margin:0.5em; background:#cedff2; font-family:inherit; font-size:120%; font-weight:italic; border:1px solid #a3b0bf; color:#000; padding:0.2em 0.4em;">In the CLN News</h2>
<div id="mp-otd" style="padding:0.1em 0.6em 0.5em;"></div>
* The [[Tibetan Empire|Khaganate of Tibet]] has declared war on the Indian Empire, led by Emperor Ivan Sprout. The Sundanese Empire and Binbowien Empire also are participating in this war.</div>
== Comments ==
This is a test for the WikiForum. <br />-- [[User:Ilovethehitgameomori|Ilovethehitgameomori]] ([[User talk:Ilovethehitgameomori|talk]]) 23:05, 13 September 2023 (UTC)
15be68cc82587f9ec433dcf128f2bc3c3325ca93
Template:PAGENAMEBASE
10
1022
2102
2101
2023-09-14T21:31:14Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{{{{|safesubst:}}}#Invoke:String|replace|{{{1|{{{{{|safesubst:}}}PAGENAME}}}}}|%s+%b()$||1|false}}<noinclude>
{{documentation}}
</noinclude>
f23a5d434cb5b0baac5e1f58e9ceef9118e6873f
Template:Tlc
10
1023
2104
2103
2023-09-14T21:31:21Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
#REDIRECT [[Template:Template link code]]
{{Redirect category shell|
{{R from template shortcut}}
{{R from high-use template}}
{{R from move}}
}}
48ef4a029c0e27cccb1148a29fb8b7ccb211a4a2
Template:Template link code
10
1024
2106
2105
2023-09-14T21:31:21Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
<includeonly>{{#Invoke:Template link general|main|nolink=yes|code=yes|nowrap=yes}}</includeonly><noinclude>
{{Documentation|1=Template:Tlg/doc
|content = {{tlg/doc|tlc}}
}}
<!-- Add categories to the /doc subpage, not here! -->
</noinclude>
044f00ca1bfc10cb967c32e893043ccc6f739764
Template:Tld
10
1025
2108
2107
2023-09-14T21:31:22Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
#REDIRECT [[Template:Template link code]]
be5d6275ea41d83224503e05901f3405c82141f7
Module:Transclusion count/data/P
828
1026
2110
2109
2023-09-14T21:31:24Z
Ilovethehitgameomori
2
1 revision imported
Scribunto
text/plain
return {
["P"] = 6100,
["P-phrases"] = 3300,
["P."] = 3600,
["P1"] = 142000,
["P2"] = 291000,
["PAGENAMEBASE"] = 1560000,
["PAGENAMEU"] = 76000,
["PAK"] = 2900,
["PD-US"] = 11000,
["PD-US-1923"] = 2300,
["PD-US-1923-abroad"] = 5900,
["PD-US-expired"] = 4400,
["PD-US-expired-abroad"] = 7000,
["PD-art"] = 3500,
["PD-ineligible-USonly"] = 5000,
["PD-notice"] = 21000,
["PD-old-100"] = 5300,
["PD-self"] = 37000,
["PD-textlogo"] = 6500,
["PDB_Gallery"] = 2900,
["PDanube"] = 3200,
["PER"] = 3100,
["PHI"] = 2500,
["PHL"] = 3500,
["PLANTS"] = 4000,
["PM20"] = 3300,
["PMID"] = 7000,
["POL"] = 53000,
["POR"] = 4900,
["POTD_default"] = 11000,
["POTD_image"] = 2600,
["POTD_navigation"] = 6800,
["POTDlink"] = 7200,
["POV"] = 7300,
["PR/header"] = 3100,
["PR/heading"] = 7200,
["PRT"] = 5700,
["PR_link"] = 102000,
["PS"] = 2800,
["Pad"] = 54000,
["Page"] = 4100,
["Page_name_sub"] = 45000,
["Page_needed"] = 18000,
["Page_tabs"] = 3500,
["Page_tabs/styles.css"] = 3500,
["Page_views"] = 2200,
["Pagelinks"] = 42000,
["Pagelist"] = 4800,
["Pagetype"] = 13900000,
["Paid"] = 9200,
["Para"] = 2630000,
["Parabr"] = 2700,
["Paragraph_break"] = 1190000,
["Param_value"] = 135000,
["Parameter_names_example"] = 2400,
["ParmPart"] = 13000,
["Partial"] = 2000,
["Partial_minor_planet_designation"] = 5800,
["Partly_done"] = 2600,
["Party_color"] = 72000,
["Party_color_cell"] = 4300,
["Party_name_with_color"] = 7500,
["Party_name_with_colour"] = 3200,
["Party_shading/Democratic"] = 15000,
["Party_shading/Independent"] = 2200,
["Party_shading/Republican"] = 14000,
["Party_stripe"] = 18000,
["Pass"] = 2700,
["Pb"] = 1170000,
["Pbox"] = 3100,
["Pbox/1"] = 3100,
["Peacock"] = 3400,
["Pedigree"] = 3900,
["Peer_review/heading"] = 10000,
["Peer_review_tools"] = 8300,
["Pending"] = 3200,
["Pengoal"] = 9400,
["Penmiss"] = 11000,
["Percentage"] = 12000,
["Performance_key"] = 2500,
["Period_color"] = 23000,
["Period_end"] = 21000,
["Period_id"] = 23000,
["Period_start"] = 23000,
["PeruTasks"] = 16000,
["Phab"] = 5700,
["Phanerozoic_220px"] = 21000,
["PharmNavFootnote"] = 5200,
["Philippine_name"] = 2800,
["Philosophy"] = 3600,
["Photo_montage"] = 4500,
["Photo_requested"] = 103000,
["Photograph_requested"] = 2900,
["Photomontage"] = 4400,
["Physics"] = 9300,
["Picture_of_the_day"] = 7200,
["Pie_chart"] = 5800,
["Pie_chart/slice"] = 5800,
["Ping"] = 227000,
["Pipe"] = 116000,
["Place_name_disambiguation"] = 40000,
["Plain_link"] = 162000,
["Plain_list"] = 13000,
["Plain_text"] = 40000,
["Plainlink"] = 80000,
["Plainlist"] = 345000,
["Plainlist/styles.css"] = 2900000,
["Player"] = 3600,
["Player2"] = 2600,
["Please_check_ISSN"] = 14000,
["Plural"] = 104000,
["Pluralize_from_text"] = 1500000,
["Poem_quote"] = 2900,
["Poemquote"] = 2300,
["Politician_icon"] = 33000,
["Politician_icon2"] = 33000,
["Politics_sidebar_below"] = 19000,
["Politics_sidebar_title"] = 19000,
["Poll_top"] = 2000,
["Polluted_category"] = 2200,
["Polparty"] = 27000,
["Pop_density"] = 9300,
["Population_Germany"] = 14000,
["Portal"] = 9290000,
["Portal-Class"] = 7600,
["Portal-inline"] = 217000,
["Portal_bar"] = 113000,
["Portal_box"] = 2700,
["Portalbar"] = 12000,
["Portuguese_name"] = 8600,
["PosMapFS"] = 4300,
["Possible"] = 3300,
["Possibly_empty_category"] = 68000,
["Post-nominals"] = 51000,
["Post-nominals/AUS"] = 7400,
["Post-nominals/CAN"] = 9100,
["Post-nominals/GBR"] = 27000,
["Post-nominals/NZL"] = 3900,
["Postnominals"] = 9200,
["Pp"] = 13000,
["Pp-book-cover"] = 52000,
["Pp-extended"] = 2200,
["Pp-move"] = 7700,
["Pp-move-indef"] = 3600,
["Pp-pc"] = 3700,
["Pp-pc1"] = 2500,
["Pp-protected"] = 6400,
["Pp-semi-indef"] = 4400,
["Pp-template"] = 2600,
["Pp-vandalism"] = 2500,
["Precision"] = 265000,
["PresFoot"] = 2900,
["PresHead"] = 3200,
["PresRow"] = 3200,
["Press"] = 4700,
["Preview_warning"] = 23000,
["Primary_source_inline"] = 5800,
["Primary_sources"] = 30000,
["Principal_rank"] = 475000,
["Prl"] = 102000,
["Pro-wrestling"] = 5500,
["ProCyclingStats"] = 2500,
["ProQuest"] = 16000,
["Professional_wrestling_profiles"] = 2000,
["Professional_wrestling_results_table"] = 2500,
["Profit"] = 3600,
["Progress_box"] = 17000,
["Project-Class"] = 12000,
["Project_Catholicism"] = 2000,
["Project_other"] = 16000,
["Proper_name"] = 2300,
["Prose"] = 3300,
["Proxy_block"] = 2200,
["Pso"] = 3700,
["Purge"] = 374000,
["Purge_button"] = 17000,
["Module:Page"] = 244000,
["Module:PageLinks"] = 42000,
["Module:Page_tabs"] = 3500,
["Module:Pagelist"] = 4800,
["Module:Pagetype"] = 15900000,
["Module:Pagetype/config"] = 15900000,
["Module:ParameterCount"] = 766000,
["Module:Parameter_names_example"] = 2400,
["Module:Parameter_validation"] = 130000,
["Module:Parameter_validation/default_config"] = 130000,
["Module:Party_name_with_color"] = 8400,
["Module:Percentage"] = 12000,
["Module:Person_height"] = 257000,
["Module:Person_length"] = 7100,
["Module:Person_weight"] = 78000,
["Module:Photo_montage"] = 4500,
["Module:Plain_text"] = 1490000,
["Module:Political_party"] = 113000,
["Module:Political_party/A"] = 19000,
["Module:Political_party/B"] = 15000,
["Module:Political_party/C"] = 38000,
["Module:Political_party/D"] = 48000,
["Module:Political_party/E"] = 5400,
["Module:Political_party/F"] = 11000,
["Module:Political_party/G"] = 16000,
["Module:Political_party/H"] = 4900,
["Module:Political_party/I"] = 47000,
["Module:Political_party/J"] = 6900,
["Module:Political_party/K"] = 3600,
["Module:Political_party/L"] = 36000,
["Module:Political_party/M"] = 10000,
["Module:Political_party/N"] = 29000,
["Module:Political_party/O"] = 5000,
["Module:Political_party/P"] = 25000,
["Module:Political_party/R"] = 46000,
["Module:Political_party/S"] = 28000,
["Module:Political_party/T"] = 10000,
["Module:Political_party/U"] = 17000,
["Module:Political_party/V"] = 6600,
["Module:Political_party/W"] = 10000,
["Module:Pop_density"] = 9300,
["Module:PopulationFromWikidata"] = 6100,
["Module:Portal"] = 9600000,
["Module:Portal-inline"] = 217000,
["Module:Portal/images/a"] = 1620000,
["Module:Portal/images/aliases"] = 169000,
["Module:Portal/images/b"] = 2750000,
["Module:Portal/images/c"] = 1540000,
["Module:Portal/images/d"] = 101000,
["Module:Portal/images/e"] = 402000,
["Module:Portal/images/f"] = 799000,
["Module:Portal/images/g"] = 616000,
["Module:Portal/images/h"] = 420000,
["Module:Portal/images/i"] = 1060000,
["Module:Portal/images/j"] = 264000,
["Module:Portal/images/k"] = 69000,
["Module:Portal/images/l"] = 415000,
["Module:Portal/images/m"] = 617000,
["Module:Portal/images/n"] = 716000,
["Module:Portal/images/o"] = 398000,
["Module:Portal/images/other"] = 124000,
["Module:Portal/images/p"] = 833000,
["Module:Portal/images/q"] = 3000,
["Module:Portal/images/r"] = 365000,
["Module:Portal/images/s"] = 1550000,
["Module:Portal/images/t"] = 612000,
["Module:Portal/images/u"] = 983000,
["Module:Portal/images/v"] = 281000,
["Module:Portal/images/w"] = 165000,
["Module:Portal/images/y"] = 32000,
["Module:Portal/images/z"] = 5200,
["Module:Portal/styles.css"] = 9290000,
["Module:Portal_bar"] = 132000,
["Module:Portal_bar/styles.css"] = 132000,
["Module:Professional_wrestling_profiles"] = 2100,
["Module:Professional_wrestling_results_table"] = 2500,
["Module:Progress_box"] = 17000,
["Module:Progress_box/config"] = 17000,
["Module:Progress_box/styles.css"] = 17000,
["Module:Protect"] = 247000,
["Module:Protected_edit_request"] = 47000,
["Module:Protection_banner"] = 54000,
["Module:Protection_banner/config"] = 54000,
["Module:Purge"] = 393000,
}
99de02abb97559d14c8f809c9e930b02e275dd77
Template:PAGENAMEBASE/doc
10
1027
2112
2111
2023-09-14T21:31:25Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{high-risk}}
{{Documentation subpage}}
<!-- Please place categories where indicated at the bottom of this page and interwikis at Wikidata (see [[Wikipedia:Wikidata]]) -->
{{lua|Module:String}}
== Usage ==
This template returns the current {{tld|PAGENAME}} minus (text in parentheses) or the final set of parentheses where more than one set exist.
e.g. {{tlx|PAGENAMEBASE}} on page [[Chiton (genus)]] returns {{PAGENAMEBASE|Chiton (genus)}}
::on [[Sweet Dreams (Are Made of This) (album)]] returns {{PAGENAMEBASE|Sweet Dreams (Are Made of This) (album)}}
::on [[Sweet Dreams (Are Made of This)]] returns {{PAGENAMEBASE|Sweet Dreams (Are Made of This)}}
::on [[Stadion der Freundschaft (Frankfurt (Oder))]] returns {{PAGENAMEBASE|Stadion der Freundschaft (Frankfurt (Oder))}}
Can also pass an optional page parameter:
* {{tlc|PAGENAMEBASE|foo (bar)}} → "{{PAGENAMEBASE|foo (bar)}}"
* {{tlc|PAGENAMEBASE|foo bar}} → "{{PAGENAMEBASE|foo bar}}"
It is not to be confused with {{tld|BASEPAGENAME}}, which is a [[mw:Help:Magic words|magic word]] that strips subpages, not parentheses.
== See also ==
* [[Help:Magic words#Variables]]
* [[Template:String-handling templates|String-handling templates]]
* {{tl|PAGENAME}} (variant to strip anything in parentheses from the title)
* {{tl|FULLPAGENAME}} (including namespace)
* {{tl|Link without disambiguator}}
<includeonly>{{Sandbox other|
| <!-- Categories below this line, please; interwikis at Wikidata -->
[[Category:Wikipedia metatemplates]]
[[Category:Wikipedia magic word templates]]
[[Category:Wikipedia article titles]]
}}</includeonly>
e07ae5fc2f5520d36e2e9be95274b14bca091700
Khaganate of Tibet
0
5
2114
1483
2023-09-15T01:48:29Z
Ilovethehitgameomori
2
wikitext
text/x-wiki
{{Infobox country
|conventional_long_name = '''Khaganate of Tibet'''
|common_name = Tibet
|image_flag = Tibet empire.jpeg
|alt_flag = Vertical tricolor (green, red, yellow) with a five-pointed gold star in the center of the red.
|official_languages = Tibetan
|demonym = Tibetan
|capital = [[Lhasa]]
|largest_city = [[Lhasa]]
|government_type = [[w:Absolute monarchy|Absolute monarchy]]
|leader_title1 = Khaganate
|leader_name1 = Jaden the Great
|area_rank = 2nd <!--Demographic Yearbook 1.-->
|area_km2 = 2,500,000
|area_sq_mi = 970,000 <!--Do not remove per [[WP:MOSNUM]]-->
}}
The '''Khaganate of Tibet''' (Tibetan: ཁགནཏེཨོཕ༹་ཏིབེཏ), or simply '''Tibet''', is a country located in East Asia, and modern-day Western China.
It was founded in 621 AD, tracing its roots to the Yarlung dynasty’s expansion, forming the Khaganate. After a harsh period of decline in the nation, and after Langdarma died, it left for a state of Interregnum, which Jaden the Great, sometimes known by his nickname Rgyalmi-dmangs (Tibetan: Person-king). Following his ascent to the throne, this halted the decline of the nation and gradually brought Tibet to a stable and prosperous nation.
To this day, it has global ties with many nations and is in the Imperial Alliance alongside the [[Spartan Empire]].
== History ==
==== Formation ====
Following the expansion of the Yarlung dynasty, the Khaganate formed. Around 838, there was a period of decline in the Khaganate. A couple years later, Langdarma took the throne, however died a year after his ascent to the throne of the nation. Because of this, there was a period of brief interregnum, before the eventual ascent to the throne of Jaden, or Rgyalmi-dmangs.
His idea was to make alliances with growing states, which allowed the Khaganate to grow with trade and improve its declining economy and state.
==== Alliances ====
Because of the decline, Tibet was able to rescue itself by becoming allies with local nations in the region, such as the [[Binbowien Empire]] and the [[Sundanese Empire]], aswell as maintaining good relations with the [[Spartan Empire]] before forming the Imperial Alliance.
==== War period (Present) ====
{{see also|Indo-Tibetan War}}
Following a top secret plan after a meeting with the leader of the Binbowien Empire and the Sundanese Empire, the Indo-Tibetan war was declared on the reasoning that the [[Indian Empire]] is a threat to the national security of Asia. Since then, there have been no changes to the current borders of all nations involved.
== References ==
1a3452c49d156b788b527a1ecc497c9da3a90827
2115
2114
2023-09-15T01:54:30Z
Ilovethehitgameomori
2
/* War period (Present) */
wikitext
text/x-wiki
{{Infobox country
|conventional_long_name = '''Khaganate of Tibet'''
|common_name = Tibet
|image_flag = Tibet empire.jpeg
|alt_flag = Vertical tricolor (green, red, yellow) with a five-pointed gold star in the center of the red.
|official_languages = Tibetan
|demonym = Tibetan
|capital = [[Lhasa]]
|largest_city = [[Lhasa]]
|government_type = [[w:Absolute monarchy|Absolute monarchy]]
|leader_title1 = Khaganate
|leader_name1 = Jaden the Great
|area_rank = 2nd <!--Demographic Yearbook 1.-->
|area_km2 = 2,500,000
|area_sq_mi = 970,000 <!--Do not remove per [[WP:MOSNUM]]-->
}}
The '''Khaganate of Tibet''' (Tibetan: ཁགནཏེཨོཕ༹་ཏིབེཏ), or simply '''Tibet''', is a country located in East Asia, and modern-day Western China.
It was founded in 621 AD, tracing its roots to the Yarlung dynasty’s expansion, forming the Khaganate. After a harsh period of decline in the nation, and after Langdarma died, it left for a state of Interregnum, which Jaden the Great, sometimes known by his nickname Rgyalmi-dmangs (Tibetan: Person-king). Following his ascent to the throne, this halted the decline of the nation and gradually brought Tibet to a stable and prosperous nation.
To this day, it has global ties with many nations and is in the Imperial Alliance alongside the [[Spartan Empire]].
== History ==
==== Formation ====
Following the expansion of the Yarlung dynasty, the Khaganate formed. Around 838, there was a period of decline in the Khaganate. A couple years later, Langdarma took the throne, however died a year after his ascent to the throne of the nation. Because of this, there was a period of brief interregnum, before the eventual ascent to the throne of Jaden, or Rgyalmi-dmangs.
His idea was to make alliances with growing states, which allowed the Khaganate to grow with trade and improve its declining economy and state.
==== Alliances ====
Because of the decline, Tibet was able to rescue itself by becoming allies with local nations in the region, such as the [[Binbowien Empire]] and the [[Sundanese Empire]], aswell as maintaining good relations with the [[Spartan Empire]] before forming the Imperial Alliance.
==== Indo-Tibetan War ====
{{see also|Indo-Tibetan War}}
Following a top secret plan after a meeting with the leader of the Binbowien Empire and the Sundanese Empire, the Indo-Tibetan war was declared on the reasoning that the [[Indian Empire]] is a threat to the national security of Asia. Since then, there have been no changes to the current borders of all nations involved.
== References ==
964bdfd0d319150c4c1336a673044f42bc72062c
2116
2115
2023-09-15T01:56:52Z
Ilovethehitgameomori
2
wikitext
text/x-wiki
{{Infobox country
|conventional_long_name = '''Khaganate of Tibet'''
|common_name = Tibet
|image_flag = Tibet empire.jpeg
|alt_flag = Vertical tricolor (green, red, yellow) with a five-pointed gold star in the center of the red.
|official_languages = Tibetan
|demonym = Tibetan
|capital = [[Lhasa]]
|largest_city = [[Lhasa]]
|government_type = [[w:Absolute monarchy|Absolute monarchy]]
|leader_title1 = Khaganate
|leader_name1 = Jaden the Great
|area_rank = 2nd <!--Demographic Yearbook 1.-->
|area_km2 = 2,500,000
|area_sq_mi = 970,000 <!--Do not remove per [[WP:MOSNUM]]-->
}}
{{History of Tibet}}
The '''Khaganate of Tibet''' (Tibetan: ཁགནཏེཨོཕ༹་ཏིབེཏ), or simply '''Tibet''', is a country located in East Asia, and modern-day Western China.
It was founded in 621 AD, tracing its roots to the Yarlung dynasty’s expansion, forming the Khaganate. After a harsh period of decline in the nation, and after Langdarma died, it left for a state of Interregnum, which Jaden the Great, sometimes known by his nickname Rgyalmi-dmangs (Tibetan: Person-king). Following his ascent to the throne, this halted the decline of the nation and gradually brought Tibet to a stable and prosperous nation.
To this day, it has global ties with many nations and is in the Imperial Alliance alongside the [[Spartan Empire]].
== History ==
==== Formation ====
Following the expansion of the Yarlung dynasty, the Khaganate formed. Around 838, there was a period of decline in the Khaganate. A couple years later, Langdarma took the throne, however died a year after his ascent to the throne of the nation. Because of this, there was a period of brief interregnum, before the eventual ascent to the throne of Jaden, or Rgyalmi-dmangs.
His idea was to make alliances with growing states, which allowed the Khaganate to grow with trade and improve its declining economy and state.
==== Alliances ====
Because of the decline, Tibet was able to rescue itself by becoming allies with local nations in the region, such as the [[Binbowien Empire]] and the [[Sundanese Empire]], aswell as maintaining good relations with the [[Spartan Empire]] before forming the Imperial Alliance.
==== Indo-Tibetan War ====
{{see also|Indo-Tibetan War}}
Following a top secret plan after a meeting with the leader of the Binbowien Empire and the Sundanese Empire, the Indo-Tibetan war was declared on the reasoning that the [[Indian Empire]] is a threat to the national security of Asia. Since then, there have been no changes to the current borders of all nations involved.
== References ==
68d292822049d6e71697d151725a1576af7e8b30
Template:Infobox military conflict
10
1028
2118
2117
2023-09-15T01:58:50Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
<includeonly>{{#invoke:Infobox military conflict|main}}</includeonly><noinclude>{{documentation}}</noinclude>
d340eca466eb5d0a69c1f4ac57d0f34d306ed031
Template:Abbr
10
1029
2120
2119
2023-09-15T01:58:51Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
<abbr {{#if:{{{class|}}}|class="{{{class}}}"}} {{#if:{{{id|}}}|id="{{{id}}}"}} {{#if:{{{style|}}}|style="{{{style}}}"}} title="{{#tag:nowiki|{{#invoke:String|replace|{{{2|}}}|"|"}}}}">{{{1|}}}</abbr><noinclude>{{Documentation}}
</noinclude>
5fd53aa19ba927ce3eea9092a4fa31f881df0a6e
Template:Spaced en dash
10
1030
2122
2121
2023-09-15T01:58:57Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
– <noinclude>
{{documentation}}
<!-- Add categories and interwikis to the /doc subpage, not here! -->
</noinclude>
235afe8e7aca71d984c1bba5d8c96db414594b53
Template:Longitem
10
1031
2124
2123
2023-09-15T01:58:58Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
<noinclude>{{#tag: code|
</noinclude>{{#ifeq: {{{1|+}}} | {{{1|-}}} | <div style="}}display: inline-block; line-height: 1.2em; padding: .1em 0; {{#ifeq: {{{1|+}}} | {{{1|-}}} | {{{style|}}}">{{{1|}}}</div> | <includeonly>width: 100%;</includeonly> }}<includeonly>{{#if:{{{2|}}}|[[Category:Pages using Template:Longitem with unnamed style parameter]]}}</includeonly><noinclude>
|lang=wikitext}}
{{documentation}}
</noinclude>
2919b818deb36b243e9f9517917cbcfaa2c8d4ec
Template:MONTHNUMBER
10
1032
2126
2125
2023-09-15T01:58:59Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
<includeonly>{{#if:{{{1|}}}
|{{#switch:{{lc:{{{1}}}}}
|january|jan=1
|february|feb=2
|march|mar=3
|apr|april=4
|may=5
|june|jun=6
|july|jul=7
|august|aug=8
|september|sep|sept=9
|october|oct=10
|november|nov=11
|december|dec=12
|{{#ifexpr:{{{1}}}<0
|{{#ifexpr:(({{{1}}})round 0)!=({{{1}}})
|{{#expr:12-(((0.5-({{{1}}}))round 0)mod 12)}}
|{{#expr:12-(((11.5-({{{1}}}))round 0)mod 12)}}
}}
|{{#expr:(((10.5+{{{1}}})round 0)mod 12)+1}}
}}
}}
|Missing required parameter 1=''month''!
}}</includeonly><noinclude>
{{Documentation}}
<!-- Add categories and interwikis to the /doc subpage, not here! -->
</noinclude>
c2ade663b96231e493986cd17b454923da290098
Template:MONTHNAME
10
1033
2128
2127
2023-09-15T01:59:00Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
<includeonly>{{#if:{{{1|}}}|{{#switch:{{MONTHNUMBER|{{{1}}}}}|1=January|2=February|3=March|4=April|5=May|6=June|7=July|8=August|9=September|10=October|11=November|12=December|Incorrect required parameter 1=''month''!}}|Missing required parameter 1=''month''!}}</includeonly><noinclude>
{{Documentation}}
<!-- Add categories and interwikis to the /doc subpage, not here! -->
</noinclude>
25327282f70efd1189b70245a0e23509f3bb65e6
Template:Flag
10
1034
2130
2129
2023-09-15T01:59:03Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{country data {{{1|}}}|flag/core|name={{{name|{{{1|}}}}}}|variant={{{variant|{{{2|}}}}}}|size={{{size|}}}}}<noinclude>{{documentation}}</noinclude>
d13aac8e23bee030a6fc9b49a8aa1135104ace22
Template:Flag/core
10
1035
2132
2131
2023-09-15T01:59:04Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
<span class="flagicon">[[File:{{{flag alias-{{{variant}}}|{{#if:{{{flag alias|}}}|{{{flag alias}}}|Flag placeholder.svg}}}}}|{{#if:{{{size|}}}|{{{size}}}|{{{size flag alias-{{{variant}}}|{{#if:{{{variant|}}}|23x15px|{{{size flag alias|23x15px}}}}}}}}}}|{{{border-{{{variant}}}|{{{border|border}}}}}} |alt=|link=]] {{#switch:{{{flag alias}}}|Flag of Switzerland.svg|Flag of the Vatican City.svg|Flag of Switzerland (Pantone).svg|Flag of Vatican City State - 2023 version.svg= }}{{#ifeq:{{{alias}}}|Nepal| }}</span>[[{{{alias}}}|{{{name}}}]]<noinclude>{{documentation}}</noinclude>
0714064913bcc5abd9dae55d4fb50f52965eef35
Template:Flagicon image
10
1036
2134
2133
2023-09-15T01:59:05Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
<span class="flagicon">[[File:{{#if:{{{1|}}}|{{{1}}}|Flag placeholder.svg}}|{{{size|23x15px}}}|{{{border|{{#if:{{{1|}}}|border}}}}} |alt=|link={{{link|}}}]]</span><noinclude>{{documentation}}</noinclude>
057d0b94a9367359ad010c3da1fcdcb1e880dcb5
Module:Location map
828
1037
2136
2135
2023-09-15T01:59:07Z
Ilovethehitgameomori
2
1 revision imported
Scribunto
text/plain
require('strict')
local p = {}
local getArgs = require('Module:Arguments').getArgs
local function round(n, decimals)
local pow = 10^(decimals or 0)
return math.floor(n * pow + 0.5) / pow
end
function p.getMapParams(map, frame)
if not map then
error('The name of the location map definition to use must be specified', 2)
end
local moduletitle = mw.title.new('Module:Location map/data/' .. map)
if not moduletitle then
error(string.format('%q is not a valid name for a location map definition', map), 2)
elseif moduletitle.exists then
local mapData = mw.loadData('Module:Location map/data/' .. map)
return function(name, params)
if name == nil then
return 'Module:Location map/data/' .. map
elseif mapData[name] == nil then
return ''
elseif params then
return mw.message.newRawMessage(tostring(mapData[name]), unpack(params)):plain()
else
return mapData[name]
end
end
else
error('Unable to find the specified location map definition: "Module:Location map/data/' .. map .. '" does not exist', 2)
end
end
function p.data(frame, args, map)
if not args then
args = getArgs(frame, {frameOnly = true})
end
if not map then
map = p.getMapParams(args[1], frame)
end
local params = {}
for k,v in ipairs(args) do
if k > 2 then
params[k-2] = v
end
end
return map(args[2], #params ~= 0 and params)
end
local hemisphereMultipliers = {
longitude = { W = -1, w = -1, E = 1, e = 1 },
latitude = { S = -1, s = -1, N = 1, n = 1 }
}
local function decdeg(degrees, minutes, seconds, hemisphere, decimal, direction)
if decimal then
if degrees then
error('Decimal and DMS degrees cannot both be provided for ' .. direction, 2)
elseif minutes then
error('Minutes can only be provided with DMS degrees for ' .. direction, 2)
elseif seconds then
error('Seconds can only be provided with DMS degrees for ' .. direction, 2)
elseif hemisphere then
error('A hemisphere can only be provided with DMS degrees for ' .. direction, 2)
end
local retval = tonumber(decimal)
if retval then
return retval
end
error('The value "' .. decimal .. '" provided for ' .. direction .. ' is not valid', 2)
elseif seconds and not minutes then
error('Seconds were provided for ' .. direction .. ' without minutes also being provided', 2)
elseif not degrees then
if minutes then
error('Minutes were provided for ' .. direction .. ' without degrees also being provided', 2)
elseif hemisphere then
error('A hemisphere was provided for ' .. direction .. ' without degrees also being provided', 2)
end
return nil
end
decimal = tonumber(degrees)
if not decimal then
error('The degree value "' .. degrees .. '" provided for ' .. direction .. ' is not valid', 2)
elseif minutes and not tonumber(minutes) then
error('The minute value "' .. minutes .. '" provided for ' .. direction .. ' is not valid', 2)
elseif seconds and not tonumber(seconds) then
error('The second value "' .. seconds .. '" provided for ' .. direction .. ' is not valid', 2)
end
decimal = decimal + (minutes or 0)/60 + (seconds or 0)/3600
if hemisphere then
local multiplier = hemisphereMultipliers[direction][hemisphere]
if not multiplier then
error('The hemisphere "' .. hemisphere .. '" provided for ' .. direction .. ' is not valid', 2)
end
decimal = decimal * multiplier
end
return decimal
end
-- Finds a parameter in a transclusion of {{Coord}}.
local function coord2text(para,coord) -- this should be changed for languages which do not use Arabic numerals or the degree sign
local lat, long = mw.ustring.match(coord,'<span class="p%-latitude latitude">([^<]+)</span><span class="p%-longitude longitude">([^<]+)</span>')
if lat then
return tonumber(para == 'longitude' and long or lat)
end
local result = mw.text.split(mw.ustring.match(coord,'%-?[%.%d]+°[NS] %-?[%.%d]+°[EW]') or '', '[ °]')
if para == 'longitude' then result = {result[3], result[4]} end
if not tonumber(result[1]) or not result[2] then
mw.log('Malformed coordinates value')
mw.logObject(para, 'para')
mw.logObject(coord, 'coord')
return error('Malformed coordinates value', 2)
end
return tonumber(result[1]) * hemisphereMultipliers[para][result[2]]
end
-- effectively make removeBlanks false for caption and maplink, and true for everything else
-- if useWikidata is present but blank, convert it to false instead of nil
-- p.top, p.bottom, and their callers need to use this
function p.valueFunc(key, value)
if value then
value = mw.text.trim(value)
end
if value ~= '' or key == 'caption' or key == 'maplink' then
return value
elseif key == 'useWikidata' then
return false
end
end
local function getContainerImage(args, map)
if args.AlternativeMap then
return args.AlternativeMap
elseif args.relief and map('image1') ~= '' then
return map('image1')
else
return map('image')
end
end
function p.top(frame, args, map)
if not args then
args = getArgs(frame, {frameOnly = true, valueFunc = p.valueFunc})
end
if not map then
map = p.getMapParams(args[1], frame)
end
local width
local default_as_number = tonumber(mw.ustring.match(tostring(args.default_width),"%d*"))
if not args.width then
width = round((default_as_number or 240) * (tonumber(map('defaultscale')) or 1))
elseif mw.ustring.sub(args.width, -2) == 'px' then
width = mw.ustring.sub(args.width, 1, -3)
else
width = args.width
end
local width_as_number = tonumber(mw.ustring.match(tostring(width),"%d*")) or 0;
if width_as_number == 0 then
-- check to see if width is junk. If it is, then use default calculation
width = round((default_as_number or 240) * (tonumber(map('defaultscale')) or 1))
width_as_number = tonumber(mw.ustring.match(tostring(width),"%d*")) or 0;
end
if args.max_width ~= "" and args.max_width ~= nil then
-- check to see if width bigger than max_width
local max_as_number = tonumber(mw.ustring.match(args.max_width,"%d*")) or 0;
if width_as_number>max_as_number and max_as_number>0 then
width = args.max_width;
end
end
local retval = frame:extensionTag{name = 'templatestyles', args = {src = 'Module:Location map/styles.css'}}
if args.float == 'center' then
retval = retval .. '<div class="center">'
end
if args.caption and args.caption ~= '' and args.border ~= 'infobox' then
retval = retval .. '<div class="locmap noviewer noresize thumb '
if args.float == '"left"' or args.float == 'left' then
retval = retval .. 'tleft'
elseif args.float == '"center"' or args.float == 'center' or args.float == '"none"' or args.float == 'none' then
retval = retval .. 'tnone'
else
retval = retval .. 'tright'
end
retval = retval .. '"><div class="thumbinner" style="width:' .. (width + 2) .. 'px'
if args.border == 'none' then
retval = retval .. ';border:none'
elseif args.border then
retval = retval .. ';border-color:' .. args.border
end
retval = retval .. '"><div style="position:relative;width:' .. width .. 'px' .. (args.border ~= 'none' and ';border:1px solid lightgray">' or '">')
else
retval = retval .. '<div class="locmap" style="width:' .. width .. 'px;'
if args.float == '"left"' or args.float == 'left' then
retval = retval .. 'float:left;clear:left'
elseif args.float == '"center"' or args.float == 'center' then
retval = retval .. 'float:none;clear:both;margin-left:auto;margin-right:auto'
elseif args.float == '"none"' or args.float == 'none' then
retval = retval .. 'float:none;clear:none'
else
retval = retval .. 'float:right;clear:right'
end
retval = retval .. '"><div style="width:' .. width .. 'px;padding:0"><div style="position:relative;width:' .. width .. 'px">'
end
local image = getContainerImage(args, map)
local currentTitle = mw.title.getCurrentTitle()
retval = string.format(
'%s[[File:%s|%spx|%s%s|class=notpageimage]]',
retval,
image,
width,
args.alt or ((args.label or currentTitle.text) .. ' is located in ' .. map('name')),
args.maplink and ('|link=' .. args.maplink) or ''
)
if args.caption and args.caption ~= '' then
if (currentTitle.namespace == 0) and mw.ustring.find(args.caption, '##') then
retval = retval .. '[[Category:Pages using location map with a double number sign in the caption]]'
end
end
if args.overlay_image then
return retval .. '<div style="position:absolute;top:0;left:0">[[File:' .. args.overlay_image .. '|' .. width .. 'px|class=notpageimage]]</div>'
else
return retval
end
end
function p.bottom(frame, args, map)
if not args then
args = getArgs(frame, {frameOnly = true, valueFunc = p.valueFunc})
end
if not map then
map = p.getMapParams(args[1], frame)
end
local retval = '</div>'
local currentTitle = mw.title.getCurrentTitle()
if not args.caption or args.border == 'infobox' then
if args.border then
retval = retval .. '<div style="padding-top:0.2em">'
else
retval = retval .. '<div style="font-size:91%;padding-top:3px">'
end
retval = retval
.. (args.caption or (args.label or currentTitle.text) .. ' (' .. map('name') .. ')')
.. '</div>'
elseif args.caption ~= '' then
-- This is not the pipe trick. We're creating a link with no text on purpose, so that CSS can give us a nice image
retval = retval .. '<div class="thumbcaption"><div class="magnify">[[:File:' .. getContainerImage(args, map) .. '|class=notpageimage| ]]</div>' .. args.caption .. '</div>'
end
if args.switcherLabel then
retval = retval .. '<span class="switcher-label" style="display:none">' .. args.switcherLabel .. '</span>'
elseif args.autoSwitcherLabel then
retval = retval .. '<span class="switcher-label" style="display:none">Show map of ' .. map('name') .. '</span>'
end
retval = retval .. '</div></div>'
if args.caption_undefined then
mw.log('Removed parameter caption_undefined used.')
local parent = frame:getParent()
if parent then
mw.log('Parent is ' .. parent:getTitle())
end
mw.logObject(args, 'args')
if currentTitle.namespace == 0 then
retval = retval .. '[[Category:Location maps with removed parameters|caption_undefined]]'
end
end
if map('skew') ~= '' or map('lat_skew') ~= '' or map('crosses180') ~= '' or map('type') ~= '' then
mw.log('Removed parameter used in map definition ' .. map())
if currentTitle.namespace == 0 then
local key = (map('skew') ~= '' and 'skew' or '') ..
(map('lat_skew') ~= '' and 'lat_skew' or '') ..
(map('crosses180') ~= '' and 'crosses180' or '') ..
(map('type') ~= '' and 'type' or '')
retval = retval .. '[[Category:Location maps with removed parameters|' .. key .. ' ]]'
end
end
if string.find(map('name'), '|', 1, true) then
mw.log('Pipe used in name of map definition ' .. map())
if currentTitle.namespace == 0 then
retval = retval .. '[[Category:Location maps with a name containing a pipe]]'
end
end
if args.float == 'center' then
retval = retval .. '</div>'
end
return retval
end
local function markOuterDiv(x, y, imageDiv, labelDiv)
return mw.html.create('div')
:addClass('od')
:cssText('top:' .. round(y, 3) .. '%;left:' .. round(x, 3) .. '%')
:node(imageDiv)
:node(labelDiv)
end
local function markImageDiv(mark, marksize, label, link, alt, title)
local builder = mw.html.create('div')
:addClass('id')
:cssText('left:-' .. round(marksize / 2) .. 'px;top:-' .. round(marksize / 2) .. 'px')
:attr('title', title)
if marksize ~= 0 then
builder:wikitext(string.format(
'[[File:%s|%dx%dpx|%s|link=%s%s|class=notpageimage]]',
mark,
marksize,
marksize,
label,
link,
alt and ('|alt=' .. alt) or ''
))
end
return builder
end
local function markLabelDiv(label, label_size, label_width, position, background, x, marksize)
if tonumber(label_size) == 0 then
return mw.html.create('div'):addClass('l0'):wikitext(label)
end
local builder = mw.html.create('div')
:cssText('font-size:' .. label_size .. '%;width:' .. label_width .. 'em')
local distance = round(marksize / 2 + 1)
if position == 'top' then -- specified top
builder:addClass('pv'):cssText('bottom:' .. distance .. 'px;left:' .. (-label_width / 2) .. 'em')
elseif position == 'bottom' then -- specified bottom
builder:addClass('pv'):cssText('top:' .. distance .. 'px;left:' .. (-label_width / 2) .. 'em')
elseif position == 'left' or (tonumber(x) > 70 and position ~= 'right') then -- specified left or autodetected to left
builder:addClass('pl'):cssText('right:' .. distance .. 'px')
else -- specified right or autodetected to right
builder:addClass('pr'):cssText('left:' .. distance .. 'px')
end
builder = builder:tag('div')
:wikitext(label)
if background then
builder:cssText('background-color:' .. background)
end
return builder:done()
end
local function getX(longitude, left, right)
local width = (right - left) % 360
if width == 0 then
width = 360
end
local distanceFromLeft = (longitude - left) % 360
-- the distance needed past the map to the right equals distanceFromLeft - width. the distance needed past the map to the left equals 360 - distanceFromLeft. to minimize page stretching, go whichever way is shorter
if distanceFromLeft - width / 2 >= 180 then
distanceFromLeft = distanceFromLeft - 360
end
return 100 * distanceFromLeft / width
end
local function getY(latitude, top, bottom)
return 100 * (top - latitude) / (top - bottom)
end
function p.mark(frame, args, map)
if not args then
args = getArgs(frame, {wrappers = 'Template:Location map~'})
end
local mapnames = {}
if not map then
if args[1] then
map = {}
for mapname in mw.text.gsplit(args[1], '#', true) do
map[#map + 1] = p.getMapParams(mw.ustring.gsub(mapname, '^%s*(.-)%s*$', '%1'), frame)
mapnames[#mapnames + 1] = mapname
end
if #map == 1 then map = map[1] end
else
map = p.getMapParams('World', frame)
args[1] = 'World'
end
end
if type(map) == 'table' then
local outputs = {}
local oldargs = args[1]
for k,v in ipairs(map) do
args[1] = mapnames[k]
outputs[k] = tostring(p.mark(frame, args, v))
end
args[1] = oldargs
return table.concat(outputs, '#PlaceList#') .. '#PlaceList#'
end
local x, y, longitude, latitude
longitude = decdeg(args.lon_deg, args.lon_min, args.lon_sec, args.lon_dir, args.long, 'longitude')
latitude = decdeg(args.lat_deg, args.lat_min, args.lat_sec, args.lat_dir, args.lat, 'latitude')
if args.excludefrom then
-- If this mark is to be excluded from certain maps entirely (useful in the context of multiple maps)
for exclusionmap in mw.text.gsplit(args.excludefrom, '#', true) do
-- Check if this map is excluded. If so, return an empty string.
if args[1] == exclusionmap then
return ''
end
end
end
local builder = mw.html.create()
local currentTitle = mw.title.getCurrentTitle()
if args.coordinates then
-- Temporarily removed to facilitate infobox conversion. See [[Wikipedia:Coordinates in infoboxes]]
-- if longitude or latitude then
-- error('Coordinates from [[Module:Coordinates]] and individual coordinates cannot both be provided')
-- end
longitude = coord2text('longitude', args.coordinates)
latitude = coord2text('latitude', args.coordinates)
elseif not longitude and not latitude and args.useWikidata then
-- If they didn't provide either coordinate, try Wikidata. If they provided one but not the other, don't.
local entity = mw.wikibase.getEntity()
if entity and entity.claims and entity.claims.P625 and entity.claims.P625[1].mainsnak.snaktype == 'value' then
local value = entity.claims.P625[1].mainsnak.datavalue.value
longitude, latitude = value.longitude, value.latitude
end
if args.link and (currentTitle.namespace == 0) then
builder:wikitext('[[Category:Location maps with linked markers with coordinates from Wikidata]]')
end
end
if not longitude then
error('No value was provided for longitude')
elseif not latitude then
error('No value was provided for latitude')
end
if currentTitle.namespace > 0 then
if (not args.lon_deg) ~= (not args.lat_deg) then
builder:wikitext('[[Category:Location maps with different longitude and latitude precisions|Degrees]]')
elseif (not args.lon_min) ~= (not args.lat_min) then
builder:wikitext('[[Category:Location maps with different longitude and latitude precisions|Minutes]]')
elseif (not args.lon_sec) ~= (not args.lat_sec) then
builder:wikitext('[[Category:Location maps with different longitude and latitude precisions|Seconds]]')
elseif (not args.lon_dir) ~= (not args.lat_dir) then
builder:wikitext('[[Category:Location maps with different longitude and latitude precisions|Hemisphere]]')
elseif (not args.long) ~= (not args.lat) then
builder:wikitext('[[Category:Location maps with different longitude and latitude precisions|Decimal]]')
end
end
if ((tonumber(args.lat_deg) or 0) < 0) and ((tonumber(args.lat_min) or 0) ~= 0 or (tonumber(args.lat_sec) or 0) ~= 0 or (args.lat_dir and args.lat_dir ~='')) then
builder:wikitext('[[Category:Location maps with negative degrees and minutes or seconds]]')
end
if ((tonumber(args.lon_deg) or 0) < 0) and ((tonumber(args.lon_min) or 0) ~= 0 or (tonumber(args.lon_sec) or 0) ~= 0 or (args.lon_dir and args.lon_dir ~= '')) then
builder:wikitext('[[Category:Location maps with negative degrees and minutes or seconds]]')
end
if (((tonumber(args.lat_min) or 0) < 0) or ((tonumber(args.lat_sec) or 0) < 0)) then
builder:wikitext('[[Category:Location maps with negative degrees and minutes or seconds]]')
end
if (((tonumber(args.lon_min) or 0) < 0) or ((tonumber(args.lon_sec) or 0) < 0)) then
builder:wikitext('[[Category:Location maps with negative degrees and minutes or seconds]]')
end
if args.skew or args.lon_shift or args.markhigh then
mw.log('Removed parameter used in invocation.')
local parent = frame:getParent()
if parent then
mw.log('Parent is ' .. parent:getTitle())
end
mw.logObject(args, 'args')
if currentTitle.namespace == 0 then
local key = (args.skew and 'skew' or '') ..
(args.lon_shift and 'lon_shift' or '') ..
(args.markhigh and 'markhigh' or '')
builder:wikitext('[[Category:Location maps with removed parameters|' .. key ..' ]]')
end
end
if map('x') ~= '' then
x = tonumber(mw.ext.ParserFunctions.expr(map('x', { latitude, longitude })))
else
x = tonumber(getX(longitude, map('left'), map('right')))
end
if map('y') ~= '' then
y = tonumber(mw.ext.ParserFunctions.expr(map('y', { latitude, longitude })))
else
y = tonumber(getY(latitude, map('top'), map('bottom')))
end
if (x < 0 or x > 100 or y < 0 or y > 100) and not args.outside then
mw.log('Mark placed outside map boundaries without outside flag set. x = ' .. x .. ', y = ' .. y)
local parent = frame:getParent()
if parent then
mw.log('Parent is ' .. parent:getTitle())
end
mw.logObject(args, 'args')
if currentTitle.namespace == 0 then
local key = currentTitle.prefixedText
builder:wikitext('[[Category:Location maps with marks outside map and outside parameter not set|' .. key .. ' ]]')
end
end
local mark = args.mark or map('mark')
if mark == '' then
mark = 'Red pog.svg'
end
local marksize = tonumber(args.marksize) or tonumber(map('marksize')) or 8
local imageDiv = markImageDiv(mark, marksize, args.label or mw.title.getCurrentTitle().text, args.link or '', args.alt, args[2])
local labelDiv
if args.label and args.position ~= 'none' then
labelDiv = markLabelDiv(args.label, args.label_size or 91, args.label_width or 6, args.position, args.background, x, marksize)
end
return builder:node(markOuterDiv(x, y, imageDiv, labelDiv))
end
local function switcherSeparate(s)
if s == nil then return {} end
local retval = {}
for i in string.gmatch(s .. '#', '([^#]*)#') do
i = mw.text.trim(i)
retval[#retval + 1] = (i ~= '' and i)
end
return retval
end
function p.main(frame, args, map)
local caption_list = {}
if not args then
args = getArgs(frame, {wrappers = 'Template:Location map', valueFunc = p.valueFunc})
end
if args.useWikidata == nil then
args.useWikidata = true
end
if not map then
if args[1] then
map = {}
for mapname in string.gmatch(args[1], '[^#]+') do
map[#map + 1] = p.getMapParams(mw.ustring.gsub(mapname, '^%s*(.-)%s*$', '%1'), frame)
end
if args['caption'] then
if args['caption'] == "" then
while #caption_list < #map do
caption_list[#caption_list + 1] = args['caption']
end
else
for caption in mw.text.gsplit(args['caption'], '##', true) do
caption_list[#caption_list + 1] = caption
end
end
end
if #map == 1 then map = map[1] end
else
map = p.getMapParams('World', frame)
end
end
if type(map) == 'table' then
local altmaps = switcherSeparate(args.AlternativeMap)
if #altmaps > #map then
error(string.format('%d AlternativeMaps were provided, but only %d maps were provided', #altmaps, #map))
end
local overlays = switcherSeparate(args.overlay_image)
if #overlays > #map then
error(string.format('%d overlay_images were provided, but only %d maps were provided', #overlays, #map))
end
if #caption_list > #map then
error(string.format('%d captions were provided, but only %d maps were provided', #caption_list, #map))
end
local outputs = {}
args.autoSwitcherLabel = true
for k,v in ipairs(map) do
args.AlternativeMap = altmaps[k]
args.overlay_image = overlays[k]
args.caption = caption_list[k]
outputs[k] = p.main(frame, args, v)
end
return '<div class="switcher-container">' .. table.concat(outputs) .. '</div>'
else
return p.top(frame, args, map) .. tostring( p.mark(frame, args, map) ) .. p.bottom(frame, args, map)
end
end
return p
7291f35931f7e18eb3de0e5668f94abf73d34135
Module:Location map/styles.css
828
1038
2138
2137
2023-09-15T01:59:08Z
Ilovethehitgameomori
2
1 revision imported
sanitized-css
text/css
/* {{pp|small=yes}} */
.locmap .od {
position: absolute;
}
.locmap .id {
position: absolute;
line-height: 0;
}
.locmap .l0 {
font-size: 0;
position: absolute;
}
.locmap .pv {
line-height: 110%;
position: absolute;
text-align: center;
}
.locmap .pl {
line-height: 110%;
position: absolute;
top: -0.75em;
text-align: right;
}
.locmap .pr {
line-height: 110%;
position: absolute;
top: -0.75em;
text-align: left;
}
.locmap .pv > div {
display: inline;
padding: 1px;
}
.locmap .pl > div {
display: inline; /* inline does not impact floated elements */
padding: 1px;
float: right;
}
.locmap .pr > div {
display: inline; /* inline does not impact floated elements */
padding: 1px;
float: left;
}
1af8c3b5ae1ff654548b74f76b5208f6b360c5a1
Template:Military navigation
10
1039
2140
2139
2023-09-15T01:59:09Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
<includeonly>{{#invoke:Military navigation|main}}</includeonly><noinclude>
{{Documentation|Wikipedia:WikiProject Military history/Military navigation}}
{{Sandbox other||
[[Category:Navigational box wrapper templates]]
[[Category:Military navigational boxes| ]]
}}</noinclude>
10eb2cd55540aab60dd8603c113e21995e9bb545
Template:WPMILHIST Infobox style
10
1040
2142
2141
2023-09-15T01:59:09Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
<includeonly>{{#switch:{{{1|}}}
|main_box=class="{{#if:{{{2|}}}|infobox {{{2}}}|infobox}}" style="{{#invoke:Data|Module:WPMILHIST Infobox style|main_box_raw}}"
|{{#invoke:Data|Module:WPMILHIST Infobox style|{{{1|}}}}}
}}</includeonly><noinclude>
{{documentation}}
</noinclude>
b117547056afc703e2f1371497b0a53fa5a22751
Module:Data
828
1041
2144
2143
2023-09-15T01:59:10Z
Ilovethehitgameomori
2
1 revision imported
Scribunto
text/plain
local mt = {}
function mt.__index(t, k)
return function(frame)
local data = mw.loadData(k)
local i = 1
for _,v in ipairs(frame.args) do
local ty = type(data)
if ty ~= 'table' then
local args = {}
for j = 1, i - 1 do
args[j] = frame.args[j]
end
if frame.args.softfail then
return '<span class="error">[[Category:Pages with failed Module:Data lookups]]Error: Tried to read index "' .. mw.text.nowiki(v) .. '" of mw.loadData("' .. mw.text.nowiki(k) .. '").' .. mw.text.nowiki(table.concat(args, '.')) .. ', which is a ' .. ty .. '</span>'
else
error('Tried to read index "' .. v .. '" of mw.loadData("' .. k .. '").' .. table.concat(args, '.') .. ', which is a ' .. ty)
end
end
data = data[v]
i = i + 1
end
return data
end
end
return setmetatable({}, mt)
654c5ba2e0c73e7415457ca7a67fe0dfacfdba3b
Module:Military navigation
828
1042
2146
2145
2023-09-15T01:59:10Z
Ilovethehitgameomori
2
1 revision imported
Scribunto
text/plain
local p = { }
local Navbox = require('Module:Navbox')
local Styles = require('Module:WPMILHIST Infobox style')
local function isblank(s)
return (not s) or s == ''
end
local function isnotblank(s)
return s and s ~= ''
end
function p.main(frame)
local args = { }
local pargs = frame:getParent().args
local sargs = {}
local tcats = ''
-- process bodystyle and titlestyle
if (pargs['style'] or '') == 'wide' then
args['titlestyle'] = Styles['nav_box_wide_header']
args['bodystyle'] = Styles['nav_box_wide']
else
args['titlestyle'] = Styles['nav_box_header']
if (pargs['border'] or '') == 'child' or
(pargs['border'] or '') == 'subgroup' then
args['bodystyle'] = Styles['nav_box_child']
tcats = tcats .. '[[Category:Pages using military navigation subgroups without wide style]]'
else
args['bodystyle'] = Styles['nav_box']
end
end
sargs['titlestyle'] = 1
sargs['bodystyle'] = 1
-- process groupstyle, abovestyle, belowstyle
args['groupstyle'] = Styles['nav_box_label'] .. (pargs['groupstyle'] or '')
sargs['groupstyle'] = 1
args['abovestyle'] = Styles['nav_box_label'] .. (pargs['abovestyle'] or '')
sargs['abovestyle'] = 1
args['belowstyle'] = Styles['nav_box_label'] .. (pargs['belowstyle'] or '')
sargs['belowstyle'] = 1
-- process oddstyle, evenstyle
args['oddstyle'] = isnotblank(pargs['odd_color'])
and ('background:' .. pargs['odd_color']) or nil
sargs['oddstyle'] = 1
args['evenstyle'] = isnotblank(pargs['even_color'])
and ('background:' .. pargs['even_color']) or nil
sargs['evenstyle'] = 1
-- process name and rawname
args['name'] = (isnotblank(pargs['name']) and pargs['name']) or pargs['rawname']
if isblank(args['name']) then args['navbar'] = 'plain' end
sargs['name'] = 1
sargs['rawname'] = 1
-- copy the remaining args
for k, v in pairs(pargs) do
if v and v ~= '' and sargs[k] == nil then
args[k] = v
end
end
-- add allow wrap
if args['title'] and (pargs['style'] or '') ~= 'wide' then
if not mw.ustring.match(args['title'], '<span class="wrap">') then
-- probably a more efficient way to match 15 or more characters
local m = '[^%[%]<>|][^%[%]<>|][^%[%]<>|][^%[%]<>|][^%[%]<>|]'
m = m .. m .. m
args['title'] = mw.ustring.gsub(args['title'],
'%[%[(' .. m .. '[^%[%]<>|]*)%]%]',
'[[%1|<span class="wrap">%1</span>]]')
args['title'] = mw.ustring.gsub(args['title'],
'%[%[([^%[%]<>|]*)|(' .. m .. '[^%[%]<>|]*)%]%]',
'[[%1|<span class="wrap">%2</span>]]')
end
end
-- add navbox-vertical for non-wide format
if (pargs['style'] or '') ~= 'wide' then
args['bodyclass'] = 'navbox-vertical' .. (args['bodyclass'] and (' ' .. args['bodyclass']) or '')
end
return tcats .. Navbox._navbox(args)
end
return p
26dd1b8952c65fbc4d05e418e8d7c3daed93fa49
Module:WPMILHIST Infobox style
828
1043
2148
2147
2023-09-15T01:59:11Z
Ilovethehitgameomori
2
1 revision imported
Scribunto
text/plain
local retval = {
main_box_raw_auto_width = 'border-spacing:2px;',
header_raw = 'background-color:#C3D6EF;text-align:center;vertical-align:middle;font-size:110%;',
sub_header_raw = 'background-color:#DCDCDC;text-align:center;vertical-align:middle;',
header_color = 'background-color:#C3D6EF;',
nav_box = 'margin:0;float:right;clear:right;width:25.5em;margin-bottom:0.5em;margin-left:1em;',
nav_box_child = 'margin:0;float:right;clear:right;width:25em;margin-bottom:0.5em;',
nav_box_wide = '',
nav_box_header = 'background-color:#C3D6EF;',
nav_box_wide_header = 'background-color:#C3D6EF;',
nav_box_label = 'background-color:#DCDCDC;',
image_box_raw = 'text-align:center;border-bottom:1px solid #aaa;line-height:1.5em;',
image_box_plain_raw = 'text-align:center;line-height:1.5em;',
internal_border = '1px dotted #aaa;',
section_border = '1px solid #aaa;'
}
retval.main_box_raw = 'width:25.5em;' .. retval.main_box_raw_auto_width
retval.header_bar = 'style="' .. retval.header_raw .. '"'
retval.sub_header_bar = 'style="' .. retval.sub_header_raw .. '"'
retval.image_box = 'style="' .. retval.image_box_raw .. '"'
retval.image_box_plain = 'style="' .. retval.image_box_plain_raw .. '"'
return retval
0f9ea47bc17e40cdabbae6de54f63e40ae502f8e
Template:Wrap
10
1044
2150
2149
2023-09-15T01:59:11Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
<includeonly><span class="wrap">{{{1| }}}</span></includeonly><noinclude>
{{documentation}}
<!-- Add categories to the /doc subpage, not here! -->
</noinclude>
aa85f77c2939e3f50fa04a160b08510cf331ee11
Template:Start date
10
1045
2152
2151
2023-09-15T01:59:11Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
<includeonly>{{#if: {{{4|}}}
|{{#if: {{{5|}}}
|{{padleft:{{{4}}}|2|0}}:{{padleft:{{{5}}}|2|0}}{{#if: {{{6|}}}
|:{{padleft:{{{6}}}|2|0}} }}, }} }}<!--ABOVE FOR TIME; BELOW FOR DATE
-->{{#if: {{{1|}}}
|{{#if: {{{2|}}}
|{{#if: {{{3|}}}
|{{#if: {{{df|}}}|{{#expr:{{{3}}}}} {{MONTHNAME|{{{2}}}}}|{{MONTHNAME|{{{2}}}}} {{#expr:{{{3}}}}},}} {{{1}}}|{{MONTHNAME|{{{2}}}}} {{{1}}}}}|{{{1}}}}}}}{{#if: {{{7|}}}
| ({{#ifeq: {{{7}}}|Z|UTC|{{{7}}}}})}}<!-- BELOW FOR hCalendar
--><span style="display:none"> (<span class="bday dtstart published updated">{{#if: {{{1|}}}
| {{{1}}}{{#if: {{{2|}}}
| -{{padleft:{{{2}}}|2|0}}{{#if: {{{3|}}}
| -{{padleft:{{{3}}}|2|0}} }} }}<!--
-->{{#if: {{{4|}}}
| T{{padleft:{{{4}}}|2|0}}{{#if: {{{5|}}}
| :{{padleft:{{{5}}}|2|0}}{{#if: {{{6|}}}
| :{{padleft:{{{6}}}|2|0}} }} }} }} }}{{{7|}}}</span>)</span></includeonly><noinclude>
{{documentation}}
</noinclude>
2bdc464c20f7d568f3d482c9fb2d04f5d266f982
Template:Spaced ndash
10
1046
2154
2153
2023-09-15T01:59:12Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
#REDIRECT [[Template:Spaced en dash]]
{{R from move}}
943ce837a48a4907650d7398e8d10271b21dde62
Template:KIA
10
1047
2156
2155
2023-09-15T01:59:15Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
[[<!---(link:)-->{{{1|Killed in action}}}<!--
-->|<!--(label:)-->{{#ifeq:{{{alt|}}}|yes |(KIA) |<span style="font-family:'Times New Roman','Old English Text MT',serif">{{#ifeq:{{{bold|}}}|no |† |'''†'''}}</span>}}<!--
-->]]<noinclude>
{{Documentation}}
</noinclude>
40db638380717ea2f21d23962d35f009deec5b20
Template:Campaignbox
10
1048
2158
2157
2023-09-15T01:59:15Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
<includeonly>{{Military navigation
|name = {{#if:{{{raw_name|}}} |{{{raw_name|}}} |{{#if:{{{title|}}} |{{{name|}}} |}} }}
|state = {{{state|}}}
|border = {{{border|}}}
|title = <span style="line-height:1.6em">{{#if:{{{title|}}}|{{{title}}}|{{{name}}}}}</span>
|bodyclass = {{{bodyclass|}}}
|listclass = {{{listclass|}}}
|list1 = {{{battles|}}}
|below = {{{notes|}}}
}}{{#ifeq:{{NAMESPACE}}|Template|[[Category:Campaignbox templates]]}}</includeonly><noinclude>
{{documentation}}
</noinclude>
bd5acf07aa1526d63d10975ff20fe9d70de2f838
Module:Infobox military conflict
828
1049
2160
2159
2023-09-15T01:59:16Z
Ilovethehitgameomori
2
1 revision imported
Scribunto
text/plain
require('strict')
local infoboxStyle = mw.loadData('Module:WPMILHIST Infobox style')
local templatestyles = 'Module:Infobox military conflict/styles.css'
local IMC = {}
IMC.__index = IMC
function IMC:renderPerCombatant(builder, headerText, prefix, suffix)
prefix = prefix or ''
suffix = suffix or ''
local colspans = {}
-- This may result in colspans[1] getting set twice, but
-- this is no big deal. The second set will be correct.
local lastCombatant = 1
for i = 1,self.combatants do
if self.args[prefix .. i .. suffix] then
colspans[lastCombatant] = i - lastCombatant
lastCombatant = i
end
end
local jointText = self.args[prefix .. (self.combatants + 1) .. suffix]
if headerText and (colspans[1] or jointText) then
builder:tag('tr')
:tag('th')
:attr('colspan', self.combatants)
:cssText(infoboxStyle.header_raw)
:wikitext(headerText)
end
-- The only time colspans[1] wouldn't be set is if no
-- combatant has a field with the given prefix and suffix.
if colspans[1] then
-- Since each found argument set the colspan for the previous
-- one, the final one wasn't set above, so set it now.
colspans[lastCombatant] = self.combatants - lastCombatant + 1
builder = builder:tag('tr')
for i = 1,self.combatants do
-- At this point, colspans[i] will be set for i=1 unconditionally, and for
-- any other value of i where self.args[prefix .. i .. suffix] is set.
if colspans[i] then
builder:tag('td')
-- don't bother emitting colspan="1"
:attr('colspan', colspans[i] ~= 1 and colspans[i] or nil)
:css('width', math.floor(100 / self.combatants * colspans[i] + 0.5) .. '%')
-- no border on the right of the rightmost column
:css('border-right', i ~= lastCombatant and infoboxStyle.internal_border or nil)
-- no padding on the left of the leftmost column
:css('padding-left', i ~= 1 and '0.25em' or nil)
-- don't show the border if we're directly under a header
:css('border-top', not headerText and infoboxStyle.internal_border or nil)
:newline()
:wikitext(self.args[prefix .. i .. suffix])
end
end
end
if jointText then
builder:tag('tr')
:tag('td')
:attr('colspan', self.combatants)
:css('text-align', 'center')
-- don't show the border if we're directly under a header
:css('border-top', (not headerText or colspans[1]) and infoboxStyle.internal_border or nil)
:newline()
:wikitext(jointText)
end
end
function IMC:renderHeaderTable(builder)
builder = builder:tag('table')
:css('width', '100%')
:css('margin', 0)
:css('padding', 0)
:css('border', 0)
:css('display', 'inline-table')
if self.args.date then
builder:tag('tr')
:tag('th')
:css('padding-right', '1em')
:wikitext('Date')
:done()
:tag('td')
:wikitext(self.args.date)
end
builder = builder:tag('tr')
:tag('th')
:css('padding-right', '1em')
:wikitext('Location')
:done()
:tag('td')
:tag('div')
:addClass('location')
:wikitext(self.args.place or '{{{place}}}') -- hack so that people who don't know Lua know that this parameter is required
:done()
if self.args.coordinates then
builder:wikitext(self.args.coordinates)
end
builder = builder:done():done()
-- only for "Putsch"
if self.args.action then
builder:tag('tr')
:tag('th')
:css('padding-right', '1em')
:wikitext(self.args.action and 'Action')
:done()
:tag('td')
:wikitext(self.args.action)
end
if self.args.status or self.args.result then
builder:tag('tr')
:tag('th')
:css('padding-right', '1em')
:wikitext(self.args.status and 'Status' or 'Result')
:done()
:tag('td')
:addClass('status')
:newline()
:wikitext(self.args.status or self.args.result)
end
if self.args.territory then
builder:tag('tr')
:tag('th')
:css('padding-right', '1em')
:wikitext('Territorial<br />changes')
:done()
:tag('td')
:newline()
:wikitext(self.args.territory)
end
end
function IMC:render()
local builder = mw.html.create()
if self.args.campaignbox then
-- this should be the same as using {{stack|clear=right|...}}
builder:wikitext(self.frame:expandTemplate{ title = 'stack begin', args = { clear='true'} })
end
builder = builder:tag('table')
:addClass('infobox vevent')
:cssText(infoboxStyle.main_box_raw)
:css('width', self.args.width or nil)
builder:tag('tr')
:tag('th')
:addClass('summary')
:attr('colspan', self.combatants)
:cssText(infoboxStyle.header_raw)
:wikitext(self.args.conflict or mw.title.getCurrentTitle().text)
if self.args.partof then
builder:tag('tr')
:tag('td')
:attr('colspan', self.combatants)
:cssText(infoboxStyle.sub_header_raw)
:wikitext('Part of ' .. self.args.partof)
end
if self.args.image then
builder:tag('tr')
:tag('td')
:attr('colspan', self.combatants)
:cssText(infoboxStyle.image_box_raw)
:wikitext(string.format('%s%s%s',
require('Module:InfoboxImage').InfoboxImage{args = {
image = self.args.image,
size = self.args.image_size,
sizedefault = 'frameless',
upright = 1,
alt = self.args.alt
}},
self.args.caption and '<br />' or '',
self.args.caption or ''
))
end
self:renderHeaderTable(builder:tag('tr'):tag('td'):attr('colspan', self.combatants))
self:renderPerCombatant(builder, self.args.combatants_header or 'Belligerents', 'combatant')
-- can be un-hardcoded once gerrit:165108 is merged
for _,v in ipairs{'a','b','c','d'} do
self:renderPerCombatant(builder, nil, 'combatant', v)
end
self:renderPerCombatant(builder, self.args.commanders_header or 'Commanders and leaders', 'commander')
for _,v in ipairs{'a','b','c','d'} do
self:renderPerCombatant(builder, nil, 'commander', v)
end
self:renderPerCombatant(builder, self.args.units_header or 'Units involved', 'units')
self:renderPerCombatant(builder, self.args.strengths_header or 'Strength', 'strength')
self:renderPerCombatant(builder, self.args.polstrengths_header or 'Political support', 'polstrength')
self:renderPerCombatant(builder, self.args.milstrengths_header or 'Military support', 'milstrength')
self:renderPerCombatant(builder, self.args.casualties_header or 'Casualties and losses', 'casualties')
if self.args.notes then
builder:tag('tr')
:tag('td')
:attr('colspan', self.combatants)
:css('border-top', infoboxStyle.section_border)
:newline()
:wikitext(self.args.notes)
end
if self.args.map_type then
builder:tag('tr')
:tag('td')
:attr('colspan', self.combatants)
:css('border-top', infoboxStyle.internal_border)
:node(require('Module:Location map').main(self.frame, {
self.args.map_type,
relief = self.args.map_relief,
coordinates = self.args.coordinates,
width = self.args.map_size or 220,
float = 'center',
border = 'none',
mark = self.args.map_mark,
marksize = self.args.map_marksize or 8,
label = self.args.map_label,
alt = self.args.map_alt,
caption = self.args.map_caption or ('Location within '
.. (require('Module:Location map').data(self.frame, {self.args.map_type, 'name'})))
}))
end
builder = builder:done()
if self.args.campaignbox then
builder = builder:done()
builder:wikitext(self.args.campaignbox .. self.frame:expandTemplate{ title = 'stack end'})
end
return builder
end
function IMC.new(frame, args)
if not args then
args = require('Module:Arguments').getArgs(frame, {wrappers = 'Template:Infobox military conflict'})
end
local obj = {
frame = frame,
args = args
}
-- until gerrit:165108 is merged, there's still a cap on combatants, but as soon as it merges, we can update this little bit of code to uncap it
-- also, don't try to make this more efficient, or references could be in the wrong order
obj.combatants = 2
for _,v in ipairs{'', 'a', 'b', 'c', 'd'} do
for i = 1,5 do
if args['combatant' .. i .. v] then
obj.combatants = math.max(obj.combatants, i)
end
end
end
return setmetatable(obj, IMC)
end
local p = {}
function p.main(frame)
return frame:extensionTag{ name = 'templatestyles', args = { src = templatestyles} } .. tostring(IMC.new(frame):render())
end
return p
737c5c2ab35460ae4165baecc4a140ed140cd602
Module:Infobox military conflict/styles.css
828
1050
2162
2161
2023-09-15T01:59:16Z
Ilovethehitgameomori
2
1 revision imported
sanitized-css
text/css
/* {{pp-template}} */
@media all and (min-width:720px) {
.desktop-float-right {
box-sizing: border-box;
float: right;
clear: right;
}
}
.infobox.vevent .status > p:first-child {
margin: 0;
}
1acb4afebca5f88c4679a397575d07b5de04407d
Template:Location map
10
1051
2164
2163
2023-09-15T01:59:17Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
<includeonly>{{#invoke:Location map|main}}</includeonly><noinclude>{{documentation}}</noinclude>
732416b8068d2dc3549db5aa5ffa786beb502886
Template:DOW
10
1052
2166
2165
2023-09-15T01:59:17Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
([[Killed in action|{{abbr|DOW|Died of wounds}}]])<noinclude>
<!-- Add categories and interwikis to the /doc subpage, not here! -->
{{Documentation}}
</noinclude>
a14551ef11993cd99ef9b8d4f781f0feaf2e7640
Template:Large
10
1053
2168
2167
2023-09-15T01:59:18Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
<span style="font-size:120%">{{{1}}}</span><noinclude>
{{Documentation}}
</noinclude>
8ba6ec8c3178e22dc1f05aa239df8a2b052be668
Template:Country data Holy Roman Empire
10
1054
2170
2169
2023-09-15T01:59:19Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{ {{{1<noinclude>|country showdata</noinclude>}}}
| alias = Holy Roman Empire
| flag alias = Banner of the Holy Roman Emperor (after 1400).svg
| flag alias-1200 = Flag of the Holy Roman Empire (1200-1350).svg
| flag alias-old = Heiliges Römisches Reich - Reichssturmfahne vor 1433.svg
| size = {{{size|}}}
| name = {{{name|}}}
| variant = {{{variant|}}}
<noinclude>
| var1 = 1200
| var2 = old
</noinclude>
}}
c24cc53598b544658ee4420e6aa0370eca6c4d78
Template:Blue
10
1055
2172
2171
2023-09-15T01:59:20Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
<span style="color:blue">{{{1}}}</span><noinclude>
<!-- Add categories and interwikis to the /doc subpage, not here! -->
{{Documentation}}</noinclude>
89f3353953a76d63c4ba5cd23af400b64ef178f4
Template:Dummy reference
10
1056
2174
2173
2023-09-15T01:59:20Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
<sup class="reference nowrap ltr" style="color:#002bb8;">[{{#ifeq:{{yes/no|{{{txtital|}}}}}|yes|<span style="font-style:italic">}}{{#if:{{{txtcol|}}}|<span style="color:{{{txtcol|}}}">}}{{{1|1}}}{{#if:{{{txtcol|}}}|</span>}}{{#ifeq:{{yes/no|{{{txtital|}}}}}|yes|</span>}}]</sup><noinclude>
{{documentation}}
</noinclude>
7be6798eb28af3f887fa775b50dc87e0c575cde9
Template:Fakeref
10
1057
2176
2175
2023-09-15T01:59:20Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
#REDIRECT [[Template:Dummy reference]]
c85c391fe2de3ebfd2154c56303a2085c57e9dd2
Template:Yes/no
10
1058
2178
2177
2023-09-15T01:59:21Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
#REDIRECT [[Template:Yesno]]
80e458cd4d851471d13896c26ecf96ce6dcdd579
Module:Location map/data/Earth
828
1059
2180
2179
2023-09-15T01:59:22Z
Ilovethehitgameomori
2
1 revision imported
Scribunto
text/plain
return {
name = 'Earth',
top = 90,
bottom = -90,
left = -180,
right = 180,
image = 'World location map (equirectangular 180).svg',
image1='World location map (equirectangular 180).svg'}
0c7a9c4349065ea43134d0a61037d31862f2a042
Template:Infobox military operation
10
1060
2182
2181
2023-09-15T01:59:23Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{infobox
|bodyclass = vevent
|bodystyle = {{WPMILHIST Infobox style|main_box_raw}}
|abovestyle = {{WPMILHIST Infobox style|header_raw}}
|aboveclass = summary
| headerstyle = {{WPMILHIST Infobox style|header_raw}}
|above = {{if empty|{{{title|}}}|{{{name|}}}|{{PAGENAMEBASE}}}}
|subheaderstyle = {{WPMILHIST Infobox style|sub_header_raw}}
|subheader = {{br separated entries|{{{subtitle|}}}|{{#if:{{{partof|}}}{{{conflict|}}}|Part of {{if empty|{{{conflict|}}}|{{{partof|}}}}} }}}}
|labelstyle = padding-right: 1em;
|imagestyle = {{WPMILHIST Infobox style|image_box_raw}}
|image = {{#invoke:InfoboxImage|InfoboxImage|image={{{image|}}}|size={{{image_size|}}}|upright={{{image_upright|1}}}|alt={{{alt|}}}}}
|caption = {{{caption|}}}
| label1 = {{#if:{{{scope|}}}|Operational scope|Type}}
| data1 = {{if empty|{{{scope|}}}|{{{type|}}}}}
| label2 = Location{{#if:{{{location2|}}}|s}}
| data2 = {{br separated entries
|1 = {{#if:{{{location|{{{place|}}}}}}|<div style="display:inline;" class="location">{{{location|{{{place|}}}}}}</div>}}
|2 = {{{coordinates|}}}
|3 = {{#if:{{{location2|}}}|<div style="display:inline;" class="location">{{{location2|}}}</div>}}
|4 = {{#if:{{{location2|}}}|{{{coordinates2|}}}}}
|5 = {{#if:{{{location3|}}}|<div style="display:inline;" class="location">{{{location3|}}}</div>}}
|6 = {{#if:{{{location3|}}}|{{{coordinates3|}}}}}
|7 = {{#if:{{{location4|}}}|<div style="display:inline;" class="location">{{{location4|}}}</div>}}
|8 = {{#if:{{{location4|}}}|{{{coordinates4|}}}}}
|9 = {{#if:{{{location5|}}}|<div style="display:inline;" class="location">{{{location5|}}}</div>}}
|10= {{#if:{{{location5|}}}|{{{coordinates5|}}}}}
|11= {{#if:{{{location6|}}}|<div style="display:inline;" class="location">{{{location6|}}}</div>}}
|12= {{#if:{{{location6|}}}|{{{coordinates6|}}}}}
|13= {{#if:{{{location7|}}}|<div style="display:inline;" class="location">{{{location7|}}}</div>}}
|14= {{#if:{{{location7|}}}|{{{coordinates7|}}}}}
|15= {{#if:{{{location8|}}}|<div style="display:inline;" class="location">{{{location8|}}}</div>}}
|16= {{#if:{{{location8|}}}|{{{coordinates8|}}}}}
|17= {{#if:{{{location9|}}}|<div style="display:inline;" class="location">{{{location9|}}}</div>}}
|18= {{#if:{{{location9|}}}|{{{coordinates9|}}}}}
|19= {{#if:{{{location10|}}}|<div style="display:inline;" class="location">{{{location10|}}}</div>}}
|20= {{#if:{{{location10|}}}|{{{coordinates10|}}}}}
}}
| label3 = Planned
| data3 = {{{planned|}}}
| label4 = Planned by
| data4 = {{{planned_by|}}}
| label5 = Commanded by
| data5 = {{{commanded_by|}}}
| label6 = {{#if:{{{target|}}}|Target|Objective}}
| data6 = {{if empty|{{{target|}}}|{{{objective|}}}}}
| label7 = Date
| data7 = {{br separated entries
|1 = {{if empty|{{{executed|}}}|{{{date|}}}}}
|2 = {{{time|}}}
|3 = {{#if:{{{time-begin|}}}|{{{time-begin}}} – {{{time-end|}}}}}
}} {{#if:{{{timezone|}}}|({{{timezone}}})}}
| label8 = Executed by
| data8 = {{if empty|{{{instigator|}}}|{{{executed_by|}}}}}
| label9 = Outcome
| data9 = {{{outcome|}}}
| label10 = Casualties
| data10 = {{if empty|{{{casualties|}}}|{{br separated entries
|1 = {{#if:{{{fatalities|}}}|{{{fatalities|}}} killed}}
|2 = {{#if:{{{injuries|}}}|{{{injuries|}}} injured}}
}} }}
| header27 = {{#if:{{{map_type|}}}|<nowiki />}}
| data28 = {{#if:{{{map_type|}}}|
{{#if:{{{coordinates2|}}}|
{{Location map many|{{{map_type}}}|coordinates1={{if empty|{{{map_coord|}}} | {{{coordinates|}}} }}|width={{{map_size|220}}}|float=center|border=infobox|label1={{{map_label|}}}|caption={{{map_caption|Location within {{#invoke:Location map|data|{{{map_type}}}|name}} }}}
|coordinates2={{{coordinates2|}}}|label2={{{map_label2|}}}
{{#if:{{{coordinates3|}}}|{{!}}coordinates3={{{coordinates3|}}}{{!}}label3={{{map_label3|}}} }}
{{#if:{{{coordinates4|}}}|{{!}}coordinates4={{{coordinates4|}}}{{!}}label4={{{map_label4|}}} }}
{{#if:{{{coordinates5|}}}|{{!}}coordinates5={{{coordinates5|}}}{{!}}label5={{{map_label5|}}} }}
{{#if:{{{coordinates6|}}}|{{!}}coordinates6={{{coordinates6|}}}{{!}}label6={{{map_label6|}}} }}
{{#if:{{{coordinates7|}}}|{{!}}coordinates7={{{coordinates7|}}}{{!}}label7={{{map_label7|}}} }}
{{#if:{{{coordinates8|}}}|{{!}}coordinates8={{{coordinates8|}}}{{!}}label8={{{map_label8|}}} }}
{{#if:{{{coordinates9|}}}|{{!}}coordinates9={{{coordinates9|}}}{{!}}label9={{{map_label9|}}} }}
{{#if:{{{coordinates10|}}}|{{!}}coordinates10={{{coordinates10|}}}{{!}}label10={{{map_label10|}}} }}
}}
|{{Location map|{{{map_type}}}|coordinates={{if empty|{{{map_coord|}}} | {{{coordinates|}}} }}|width={{{map_size|220}}}|float=center|border=infobox|label={{{map_label|}}}|caption={{{map_caption|Location within {{#invoke:Location map|data|{{{map_type}}}|name}} }}} }}
}}
}}
}}{{{campaignbox|}}}{{#invoke:Check for unknown parameters|check|unknown={{main other|[[Category:Pages using infobox military operation with unknown parameters|_VALUE_{{PAGENAME}}]]}}|preview=Page using [[Template:Infobox military operation]] with unknown parameter "_VALUE_"|ignoreblank=y| alt | campaignbox | caption | casualties | commanded_by | conflict | coordinates | date | executed | executed_by | fatalities | image | image_size | image_upright | injuries | instigator | location | map_caption | map_coord | map_label | map_size | map_type | name | objective | outcome | partof | planned | planned_by | scope | subtitle | target | time | time-begin | time-end | timezone | title | type | coordinates2 | coordinates3 | coordinates4 | coordinates5 | coordinates6 | coordinates7 | coordinates8 | coordinates9 | coordinates10 | map_label2 | map_label3 | map_label4 | map_label5 | map_label6 | map_label7 | map_label8 | map_label9 | map_label10 | location2 | location3 | location4 | location5 | location6 | location7 | location8 | location9 | location10 }}<noinclude>
{{template doc}}
</noinclude>
829164a43ec689efc952b0722e2406cf1185cf66
Template:Campaignbox Punic Wars
10
1061
2184
2183
2023-09-15T01:59:24Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{Campaignbox
| name = Campaignbox Punic Wars
| title = [[Punic Wars]]
| listclass = hlist
| battles =
* [[First Punic War|First]]
* [[Mercenary War|Mercenary]]
* [[Second Punic War|Second]]
* [[Third Punic War|Third]]
}}<noinclude>
[[Category:Punic Wars navigational boxes|Punic wars]]
</noinclude>
68f988c5de0f66decd657e0721bfd60f1b4c7798
Template:Country data Electorate of Saxony
10
1062
2186
2185
2023-09-15T01:59:25Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{ {{{1<noinclude>|country showdata</noinclude>}}}
| alias = Electorate of Saxony
| shortname alias = Saxony
| flag alias = Flag of Electoral Saxony.svg
| size = {{{size|}}}
| name = {{{name|}}}
<noinclude>
| related1 = Kingdom of Saxony
| related2 = Saxony
| cat = Saxony electorate
</noinclude>
}}
92d992249b05224909f6fc125f5b07f9889af451
Template:Campaignbox Second Punic War
10
1063
2188
2187
2023-09-15T01:59:26Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{Campaignbox
| name = Campaignbox Second Punic War
| title = [[Second Punic War|{{Wrap|Second Punic War}}]]
| listclass = hlist
| battles =
; Prelude
* [[Siege of Saguntum|Saguntum]]
* [[Battle of Rhone Crossing|Rhone]]
* [[Hannibal's crossing of the Alps|Crossing of the Alps]]
; Italy
* [[Battle of Ticinus|Ticinus]]
* [[Battle of the Trebia|Trebia]]
* [[Siege of Mutina (218 BC)|Mutina]]
* [[Battle of Placentia (217 BC)|Placentia]]
* [[Battle of Victumulae|Victumulae]]
* [[Battle of Lake Trasimene|Lake Trasimene]]
* [[Battle of Umbrian Lake|Umbrian Lake]]
* [[Hannibal's crossing of the Apennines|Crossing of the Apennines]]
* [[Battle of Ager Falernus|Ager Falernus]]
* [[Battle of Geronium|Geronium]]
* [[Battle of Cannae|Cannae]]
* [[Battle of Silva Litana|Silva Litana]]
* [[Battle of Nola (216 BC)|1st Nola]]
* [[Siege of Nuceria Alfaterna|Nuceria Alfaterna]]
* [[Siege of Casilinum (216–215 BC)|1st Casilinum]]
* [[Battle of Hamae|Hamae]]
* [[Siege of Petelia|1st Petelia]]
* [[Battle of Cumae (215 BC)|Cumae]]
* [[Battle of Nola (215 BC)|2nd Nola]]
* [[Battle of Beneventum (214 BC)|1st Beneventum]]
* [[Battle of Nola (214 BC)|3rd Nola]]
* [[Siege of Casilinum (214 BC)|2nd Casilinum]]
* [[Battle of Lucania|Lucania]]
* [[Siege of Arpi|Arpi]]
* [[Battle of Tarentum (212 BC)|1st Tarentum]]
* [[Battle of Beneventum (212 BC)|2nd Beneventum]]
* [[Battle of Campi Veteres|Campi Veteres]]
* [[Battle of Capua|1st Capua]]
* [[Battle of the Silarus|Silarus]]
* [[Battle of Herdonia (212 BC)|1st Herdonia]]
* [[Siege of Capua (211 BC)|2nd Capua]]
* [[Hannibal's raid to Rome|Rome]]
* [[Battle of Sapriportis|Sapriportis]]
* [[Battle of Herdonia (210 BC)|2nd Herdonia]]
* [[Battle of Numistro|Numistro]]
* [[Battle of Canusium|Canusium]]
* [[Siege of Manduria|Manduria]]
* [[Siege of Caulonia|Caulonia]]
* [[Battle of Tarentum (209 BC)|2nd Tarentum]]
* [[Battle of Locri (208 BC)|Locri]]
* [[Battle of Petelia|2nd Petelia]]
* [[Battle of Venusia|Venusia]]
* [[Battle of Grumentum|Grumentum]]
* [[Battle of the Metaurus|Metaurus]]
* [[Battle of Crotona|Crotona]]
* [[Battle of Insubria|Insubria]]
; Iberia
* [[Battle of Cissa|Cissa]]
* [[Battle of Ebro River|Ebro River]]
* [[Battle of Ibera|Ibera]]
* [[Siege of Illiturgis|Illiturgis]]
* [[Battle of Munda (214 BC)|Munda]]
* [[Battle of Orongi|Orongi]]
* [[Battle of the Upper Baetis|Upper Baetis]]
* [[Battle of New Carthage|1st New Carthage]]
* [[Battle of Baria|Baria]]
* [[Battle of Baecula|Baecula]]
* [[Battle of Ilipa|Ilipa]]
* [[Mutiny at Sucro|Sucro]]
* [[Battle of Carteia|1st Carteia]]
* [[Battle of Carteia (naval)|2nd Carteia]]
* [[Battle of Cartagena (206 BC)|2nd New Carthage]]
; Sicily and Sardinia
* [[Battle of Lilybaeum|Lilybaeum]]
* [[Capture of Malta (218 BC)|Malta]]
* [[Battle of Decimomannu|Decimomannu]]
* [[Battle of Leontini|Leontini]]
* [[Siege of Syracuse (213–212 BC)|Syracuse]]
* [[Battle of Himera (211 BC)|Himera]]
* [[Siege of Agrigentum (210 BC)|Agrigentum]]
; North Africa
* [[Siege of Utica (204 BC)|1st Utica]]
* [[Battle of Utica (203 BC)|2nd Utica]]
* [[Battle of the Great Plains|Great Plains]]
* [[Battle of Cirta|Cirta]]
* [[Battle of Zama|Zama]]
}}<noinclude>
[[Category:Punic Wars navigational boxes|Second Punic War]]
[[Category:Ancient Rome campaignbox templates|Campaign]]
</noinclude>
f3015ca66e7919fa2b20c4ea9e8e7f8fb1283732
Template:Microformat message
10
1064
2190
2189
2023-09-15T01:59:29Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
The [[Help:HTML in wikitext|HTML mark-up]] produced by this template includes {{#if:{{{type|}}} |{{{type}}} |an [[{{{format}}} microformat]]}} that makes {{{data}}} readily [[Parsing|parsable]] by computer programs. This aids tasks such as the cataloguing of articles and maintenance of databases. For more information about the use of microformats on Wikipedia, please visit [[Wikipedia:WikiProject Microformats|the Microformat WikiProject]].<!--
-->{{#if:{{{subtemplates<includeonly>|</includeonly>}}}
| <div style="margin-top:0.5em;margin-bottom:0.65em;">
; {{large|Subtemplates}}
{{{subtemplates}}}
'''''Please do not remove instances of these subtemplates.'''''
</div>}}<!--
-->{{#if:{{{subsection1|}}}
| <div style="margin-top:0.5em;margin-bottom:0.65em;"><!--(newline in case subsection begins with heading:)-->
{{{subsection1}}}
</div>}}<!--
-->{{#if:{{{1<includeonly>|</includeonly>}}} <!--(i.e. if at least one unnamed parameter supplied:)-->
| <div style="margin-top:0.5em;margin-bottom:0.65em;">
; {{large|Classes used}}
The [[HTML attribute|HTML class]]es of this microformat include:
: {{hlist
|item_style=font-size:110%;{{{itemstyle|}}}
|{{{1}}} |{{{2<includeonly>|</includeonly>}}} |{{{3|<noinclude>{{nobold|……}}</noinclude>}}}
|{{{4|}}} |{{{5|}}} |{{{6|}}} |{{{7|}}} |{{{8|}}} |{{{9|}}} |{{{10|}}} |{{{11|}}} |{{{12|}}} |{{{13|}}} |{{{14|}}} |{{{15|}}} |{{{16|}}} |{{{17|}}} |{{{18|}}} |{{{19|}}} |{{{20|}}}
}} </div>
{{longitem|style=line-height:1.3em|'''''Please do not rename or remove these classes{{#if:{{{nocollapse<includeonly>|</includeonly>}}} |<br/>nor collapse nested elements which use them}}.'''''}}<!--
-->}}<!--(end #if:[1])--><noinclude>
{{Documentation}}
</noinclude>
25d8c54d56c1c64f1b98e6c8b2a50054e6a9deb5
Template:UF-hcal
10
1065
2192
2191
2023-09-15T01:59:30Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{Microformat message
| format = hCalendar
| data = event details
| subtemplates =
{{#if:{{{hide_subtemplates}}} |<noinclude>}}
Dates will only be included if you use {{tl|start date}} (for single dates) or {{tl|end date}}. Do not, however, use these templates [[Wikipedia:WikiProject Microformats/dates|if a date before 1583 CE is involved]].
To include URLs, use {{tl|URL}}.
{{#if:{{{hide_subtemplates}}} |</noinclude>}}
|attendee |contact |description |dtend |dtstart |location |organiser |summary |url |vevent
| nocollapse = on
}}<includeonly>{{#ifeq:{{SUBPAGENAME}}|doc | |{{#ifeq:{{SUBPAGENAME}}|sandbox | |[[Category:Templates generating hCalendars|{{PAGENAME}}]]}} }}</includeonly><noinclude>
{{Documentation |content={{Microformat message templates}}}}
[[Category:Microformat (uF) message templates]]
</noinclude>
f453b47f676a5c474e14155f7013b69b4716748b
Template:Campaignbox/doc
10
1066
2194
2193
2023-09-15T01:59:32Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{#ifeq:{{{noheader|}}}|yes |
| {{Documentation subpage}}
{{Template display|nomobile}}
{{Template redirect|Campaign}}
{{Navbox visibility}}
== Usage ==
}}
{{#switch:{{ARTICLESPACE}}
| Wikipedia =
====Campaignboxes====
| #default =
===Campaignboxes===
}}
One common type of navigational template in articles concerning conflicts, wars and related topics is the '''campaignbox''' template, intended to provide context and convenient navigation among articles on the [[battles]] in a [[Military campaign|campaign]], [[Front (military)|front]], [[Theater (warfare)|theater]] or [[war]] (or, more rarely, among several campaigns or wars).
<div style="float:right;width:26.7em;margin-bottom:1.0em;">
{{Campaignbox Second Punic War}}
{{Campaignbox Punic Wars}}
</div>
If the article includes an [[Help:Infobox|infobox]], the campaignbox/es are usually placed immediately after it (i.e. just below it). If available, as with infoboxes such as {{tl|Infobox military conflict}}, use the infobox's {{para|campaignbox}} parameter:
<div style="width:25.0em;border:1px solid black;background:#ddd;padding:0.5em 1.0em;">
<syntaxhighlight lang="wikitext">
{{Infobox military conflict
...
}}
{{Campaignbox XXXX}}
</syntaxhighlight>or<syntaxhighlight lang="wikitext">
{{Infobox military conflict
...
| campaignbox = {{campaignbox XXXX}}
}}
</syntaxhighlight></div>
Articles may include multiple campaignboxes; typically, these are stacked under the infobox. The most common scenario occurs when two levels of campaignboxes are present – for example, an article about a battle can include both a campaignbox listing the battle itself and an "enclosing" campaignbox listing the campaign, theater or war during which the battle took place. Similarly, an article about a war can include both a campaignbox listing the war (among a series of wars) and a campaignbox for the war itself, listing the battles that took place during it.
=== Creating campaignboxes ===
Existing campaignboxes may be viewed through the [[:Category:Campaignbox templates|Campaignbox template category]] to which campaignboxes are added automatically. If a new campaignbox becomes necessary, it should be named ''Template:Campaignbox XXXX'' (where XXXX is the (shortened) name of the campaign) and should use {{tlf|Campaignbox}} thus:
<div style="width:16.7em;border:1px solid black;background:#ddd;padding:0.5em 1.0em;">
<syntaxhighlight lang="wikitext">
{{Campaignbox
| name =
| title =
| battles =
| notes =
}}
</syntaxhighlight>
</div>
==== Parameters ====
; ''name'' : The name by which Wikipedia refers to the template, i.e. "Template:Campaignbox XXXX". This can be produced by using <code><nowiki>{{subst:PAGENAME}}</nowiki></code>.
; ''title'' : The name of the campaign or war, which, if an article about the campaign or war exists, should link to it. Dates should not be indicated unless needed for clarity. Note that long links may cause alignment problems; see [[WP:MILMOS#NAVPROBLEMS|the troubleshooting guide]] for more information.
; ''battles'' : A chronological list of battles and operations in the campaign, linked as <code><nowiki>[[Battle of YYYY|YYYY]]</nowiki></code>. A convenient and accessible way to separate the items in the list is to add <code>| listclass = hlist</code> and then use the standard <kbd>*</kbd> (asterisk)-based [[Help:List|listing format]].
; ''notes'' : (optional) Any explanatory notes needed to clarify the list. This option should be used sparingly.
; (''raw_name'') : (optional; deprecated) This parameter overrides the use of the title in determining the template name and exists for the sake of backward compatibility. When creating a new campaignbox, both title and name should be specified as above and this parameter omitted.
The following optional parameters are passed on to the templates {{tl|Military navigation}} or {{tl|Navbox}} used to create campaignboxes and so can affect their styling. See these two templates' documentation pages for further details.
; ''state'' : To set whether the campaignbox appears fully visible or collapsed (to titlebar only) when it is first presented by a page.
; ''bodyclass'' : CSS styling to affect the whole template.
; ''listclass'' : CSS styling to affect the list of battles, operations, etc. (e.g. to affect {{para|battles}}).
The use of special formatting (such as bolding or changes in font size) in the list of battles{{spaced ndash}}particularly to mark battles as "important"{{spaced ndash}}is generally discouraged; while there are a ''few'' cases where such approaches may be both helpful to the reader and sufficiently well-sourced that they do not constitute original research, they are usually both unnecessary and potentially confusing. Similarly, dividing the list of battles into multiple blocks by inserting heading-like separations should be exceptional; if such a division is felt to be needed, a better solution may be to split the one campaignbox into two or more.<noinclude>
[[Category:WikiProject Military history template instructions|Campaignbox]]
</noinclude><includeonly>{{Sandbox other||
[[Category:Campaignbox templates| ]]
{{#ifeq:{{{noheader|}}}|yes | |
[[Category:Navigational box wrapper templates]]
[[Category:Military navigational boxes|Campaignbox]]
[[Category:Templates that add a category]]
}}}}</includeonly>
05cb24dd8b2b1a78bab960db82b26ce0d68c3063
Template:Campaign/doc
10
1067
2196
2195
2023-09-15T01:59:32Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
#REDIRECT [[Template:Campaignbox/doc]]
96204735bd25c964b25be72f9fe56c67b3302279
Template:Infobox military conflict/doc
10
1068
2198
2197
2023-09-15T01:59:36Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{Documentation subpage}}
{{High-use|16,100}}
{{Lua|Module:Infobox military conflict}}
__TOC__
==Usage==
{{Infobox military conflict
| conflict = Battle of Lützen
| partof = the [[Thirty Years' War]]
| image = Battle of Lutzen.jpg
| alt = Battle of Lutzen by Carl Whalbom depicting King Gustavus Aolphus falling from a horse mortally wounded in a melee
| image_size = 300px
| caption = The '' '''Battle of Lützen''' '' by [[Carl Wahlbom]] shows the death of King [[Gustavus Adolphus]] on 16 November 1632.
| date = 6 November ([[Old Style and New Style dates|O.S.]]) or 16 November ([[Old Style and New Style dates|N.S.]]), 1632
| place = Near [[Lützen]], southwest of [[Leipzig]]<br />(present-day [[Germany]])
| coordinates = {{coord|51|15|N|12|08|E|region:DE_type:city}}
| result = Protestant victory <br />(see {{blue|Aftermath}} section)
| combatant1 = {{flagicon|Sweden|1562}} [[Swedish Empire|Sweden]]<br />[[Protestant Union]]
| combatant2 = {{flag|Holy Roman Empire}}<br/>{{flagicon image|Catholic League (Germany).svg}} [[Catholic League (German)|Catholic League]]
| commander1 = {{flagicon|Sweden|1562}} [[Gustavus Adolphus]]{{KIA}}<br/>{{flagicon|Sweden|1562}} [[Dodo zu Innhausen und Knyphausen|Dodo von Knyphausen]]<br/>{{Flagicon|Electorate of Saxony}} [[Bernhard of Saxe-Weimar]]<br/>{{flagicon|Sweden|1562}} [[Robert Munro, 18th Baron of Foulis]]
| commander2 = {{flagicon|Holy Roman Empire}} [[Albrecht von Wallenstein]]<br/>{{flagicon|Holy Roman Empire}} [[Heinrich Holk]]<br/>{{flagicon|Holy Roman Empire}} [[Gottfried zu Pappenheim|Count Gottfried zu Pappenheim]]{{DOW}}
| strength1 = 12,800 infantry<br />6,200 cavalry<br />60 guns
| strength2 = 10,000 infantry<br />7,000 cavalry, plus 3,000 infantry and 2,000 cavalry on arrival<br />24 guns
| casualties1 = 3,400 dead and 1,600 wounded or missing
| casualties2 = Probably about the same as Swedish casualties{{fakeref|1}}
}}
A military conflict infobox (sometimes referred to as a warbox) may be used to summarize information about a particular military conflict (a battle, campaign, war, or group of related wars) in a standard manner.
Information summarized in an infobox should follow the general guidance for writing a [[Wikipedia:Manual of Style/Lead section|lead section]]. It should not "make claims" or present material not covered by the article. As with a lead section, there is some discretion in citing information in an infobox. The same guidance should be applied to an infobox as given for [[Wikipedia:Manual of Style/Lead section#Citations|citations in a lead section]]. Information in an infobox must conform with [[Wikipedia:Verifiability|verifiability]], [[Wikipedia:Neutral point of view|point-of-view]] and other policies.
Information in the infobox should not be "controversial". Refer the reader to an appropriate section in the article or leave the parameter blank rather than make an unsubstantiated or doubtful claim.
The infobox should be added using the {{tl|infobox military conflict}} template, as shown below:
<div style="width:250px;background:#dddddd;border: 1px solid black;padding:0.5em 1em 0.5em 1em"><syntaxhighlight lang="wikitext">
{{Infobox military conflict
| conflict =
| width =
| partof =
| image =
| image_size =
| alt =
| caption =
| date =
| place =
| coordinates = <!--Use the {{coord}} template -->
| map_type =
| map_relief =
| map_size =
| map_marksize =
| map_caption =
| map_label =
| territory =
| result =
| status =
| combatants_header =
| combatant1 =
| combatant2 =
| combatant3 =
| commander1 =
| commander2 =
| commander3 =
| units1 =
| units2 =
| units3 =
| strength1 =
| strength2 =
| strength3 =
| casualties1 =
| casualties2 =
| casualties3 =
| notes =
| campaignbox =
}}
</syntaxhighlight></div>
'''Note''': When using parameters, avoid the ambiguous abbreviation "N/A", and instead use "unknown" or "none". All subjective or qualitative judgements and numerical quantities or statistics must be cited to a reliable source (see [[WP:MILMOS#CITE]]).
===Parameters===
* '''conflict''' – the name of the conflict being described (e.g. "Battle of Lützen" or "World War I").
* '''width''' – ''optional'' – the width of the infobox, e.g. "400px"; defaults to: "315px".
* '''partof''' – ''optional'' – the larger conflict containing the event described in the article. For battles or campaigns, this should be the war during which the event takes place; for particularly large wars, this may include a theatre (e.g. "the Eastern Front of World War II"). For wars, the parameter may be used to link to a larger group of wars (e.g. the [[Italian War of 1521–26]] to the [[Italian Wars]]). It may be necessary to insert "the" before the name of the war for proper grammar.
* '''image''' – ''optional'' – an image for the warbox. Given in the form <code>Example.jpg</code>
* '''image_size''' – ''optional'' – a size for the image
* '''alt''' – ''optional'' – [[Wikipedia:Manual of Style/Accessibility/Alternative text for images|Alternative text for image]] that is accessible to [[screen reader]]s to help the [[visually impaired]]
* '''caption''' – ''optional'' – the text to be placed below the image.
* '''date''' – ''optional'' – the date of the conflict described. Convention is to give the actual date for battles and the years for wars, but this does not always apply.
* '''place''' – the location of the conflict. For conflicts covering a wide area, a general description (e.g. "France", or "Europe", or "Worldwide") may be used.
* '''coordinates''' – ''optional'' – the location of the structure, given as a coordinate pair by using {{tl|coord}} with ''display=inline,title''. Used to display the geographic location of the conflict and the location on a map added with the <code>map_type</code> parameter.
* '''map_type''' – ''optional'' – the base map to be used for the location map, e.g. "Scotland"; see {{tl|location map}} for more details.
* '''map_relief''' – ''optional'' – "yes" if the location map is a relief map; see {{tl|location map}} for more details.
* '''map_size''' – ''optional'' – width of the location map in pixels (px), e.g. "150"; defaults to: "220".
* '''map_mark''' – ''optional'' – the name of a file to use as the location map marker, e.g. Green_pog.svg; defaults to: "Red_pog.svg".
* '''map_marksize''' – ''optional'' – width of the location map marker in pixels (px), e.g. "10"; defaults to: "8".
* '''map_caption''' – ''optional'' – caption displayed below the location map; defaults to "Location within {{{map_type}}}", e.g. "Location within Scotland".
* '''map_label''' – ''optional'' – the label placed next to the marker on the location map.
* '''territory''' – ''optional'' – any changes in territorial control as a result of the conflict; this should not be used for overly lengthy descriptions of the peace settlement.
* '''action''' – ''optional'' – In case of Coup d'État, short description of ''modus operandi'', e.g. "...marched over the city...", "...dissolving the Congress of the Republic...", "...take the government hostage ...", "...put the country under military control ...", etc.
* '''result''' – ''optional'' – this parameter may use one of two standard terms: "X victory" or "Inconclusive". The term used is for the "immediate" outcome of the "subject" conflict and should reflect what the sources say. In cases where the standard terms do not accurately describe the outcome, a link or note should be made to the section of the article where the result is discussed in detail (such as "See the {{blue|Aftermath}} section"). Such a note can also be used in conjunction with the standard terms but should not be used to conceal an ambiguity in the "immediate" result. Do not introduce non-standard terms like "decisive", "marginal" or "tactical", or contradictory statements like "decisive tactical victory but strategic defeat". Omit this parameter altogether rather than engage in [[WP:NOR|speculation]] about which side won or by how much.
* '''status''' – ''optional'' – for ongoing conflicts, the current status of the conflict. This should not be used if a final result (above) is provided.
* '''combatants_header''' – ''optional'' – sets the header text for the combatants section. Default is "Belligerents". In case of Coup d'État, use "Government-Insurgents "
* '''combatant1'''/'''combatant2'''/'''combatant3''' – ''optional'' – the parties participating in the conflict. This is most commonly the countries whose forces took part in the conflict; however, larger groups (such as alliances or international organizations) or smaller ones (such as particular units, formations, or groups) may be indicated if doing so improves reader understanding. When there is a large number of participants, it may be better to list only the three or four major groups on each side of the conflict, and to describe the rest in the body of the article. The '''combatant3''' field may be used if a conflict has three distinct "sides", and should be left blank on other articles. Combatants should be listed in order of importance to the conflict, be it in terms of military contribution, political clout, or a recognized chain of command. If differing metrics can support alternative lists, then ordering is left to the editors of the particular article. The practice of writing in a "Supported by" subheading is deprecated (see [[Template talk:Infobox military conflict#RfC on "supported by" being used with the belligerent parameter|discussion]]).
** '''combatant1a'''/'''combatant2a'''/'''combatant3a''' – ''optional'' – in cases where the parties significantly changed over the course of the conflict, these subsidiary fields may be used to provide additional rows for the '''combatant''N''''' fields (above).
** '''combatant1b'''/'''combatant2b'''/'''combatant3b''' – ''optional'' – additional row, as above.
** '''combatant1c'''/'''combatant2c'''/'''combatant3c''' – ''optional'' – additional row, as above.
** '''combatant1d'''/'''combatant2d'''/'''combatant3d''' – ''optional'' – additional row, as above.
** '''combatant1e'''/'''combatant2e'''/'''combatant3e''' – ''optional'' – additional row, as above.
* '''commander1'''/'''commander2'''/'''commander3''' – ''optional'' – the commanders of the military forces involved. For battles, this should include military commanders (and other officers as necessary). For wars, only prominent or notable leaders should be listed, with an upper limit of about seven per combatant column recommended. Ranks and position titles should be omitted. The {{tl|KIA}} and {{tl|POW}} templates may be included immediately after the names of commanders who were killed in action or surrendered and were taken prisoner, respectively. The '''commander3''' field can only be used if the '''combatant3''' field is set.
** '''commander1a'''/'''commander2a'''/'''commander3a''' – ''optional'' – in cases where the commanders significantly changed over the course of the conflict, these subsidiary fields may be used to provide additional rows for the '''commander''N''''' fields (above).
** '''commander1b'''/'''commander2b'''/'''commander3b''' – ''optional'' – additional row, as above.
** '''commander1c'''/'''commander2c'''/'''commander3c''' – ''optional'' – additional row, as above.
** '''commander1d'''/'''commander2d'''/'''commander3d''' – ''optional'' – additional row, as above.
** '''commander1e'''/'''commander2e'''/'''commander3e''' – ''optional'' – additional row, as above.
* '''units1'''/'''units2'''/'''units3''' – ''optional'' – the units or formations involved. If a large number of distinct formations is present, it may be better to reference an order of battle in the body of the article than to include the entire list in this field. The '''units3''' field can only be used if the '''combatant3''' field is set.
* '''strength1'''/'''strength2''' – ''optional'' – the numerical strength of the units involved.
:* '''polstrength1'''/'''polstrength2''' – ''optional'' – In case of Coup d'Etat, political organizations that supported the government (1) respective the insurgents (2).
:* '''milstrength1'''/'''milstrength2''' – ''optional'' – In case of Coup d'Etat, military units that supported the government (1) respective the insurgents (2).
* '''strength3''' – ''optional'' – if '''combatant3''' is set, this is a third strength field identical to the two above; if it is '''''not''''' set, this is an alternate combined field for use where only the total participation in a conflict is known.
* '''casualties1'''/'''casualties2''' – ''optional'' – casualties suffered (including: dead, wounded, missing, captured and civilian deaths) and equipment losses. Note that this section of the infobox is headed "Casualties and losses". Terms such as "dead" (or "killed"), "wounded", or "captured" should be used in place of abbreviations such as "KIA" or "POW". Where equipment losses are reported, this should be confined to major or significant types of equipment broadly categorized such as: tanks, guns (artillery pieces), aircraft, destroyers etc.
* '''casualties3''' – ''optional'' – if '''combatant3''' is set, this is a third casualty field identical to the two above; if it is '''''not''''' set, this is an alternate combined field for use where only the total casualties of a conflict are known, or where civilian casualties cannot be directly attributed to either side.
* '''notes''' – ''optional'' – optional field for further notes; this should only be used in exceptional circumstances.
* '''campaignbox''' – ''optional'' – optional field for appending a [[WP:CAMPAIGN|campaignbox template]] to the bottom of the infobox, which allows both boxes to float as a single element (useful if there are subsequent left floating images, which would otherwise not be able to float above the campaign box); the template must be specified in the format <nowiki>{{Campaignbox XYZ}}</nowiki>.<noinclude>
[[Category:WikiProject Military history template instructions|Military conflict infobox]]
</noinclude>{{Campaign/doc|noheader=yes}}
{{Operational plan/doc|noheader=yes}}
==Microformat==
{{UF-hcal-geo}}
== TemplateData ==
{{TemplateData header}}
{{collapse top|title=TemplateData}}
<templatedata>
{
"description": "Summarize information about a particular military conflict (a battle, campaign, war, or group of related wars).",
"format": "{{_\n| _________________ = _\n}}\n",
"params": {
"conflict": {
"label": "Conflict",
"description": "The name of the conflict being described.",
"type": "string/line",
"required": true
},
"width": {
"label": "Width",
"description": "Width of the infobox.",
"type": "string",
"default": "315px",
"required": false
},
"partof": {
"label": "Part of",
"description": "The larger conflict containing the event described in the article.",
"type": "wiki-page-name",
"required": false
},
"image": {
"label": "Image",
"description": "An image for the warbox given in the form Example.jpg.",
"type": "wiki-file-name",
"required": false
},
"image_size": {
"label": "Image size",
"description": "The size of the image",
"type": "string",
"required": false
},
"alt": {
"label": "Alt",
"description": "Alternative textual description of the image",
"type": "string",
"required": false
},
"caption": {
"label": "Caption",
"description": "The text to be placed below the image.",
"type": "string",
"required": false
},
"date": {
"label": "Date",
"description": "The date of the conflict described. Convention is to give the actual date for battles and the years for wars, but this does not always apply.",
"type": "string",
"required": false
},
"place": {
"label": "Place",
"description": "The location of the conflict.",
"type": "string",
"required": true
},
"coordinates": {
"label": "Coordinates",
"description": "The location of the structure, given as a coordinate pair by using {{coord}} with display=inline,title.",
"type": "string",
"required": false
},
"map_type": {
"label": "Map Type",
"description": "The base map to be used for the location map, e.g. \"Scotland\"; see {{location map}} for more details.",
"type": "string",
"required": false
},
"map_relief": {
"label": "Map Relief",
"description": "\"yes\" if the location map is a relief map.",
"type": "string",
"required": false
},
"map_size": {
"label": "Map Size",
"description": "Width of the location map in pixels (px).",
"type": "number",
"default": "220",
"required": false
},
"map_mark": {
"label": "Map Marker",
"description": "File to use as the location map marker.",
"type": "string",
"default": "red_pog.svg",
"required": false
},
"map_marksize": {
"label": "Map Marker Size",
"description": "Width of the location map marker in pixels (px).",
"type": "number",
"default": "8",
"required": false
},
"map_caption": {
"label": "Map Caption",
"description": "Caption displayed below the location map.",
"type": "string",
"default": "Location within {{{map_type}}}",
"required": false
},
"map_label": {
"label": "Map Label",
"description": "The label placed next to the marker on the location map.",
"type": "string/line",
"required": false
},
"territory": {
"label": "Territory",
"description": "Any changes in territorial control as a result of the conflict; this should not be used for overly lengthy descriptions of the peace settlement.",
"type": "string",
"required": false
},
"result": {
"label": "Result",
"description": "This parameter may use one of two standard terms: \"X victory\" or \"Inconclusive\". The term used is for the \"immediate\" outcome of the \"subject\" conflict and should reflect what the sources say. In cases where the standard terms do not accurately describe the outcome, a link or note should be made to the section of the article where the result is discussed in detail (such as \"See the Aftermath section\"). Such a note can also be used in conjunction with the standard terms but should not be used to conceal an ambiguity in the \"immediate\" result. Do not introduce non-standard terms like \"decisive\", \"marginal\" or \"tactical\", or contradictory statements like \"decisive tactical victory but strategic defeat\". Omit this parameter altogether rather than engage in speculation about which side won or by how much.",
"type": "string",
"required": false
},
"status": {
"label": "Status",
"description": "For ongoing conflicts, the current status of the conflict.",
"type": "string/line",
"required": false
},
"combatants_header": {
"label": "\"Combatants\" Header Text",
"description": "Sets the header text for the combatants section.",
"type": "string/line",
"default": "Belligerents",
"required": false
},
"combatant1": {
"label": "Combatant 1",
"description": "A party participating in the conflict.",
"type": "string",
"required": false
},
"combatant2": {
"label": "Combatant 2",
"description": "A party participating in the conflict.",
"type": "string",
"required": false
},
"combatant3": {
"label": "Combatant 3",
"description": "A party participating in the conflict. (only if the conflict has three distinct \"sides\")",
"type": "string",
"required": false
},
"combatant1a": {
"label": "Combatant 1a",
"description": "In cases where the parties significantly changed over the course of the conflict, this field may be used to provide additional rows for the Combatant 1 field.",
"type": "string",
"required": false
},
"combatant2a": {
"label": "Combatant 2a",
"description": "In cases where the parties significantly changed over the course of the conflict, this field may be used to provide additional rows for the Combatant 2 field.",
"type": "string",
"required": false
},
"combatant3a": {
"label": "Combatant 3a",
"description": "In cases where the parties significantly changed over the course of the conflict, this field may be used to provide additional rows for the Combatant 3 field.",
"type": "string",
"required": false
},
"combatant1b": {
"label": "Combatant 1b",
"description": "In cases where the parties significantly changed over the course of the conflict, this field may be used to provide additional rows for the Combatant 1 field.",
"type": "string",
"required": false
},
"combatant2b": {
"label": "Combatant 2b",
"description": "In cases where the parties significantly changed over the course of the conflict, this field may be used to provide additional rows for the Combatant 2 field.",
"type": "string",
"required": false
},
"combatant3b": {
"label": "Combatant 3b",
"description": "In cases where the parties significantly changed over the course of the conflict, this field may be used to provide additional rows for the Combatant 3 field.",
"type": "string",
"required": false
},
"combatant1c": {
"label": "Combatant 1c",
"description": "In cases where the parties significantly changed over the course of the conflict, this field may be used to provide additional rows for the Combatant 1 field.",
"type": "string",
"required": false
},
"combatant2c": {
"label": "Combatant 2c",
"description": "In cases where the parties significantly changed over the course of the conflict, this field may be used to provide additional rows for the Combatant 2 field.",
"type": "string",
"required": false
},
"combatant3c": {
"label": "Combatant 3c",
"description": "In cases where the parties significantly changed over the course of the conflict, this field may be used to provide additional rows for the Combatant 3 field.",
"type": "string",
"required": false
},
"combatant1d": {
"label": "Combatant 1d",
"description": "In cases where the parties significantly changed over the course of the conflict, this field may be used to provide additional rows for the Combatant 1 field.",
"type": "string",
"required": false
},
"combatant2d": {
"label": "Combatant 2d",
"description": "In cases where the parties significantly changed over the course of the conflict, this field may be used to provide additional rows for the Combatant 2 field.",
"type": "string",
"required": false
},
"combatant3d": {
"label": "Combatant 3d",
"description": "In cases where the parties significantly changed over the course of the conflict, this field may be used to provide additional rows for the Combatant 3 field.",
"type": "string",
"required": false
},
"commander1": {
"label": "Commander of Combatant 1",
"description": "The commanders of the military forces of Combatant (1) involved.",
"type": "string",
"required": false
},
"commander2": {
"label": "Commander of Combatant 2",
"description": "The commanders of the military forces of Combatant 2 involved.",
"type": "string",
"required": false
},
"commander3": {
"label": "Commander of Combatant 3",
"description": "The commanders of the military forces of Combatant 3 involved.",
"type": "string",
"required": false
},
"units1": {
"label": "Units of Combatant 1",
"description": "The units or formations of Combatant 1 involved. If a large number of distinct formations is present, it may be better to reference an order of battle in the body of the article than to include the entire list in this field.",
"type": "string",
"required": false
},
"units2": {
"label": "Units of Combatant 2",
"description": "The units or formations of Combatant 2 involved. If a large number of distinct formations is present, it may be better to reference an order of battle in the body of the article than to include the entire list in this field.",
"type": "string",
"required": false
},
"units3": {
"label": "Units of Combatant 3",
"description": "The units or formations of Combatant 3 involved. If a large number of distinct formations is present, it may be better to reference an order of battle in the body of the article than to include the entire list in this field.",
"type": "string",
"required": false
},
"strength1": {
"label": "Strength of Combatant 1",
"description": "The numerical strength of Combatant 1.",
"type": "string",
"required": false
},
"strength2": {
"label": "Strength of Combatant 2",
"description": "The numerical strength of Combatant 2.",
"type": "string",
"required": false
},
"strength3": {
"label": "Strength of Combatant 3",
"description": "If Combatant 3 is set, this field is for the numerical strength of Combatant 3. If Combatant 3 is not set, this is an alternate combined field for use where only the total participation in a conflict is known.",
"type": "string",
"required": false
},
"casualties1": {
"label": "Casualties of Combatant 1",
"description": "Casualties suffered by Combatant 1 (including: dead, wounded, missing, captured and civilian deaths) and equipment losses. Terms such as \"dead\" (or \"killed\"), \"wounded\", or \"captured\" should be used in place of abbreviations such as \"KIA\" or \"POW\". Where equipment losses are reported, this should be confined to major or significant types of equipment broadly categorized such as: tanks, guns (artillery pieces), aircraft, destroyers etc.",
"type": "string",
"required": false
},
"casualties2": {
"label": "Casualties of Combatant 2",
"description": "Casualties suffered by Combatant 2 (including: dead, wounded, missing, captured and civilian deaths) and equipment losses. Terms such as \"dead\" (or \"killed\"), \"wounded\", or \"captured\" should be used in place of abbreviations such as \"KIA\" or \"POW\". Where equipment losses are reported, this should be confined to major or significant types of equipment broadly categorized such as: tanks, guns (artillery pieces), aircraft, destroyers etc.",
"type": "string",
"required": false
},
"casualties3": {
"label": "Casualties of Combatant 3",
"description": "If Combatant 3 is set, this field is for the casualties suffered by Combatant 3, (including: dead, wounded, missing, captured and civilian deaths) and equipment losses. Terms such as \"dead\" (or \"killed\"), \"wounded\", or \"captured\" should be used in place of abbreviations such as \"KIA\" or \"POW\". Where equipment losses are reported, this should be confined to major or significant types of equipment broadly categorized such as: tanks, guns (artillery pieces), aircraft, destroyers etc. If combatant3 is not set, this is an alternate combined field for use where only the total casualties of a conflict are known, or where civilian casualties cannot be directly attributed to either side.",
"type": "string",
"required": false
},
"notes": {
"label": "Notes",
"description": "Optional field for further notes; this should only be used in exceptional circumstances.",
"type": "string",
"required": false
},
"campaignbox": {
"label": "Campaignbox",
"description": "Optional field for appending a campaignbox template to the bottom of the infobox, which allows both boxes to float as a single element (useful if there are subsequent left floating images, which would otherwise not be able to float above the campaign box); the template must be specified in the format {{Campaignbox XYZ}}.",
"type": "string",
"required": false
}
}
}</templatedata>
{{Collapse bottom}}
==See also==
*{{tl|Infobox military operation}}
*{{tl|Infobox civil conflict}}
*{{tl|Infobox civilian attack}}
<includeonly>{{Sandbox other||
<!-- Categories below this line, please; interwikis at Wikidata -->
[[Category:War and conflict infobox templates| ]]
[[Category:Templates based on the Infobox Lua module]]
}}</includeonly>
b7bc1bfd8830e6f3810fed38740c84ef509585dd
Template:Infobox military operation/doc
10
1069
2200
2199
2023-09-15T01:59:37Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
{{#ifeq:{{{noheader|}}}|yes||{{Documentation subpage}}
{{Lua|Module:Infobox|Module:InfoboxImage|Module:Check for unknown parameters}}
}}
This infobox may be used to describe a particular planned or executed military operation or attack. For operations that resulted in combat, it can be used as an auxiliary template to the {{tl|infobox military conflict}}, if necessary; for other types of operations, including those that were planned but never executed, it may be used alone. In the case of conflicts that consisted of multiple independent operations, multiple copies of the box may be used on a single article.
__TOC__
=== Usage ===
{{Parameter names example|_template = Infobox military operation |title |name |partof |conflict |image |image_size |image_upright |alt |caption |coordinates = {{coord|0|0}} |map_type=Earth |map_size= |map_label |map_caption |scope |type |location |coordinates |planned |planned_by |commanded_by |target |objective |date |time |time-begin |time-end |timezone |executed_by |outcome |casualties |fatalities |injuries}}
<syntaxhighlight lang="wikitext" style="overflow:auto;">
{{Infobox military operation
|name =
|partof =
|subtitle =
|image =
|image_upright =
|alt =
|caption =
|scope =
|type =
|location =
|location2 = <!-- 2 through 10 for more locations -->
|coordinates =
|coordinates2 = <!-- 2 through 10 for more locations -->
|map_type =
|map_size =
|map_caption =
|map_label =
|map_label2 = <!-- 2 through 10 for more locations -->
|planned =
|planned_by =
|commanded_by =
|objective =
|target =
|date = <!-- {{start date|YYYY|MM|DD|df=y}} -->
|time =
|time-begin =
|time-end =
|timezone =
|executed_by =
|outcome =
|casualties =
|fatalities =
|injuries =
}}</syntaxhighlight>
=== Example ===
{{Infobox military operation
|name = Case Blue
|scope = Strategic offensive
|planned_by = ''[[Wehrmacht]]''
|objective = Capture of [[Caucasus]] oil fields
|executed = Began {{start date|1942|06|28|df=y}}
|executed_by = [[Army Group South]]
}}
<syntaxhighlight lang="wikitext" style="overflow:auto;">
{{Infobox military operation
|name = Case Blue
|scope = Strategic offensive
|planned_by = ''[[Wehrmacht]]''
|objective = Capture of [[Caucasus]] oil fields
|executed = Began {{start date|1942|06|28|df=y}}
|executed_by = [[Army Group South]]
}}</syntaxhighlight>
=== Parameters ===
'''Note''': When using parameters, avoid the ambiguous abbreviation "N/A", and instead use "unknown" or "none". All subjective or qualitative judgements and numerical quantities or statistics must be cited to a reliable source (see [[WP:MILMOS#CITE]]).
* '''name''' – the name of the operational plan; names in multiple languages may be provided.
* '''subtitle''' – alternative name of the conflict being described.
* '''partof''' – ''optional'' – the larger conflict containing the event described in the article.
* '''image''' – ''optional'' – an image for the warbox. Given in the form <code>File:Example.jpg</code>
* '''image_upright''' – ''optional'' – image upright scaling factor.
* '''alt''' – ''optional'' – [[Wikipedia:Manual of Style/Accessibility/Alternative text for images|Alternative text for image]] that is accessible to [[screen reader]]s to help the [[visually impaired]]
* '''caption''' – ''optional'' – the text to be placed below the image.
* '''location''' – ''optional'' – the location of the operation.
* '''coordinates''' – ''optional'' – the coordinates for the location above, given as {{tl|coord}} with ''|display=inline,title''. Used to display the geographic location of the conflict and the location on a map added with the <code>map_type</code> parameter. If coordinates for several locations are given, consider if hany shall have the title display.
* '''map_type''' – ''optional'' – the base map to be used for the location map, e.g. "Scotland"; see {{tl|location map}} for more details.
* '''map_size''' – ''optional'' – width of the location map in pixels (px), e.g. "150"; defaults to: "220".
* '''map_caption''' – ''optional'' – caption displayed below the location map; defaults to "Location within {{{map_type}}}", e.g. "Location within Scotland".
* '''map_label''' – ''optional'' – the label placed next to the marker on the location map.
* '''scope''' – ''optional'' – the scope of the operation, such as "Strategic", "Operational", or "Tactical".
* '''type''' – ''optional'' – as an alternative to the '''scope''' field above, the type of operation, such as "Suicide attack" or "Ambush".
* '''planned''' – ''optional'' – the date(s) on which the plan was developed.
* '''planned_by''' – ''optional'' – the person or group responsible for developing the plan.
* '''commanded_by''' – ''optional'' – the person commanding the operation.
* '''objective''' – ''optional'' – the objective(s) of the operation.
* '''target''' – ''optional'' – as an alternative to the '''objective''' field above, the target(s) of the operation.
* '''date''' – ''optional'' – the date(s), if any, on which the operation was executed. use {{Tl|Start date}} (and {{Tl|End date}} if required)
* '''time''' – ''optional'' – the time, if any, at which the operation was executed.
* '''time-begin''' and '''time-end''' – ''optional'' – as an alternative to the '''time''' field above, the start and end times, respectively.
* '''timezone''' – ''optional'' – the timezone of the location of the operation; [[UTC]]+X, [[UTC]]-X, or [[UTC]] (i.e. offset from [[UTC]]) is preferred.
* '''executed_by''' – ''optional'' – the people, groups, units, or formations responsible for executing the operation.
* '''outcome''' – ''optional'' – the outcome of the operation from the perspective of the planners.
* '''casualties''' – ''optional'' – any casualties occurring during the execution of the operation.
* '''fatalities''' – ''optional'' – as an alternative to the '''casualties''' field above, the number of fatalities occurring during the execution of the operation.
* '''injuries''' – ''optional'' – as an alternative to the '''casualties''' field above, the number of injuries occurring during the execution of the operation.
=== Microformat ===
{{UF-hcal}}
=== TemplateData ===
{{collapse top|title=[[Wikipedia:TemplateData|TemplateData]] for this template used by [[mw:Extension:TemplateWizard|TemplateWizard]], [[Wikipedia:VisualEditor|VisualEditor]] and other tools}}
{{TemplateData header|noheader=y}}
<templatedata>
{
"description": "This infobox may be used to describe a particular planned or executed military operation or attack.",
"format": "{{_\n| _____________ = _\n}}\n",
"params": {
"name": {
"label": "Name",
"description": "The name of the military operation",
"type": "string",
"suggested": true
}
},
"paramOrder": [
"name"
]
}
</templatedata>
{{collapse bottom}}
=== See also ===
* {{tl|Infobox civil conflict}}
* {{tl|Infobox civilian attack}}
* {{tl|Infobox military conflict}}<noinclude>
[[Category:WikiProject Military history template instructions|Military operation]]
</noinclude>
<includeonly>
{{Sandbox other||{{#ifeq:{{{noheader|}}}|yes||
<!-- Categories below this line; interwikis at Wikidata -->
[[Category:Templates with coordinates fields]]
[[Category:Military auxiliary infobox templates|Military operation]]
[[Category:Templates that add a tracking category|{{PAGENAME}}]]
}}}}</includeonly>
8e4979061f83f9af8d04b1f9f460ccb593e7d740
Template:Operational plan/doc
10
1070
2202
2201
2023-09-15T01:59:37Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
#REDIRECT [[Template:Infobox military operation/doc]]
10b255654acded6663dadad8d9084ba41f66bd68
Template:UF-hcal-geo
10
1071
2204
2203
2023-09-15T01:59:38Z
Ilovethehitgameomori
2
1 revision imported
wikitext
text/x-wiki
The HTML markup produced by this template includes an [[hCalendar|hCalendar microformat]], which makes the event details [[parsing|parsable]] by computers, either acting automatically to catalogue article across Wikipedia, or via a browser tool operated by a person, to (for example) add the subject to a calendar or diary application. Within the hCalendar is a [[Geo (microformat)|Geo microformat]], which additionally makes the [[geographic coordinate system|coordinates]] (latitude & longitude) parsable, so that they can be, say, looked up on a map, or downloaded to a [[Global Positioning System|GPS]] unit. For more information about the use of [[microformat]]s on Wikipedia, please see [[Wikipedia:WikiProject Microformats|the microformat project]].
Dates will only be included if you use {{tl|Start date}} or {{tl|End date}} (use the former for single dates, [[Wikipedia:WikiProject Microformats/dates|but do not use any of these if the date is before 1583 CE]]). {{tl|End date}} requires that a time be specified, but display of this time may be suppressed by adding {{para|nodate|yes}} to the end.
To include a URL, use {{tl|URL}}.
hCalendar uses HTML classes including:
{{Flatlist|indent=1|
*attendee
*dtend
*dtstart
*location
*summary
*url
*vevent
}}
Geo is produced by calling {{tl|coord}}, and uses HTML classes:
{{Flatlist|indent=1|
*geo
*latitude
*longitude
}}
'''Please do not rename or remove these classes nor collapse nested elements which use them.'''<br/>Also, when giving coordinates, please don't be [[wikipedia:WikiProject Geographical coordinates#Precision|overly precise]].
<includeonly>{{#ifeq:{{SUBPAGENAME}}|doc | |{{#ifeq:{{SUBPAGENAME}}|sandbox | |[[Category:Templates generating hCalendars and Geo|{{PAGENAME}}]]}} }}</includeonly><noinclude>
[[Category:Microformat (uF) message templates]]
</noinclude>
17ca83a86600e9c6435d5e462efaadfbe2c34b4b
Indo-Tibetan War
0
1072
2205
2023-09-15T23:40:16Z
Ilovethehitgameomori
2
Created page with "{{Infobox military conflict | conflict = Indo-Tibetan War | width = | partof = | image = | image_size = | alt = | caption = | date = 1005 AD | place = [[w:North India|North India]], [[w:Tibet|Tibet]], [[w:Nepal|Nepal]], [[w:Bhutan|Bhutan]] | map_type = | map_relief = | map_size = | map_marksize = | map_caption = | map_label = | territory = | result = | status = Ongoing | combatants_header = |..."
wikitext
text/x-wiki
{{Infobox military conflict
| conflict = Indo-Tibetan War
| width =
| partof =
| image =
| image_size =
| alt =
| caption =
| date = 1005 AD
| place = [[w:North India|North India]], [[w:Tibet|Tibet]], [[w:Nepal|Nepal]], [[w:Bhutan|Bhutan]]
| map_type =
| map_relief =
| map_size =
| map_marksize =
| map_caption =
| map_label =
| territory =
| result =
| status = Ongoing
| combatants_header =
| combatant1 = [[Khaganate of Tibet]] <br/> Binbowien dynasty <br/> Sundanese Empire
| combatant2 = Indian Empire
| commander1 =
| commander2 =
| commander3 =
| units1 =
| units2 =
| units3 =
| strength1 =
| strength2 =
| strength3 =
| casualties1 =
| casualties2 =
| casualties3 =
| notes =
| campaignbox =
}}
On September 13th, 1005 AD, after prior planning, Emperor Rayyan I of Binbowia officially declared the wars declaration on behalf of the Tibetan Empire, under the reason that the Indian Empire was too big and a threat to Asia’s national security. Despite attempts to prevent the war, all were quickly denied by the main aggressor: the Tibetan Empire. Despite this, no advances have been made.
== Background ==
A few days earlier, the leaders of Tibet, Binbowia and the Sunda Empire, congregated and decided that they would declare war on India, reasoning that it was a “national threat to the safety of Asia.” The war was then abruptly declared, a day or so later. However, no war efforts have been made.
3a3e5c7a795d735bcf85b7f49dc373f7f6c88f8a
Main Page
0
1
2206
2113
2023-09-18T22:53:56Z
2601:546:C000:5C30:D85A:F80C:36E4:B911
0
/* Welcome to {{SITENAME}}! */
wikitext
text/x-wiki
__NOTOC__
== Welcome to Class Leads Nations II! ==
Welcome to ''Class Leads Nations II''! This is a site providing information for the map game’s first season.
* Confused on how to make a page? First, search the article you want to make - obviously, it will not exist. Press the redlink. It will allow you to make the page. Now, go to the pages [[Template:Infobox country/Source]] or [[Template:Infobox character]] (alternatively, use [[Nation template]] to work faster) and paste the source-code into the source editing feature. Add additional text under the template about your country.</small>
* Q: Why doesn’t the template show up when I paste from the pages you linked?
Answer: You need to fill it out. Remove what you don’t need!
<h2 id="mp-otd-h2" style="clear:both; margin:0.5em; background:#cedff2; font-family:inherit; font-size:120%; font-weight:italic; border:1px solid #a3b0bf; color:#000; padding:0.2em 0.4em;">In the CLN2 News</h2>
<div id="mp-otd" style="padding:0.1em 0.6em 0.5em;"></div>
* TBA </div>
== Comments ==
This is a test for the WikiForum. <br />-- [[User:Ilovethehitgameomori|Ilovethehitgameomori]] ([[User talk:Ilovethehitgameomori|talk]]) 23:05, 13 September 2023 (UTC)
51383e8b731140123d372bc0d30c6b2a3d647c0a
File:German empire.jpg
6
1073
2207
2023-09-19T18:28:57Z
Ilovethehitgameomori
2
wikitext
text/x-wiki
da39a3ee5e6b4b0d3255bfef95601890afd80709
German Empire
0
1074
2208
2023-09-19T18:39:26Z
Ilovethehitgameomori
2
Created page with "{{Infobox country |conventional_long_name = German Empire</div>([[w:German|German]]) Deutsches Reich |common_name = |image_flag = German empire.jpg |alt_flag = |image_coat = |symbol_type = Coat of arms |official_languages = German |demonym = German |capital = Berlin |largest_city = Berlin |government_type = Absolute monarchy |leader_title1 = Emperor |leader_name1 = Jaden von Sachsen |area_rank = |area_km2 = 540,857.54 |area_sq_mi = 208,826.26 <!--Do not remove per [..."
wikitext
text/x-wiki
{{Infobox country
|conventional_long_name = German Empire</div>([[w:German|German]]) Deutsches Reich
|common_name =
|image_flag = German empire.jpg
|alt_flag =
|image_coat =
|symbol_type = Coat of arms
|official_languages = German
|demonym = German
|capital = Berlin
|largest_city = Berlin
|government_type = Absolute monarchy
|leader_title1 = Emperor
|leader_name1 = Jaden von Sachsen
|area_rank =
|area_km2 = 540,857.54
|area_sq_mi = 208,826.26 <!--Do not remove per [[WP:MOSNUM]]-->
}}
( Information about government, minimal history mention, leader info, etc. )
== Etymology ==
( The meaning of the name of your nation )
== History ==
( History of your nation )
== Politics and state organization ==
( Politics, ideology/state organization/provinces )
== Culture ==
( Description of your culture )
== Army structure ==
( Self explanatory )
8bc745ef28ddb735910e94cc2c2df03f2f5948d4